Python实现简易端口扫描器代码实例

Python实现简易端口扫描器代码实例,第1张

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

在网上的一些资料的基础上自己又添了些新内容,算是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 activeCount() <=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)    times=time.time()-time_start    print 'use time : %s' % times

使用效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:Python实现的多线程端口扫描工具分享使用Python编写简单的端口扫描器实例分享python基础教程之udp端口扫描Python端口扫描简单程序python端口扫描系统实现方法实例探究Python以并发方式编写高性能端口扫描器的方法使用Python3制作TCP端口扫描器python实现的多线程端口扫描功能示例基于Python socket的端口扫描程序实例代码Python实现的端口扫描功能示例 总结

以上是内存溢出为你收集整理的Python实现简易端口扫描器代码实例全部内容,希望文章能够帮你解决Python实现简易端口扫描器代码实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1204141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存