国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現簡易端口掃描器代碼實例

2020-02-23 04:16:16
字體:
來源:轉載
供稿:網友

在網上的一些資料的基礎上自己又添了些新內容,算是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 in results:      print "%s:%d is opened..." %(ip,port)    times=time.time()-time_start    print 'use time : %s' % times

使用效果如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长宁县| 霍州市| 宜章县| 成武县| 焉耆| 石渠县| 建昌县| 衡山县| 辰溪县| 黄石市| 武乡县| 渝中区| 松溪县| 天全县| 麻栗坡县| 崇文区| 呼伦贝尔市| 始兴县| 东海县| 高安市| 额尔古纳市| 顺义区| 南阳市| 前郭尔| 蓬安县| 凉城县| 手机| 盐城市| 微山县| 新干县| 辽源市| 吉林市| 会同县| 盘锦市| 荔波县| 鄂州市| 商洛市| 定襄县| 龙井市| 龙海市| 天门市|