• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

利用Python实现简易端口扫描器方法介绍

python 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论

在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧。

#coding=utf-8import socketimport timeimport sysimport structimport threadingfrom threading import Thread,activeCountresults=[]def portScanner(ip,port):    server = (ip,port)    sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    sockfd.settimeout(0.1)          #设置阻塞模式下socket的超时时间    ret = sockfd.connect_ex(server)  #成功返回0,失败返回error的值。    if not ret:        sockfd.close()        results.append([ip,port])        #print '%s:%s is opened...' % (ip,port)    else:        sockfd.close()        pass    return ''    def ip2num(ip):         #将ip地址转换成数字    lp = [int(x) for x in ip.split('.')]    return lp[0] << 24 | lp[1] << 16 | lp[2] << 8 |lp[3]def num2ip(num):    ip = ['','','','']    ip[3] = (num & 0xff)    ip[2] = (num & 0xff00) >> 8    ip[1] = (num & 0xff0000) >> 16    ip[0] = (num & 0xff000000) >> 24    return '%s.%s.%s.%s' % (ip[0],ip[1],ip[2],ip[3])def iprange(ip1,ip2):    num1 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip1)))[0])    num2 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip2)))[0])    tmp = num2 - num1    if tmp < 0:        return None    else:        return num1,num2,tmpif name == 'main':    if((len(sys.argv)!= 4)&(len(sys.argv)!= 2)):   #用法说明        print 'Usage:\n\tscanner.py startip endip port'        print '\tscanner.py ip'        sys.exit()    if len(sys.argv)==4:            #对某一IP段的扫描        time_start=time.time()        #起始时间        startip = sys.argv[1]        #起始IP        endip = sys.argv[2]            #结束IP        port = int(sys.argv[3])        #端口号        res = iprange(startip,endip)        if not res:            print 'endip must be bigger than startone'            sys.exit()        elif res[2] == 0:            portScanner(startip,port)        else:            for x in xrange(int(res[2])+1):        #IP地址依次递增                startipnum = ip2num(startip)                startipnum = startipnum + x                if activeCo<em>本文来源[email protected]搞@^&代*@码)网5</em>unt() <=1000:                                          Thread(target=portScanner,args=(num2ip(startipnum),port)).start()                        print "There are %d hosts." %len(results)        results.sort()        for ip,port in results:            print "%s:%d is opened..." %(ip,port)        times=time.time()-time_start            #用时        print 'use time : %s' % times                    if len(sys.argv)==2:        time_start=time.time()        port=0        ip=sys.argv[1]        while(port<2000):            if activeCount() <= 40:     #设置40线程扫描                Thread(target = portScanner, args = (ip, port)).start()                port=port+1        results.sort()        for ip,port in results:            print "%s:%d is opened..." %(ip,port)        times=time.time()-time_start        print 'use time : %s' % times

使用效果如下:

以上就是利用Python实现简易端口扫描器方法介绍的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:利用Python实现简易端口扫描器方法介绍
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址