zoukankan      html  css  js  c++  java
  • 网络攻防学习 1编写一个端口扫描器

    谨以此文献给初学的自己!

    我有太多的名词不认识通过学习 一步步巩固基础 一步步提高自己r

    任何一个靠谱的网络攻击都是起步于侦查的。我们将学习编写一个扫描主机开放的tcp端口的侦察小脚本,为了与tcp端交互,我们先建立TCP套接字。

    套接字:

    英文名字为socket, 是支持TCP/IP网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。

    书写一个初级的端口扫描器,从而学习了optparse的用法,optparse可用来解析命令行参数 来传递指令来实现交互

    import optparse
    from optparse import OptionParser
    import socket
    from socket import *
    #去测试目标主机的那个端口是开放的,并且开放的端口的活动应用是什么
    def connScan(tgtHost,tgtPort):
        try:
            connSkt=socket.socket(AF_INET,SOCK_STREAM)
            connSkt.connect((tgtHost,tgtPort))
            #我们需要发送一个消息去获得一个响应,从而根据这个响应 我们来判断对应的目标主机和端口上的应用
            connSkt.send("ViolentPython
    ")
            results=connSkt.recv(1024)
            #标明端口开放
            print ("[+]%d/tcp open")% tgtPort
            #输出返回的结果
            print ("[+]"+str(results))
            connSkt.close()
        except:
            print ("[-]%d/tcp closed"% tgtPort)
    def portScan(tgtHost,tgtPorts):
        #其实我我觉得这两个try就是为了测试tgtHost的准确性
        try:
            #传入一个主机名字会返回其对应得IP地址
            tgtIP=gethostbyname(tgtHost)
        except:
            print ("[-] cannot resolve '%s': unkown host"%tgtHost)
            return
        try:
            #根据IP能返回其对应的主机名字
            tgtName=gethostbyaddr(tgtIP)
            #返回扫描的结果
            print ("
    [+] Scan Results for:" +tgtName[0])
        except:
            print ("
    [+] Scan Results for :"+tgtIP)
        #设置全局的socket超出时间1秒
        setdefaulttimeout(1)
        for tgtPort in tgtPorts:
            print ("Scanning Port%s "%tgtPort)
            connScan(tgtHost,int(tgtPort))
    
    def main():
    #生成一个参数解释器的实例
        parser=optparse.OptionParser("usage %prog "+"-H <target host> -p <target port>")
        #指定解析参数
        parser.add_option("-H",dest="tgtHost",type="string",help="specify target host")
        parser.add_option("-p",dest="tgtPort",type="int",help="specify target port[s] separeted by comma")
        #parse_args 来用来解析这些参数
        (options,args)=parser.parse_args()
    
        tgtHost=options.tgtHost
        #端口不止一个 所以我们用split分隔 共同存储在一个列表中
        tgtPorts=str(options.tgtPort).split(",")
        if (tgtHost==None) | (tgtPorts[0]==None):
            print ("[-]you must specify a target host and port[s].")
            exit(0)
        portScan(tgtHost,tgtPorts)
    if __name__=="__main__":
        main()
    #上面这一部分 快速解析了要扫描的目标主机名字 和 端口
  • 相关阅读:
    近两年项目回顾系列——velocity模板引擎
    求两个集合的交集和并集C#
    CI框架下JS/CSS文件路径的设置
    Apache下的 SSI 配置
    DOTA
    MySql 查询结果按照指定的顺序
    strtotime 方便获取前几天后几天
    CI框架的session失效原因
    正则解析多重循环模板
    PHP 多维数组按照指定的顺序进行排序
  • 原文地址:https://www.cnblogs.com/shidi/p/7487368.html
Copyright © 2011-2022 走看看