python使用多线程+socket实现端口扫描


Posted in Python onMay 28, 2020

本文实例为大家分享了python实现端口扫描的具体代码,供大家参考,具体内容如下

今天老师上课说的内容,使用多线程+socket写一个端口扫描器
写的些许潦草,也没注释,不过问题不大,应该都能看懂
多线程+queue真的nice!!

import socket
import threading
import time
import queue
import sys

class ScannerPort(object):
 class ScanPorts (threading.Thread):
 def __init__(self, ip, portlist, timeout):
  threading.Thread.__init__(self)
  self.ip = ip
  self.portlist = portlist
  self.timeout = timeout
  
 def run(self):
  while True:
  if self.portlist.empty():
   break
  ip = self.ip
  port = self.portlist.get() 
  timeout = self.timeout
  
  try:
   s = socket.socket()
   s.settimeout(timeout)
   result = s.connect_ex((ip, port))
   if result == 0:
   sys.stdout.write("% 6d [OPEN]\n" % port)
  except Exception as e:
   print(e)
  finally:
   s.close()

def main(ip, port_list, thread_num):
 start_time = time.time()
 port_scanner = ScannerPort()
 threads = []
 port_queue = queue.Queue()
 timeout = 2
 
 for port in port_list:
 port_queue.put(port)
 
 for i in range(thread_num):
 threads.append(port_scanner.ScanPorts(ip, port_queue, timeout))

 for thread in threads:
 thread.start()
 
 for thread in threads:
 thread.join()
 
 print("耗时:", time.time() - start_time, "s")
 
def GetPortList(string):
 top50 = [21,22,25,53,80,110,113,135,139,143,179,199,443,445,465,514,548,554,587,646,993,995,1025,1026,1433,1720,1723,2000,3306,3389,5060,5666,5900,6001,8000,8008,8080,8443,8888,10000,32768,49152,49154]
 top100 = [7,9,13,21,22,25,37,53,79,80,88,106,110,113,119,135,139,143,179,199,389,427,443,444,445,465,513,514,543,548,554,587,631,646,873,990,993,995,1025,1026,1027,1028,1110,1433,1720,1723,1755,1900,2000,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,5060,5101,5190,5357,5432,5631,5666,5800,5900,6000,6646,7070,8000,8008,8080,8443,8888,9100,9999,32768,49152,49153,49154,49155,49156]
 top1000 = [1,3,6,9,13,17,19,20,21,22,23,24,25,30,32,37,42,49,53,70,79,80,81,82,83,84,88,89,99,106,109,110,113,119,125,135,139,143,146,161,163,179,199,211,222,254,255,259,264,280,301,306,311,340,366,389,406,416,425,427,443,444,458,464,481,497,500,512,513,514,524,541,543,544,548,554,563,587,593,616,625,631,636,646,648,666,667,683,687,691,700,705,711,714,720,722,726,749,765,777,783,787,800,808,843,873,880,888,898,900,901,902,911,981,987,990,992,995,999,1000,1001,1007,1009,1010,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1102,1104,1105,1106,1107,1110,1111,1112,1113,1117,1119,1121,1122,1123,1126,1130,1131,1137,1141,1145,1147,1148,1151,1154,1163,1164,1165,1169,1174,1183,1185,1186,1192,1198,1201,1213,1216,1217,1233,1236,1244,1247,1259,1271,1277,1287,1296,1300,1309,1310,1322,1328,1334,1352,1417,1433,1443,1455,1461,1494,1500,1503,1521,1524,1533,1556,1580,1583,1594,1600,1641,1658,1666,1687,1700,1717,1718,1719,1720,1723,1755,1761,1782,1801,1805,1812,1839,1862,1863,1875,1900,1914,1935,1947,1971,1974,1984,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2013,2020,2021,2030,2033,2034,2038,2040,2041,2042,2045,2046,2047,2048,2065,2068,2099,2103,2105,2106,2111,2119,2121,2126,2135,2144,2160,2170,2179,2190,2196,2200,2222,2251,2260,2288,2301,2323,2366,2381,2382,2393,2399,2401,2492,2500,2522,2525,2557,2601,2604,2607,2638,2701,2710,2717,2725,2800,2809,2811,2869,2875,2909,2920,2967,2998,3000,3003,3005,3006,3011,3013,3017,3030,3052,3071,3077,3128,3168,3211,3221,3260,3268,3283,3300,3306,3322,3323,3324,3333,3351,3367,3369,3370,3371,3389,3404,3476,3493,3517,3527,3546,3551,3580,3659,3689,3703,3737,3766,3784,3800,3809,3814,3826,3827,3851,3869,3871,3878,3880,3889,3905,3914,3918,3920,3945,3971,3986,3995,3998,4000,4001,4002,4003,4004,4005,4045,4111,4125,4129,4224,4242,4279,4321,4343,4443,4444,4445,4449,4550,4567,4662,4848,4899,4998,5000,5001,5002,5003,5009,5030,5033,5050,5054,5060,5080,5087,5100,5101,5120,5190,5200,5214,5221,5225,5269,5280,5298,5357,5405,5414,5431,5440,5500,5510,5544,5550,5555,5560,5566,5631,5633,5666,5678,5718,5730,5800,5801,5810,5815,5822,5825,5850,5859,5862,5877,5900,5901,5902,5903,5906,5910,5915,5922,5925,5950,5952,5959,5960,5961,5962,5987,5988,5998,5999,6000,6001,6002,6003,6004,6005,6006,6009,6025,6059,6100,6106,6112,6123,6129,6156,6346,6389,6502,6510,6543,6547,6565,6566,6580,6646,6666,6667,6668,6689,6692,6699,6779,6788,6792,6839,6881,6901,6969,7000,7001,7004,7007,7019,7025,7070,7100,7103,7106,7200,7402,7435,7443,7496,7512,7625,7627,7676,7741,7777,7800,7911,7920,7937,7999,8000,8001,8007,8008,8009,8010,8021,8031,8042,8045,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8093,8099,8180,8192,8193,8200,8222,8254,8290,8291,8300,8333,8383,8400,8402,8443,8500,8600,8649,8651,8654,8701,8800,8873,8888,8899,8994,9000,9001,9002,9009,9010,9040,9050,9071,9080,9090,9099,9100,9101,9102,9110,9200,9207,9220,9290,9415,9418,9485,9500,9502,9535,9575,9593,9594,9618,9666,9876,9877,9898,9900,9917,9929,9943,9968,9998,9999,10000,10001,10002,10003,10009,10012,10024,10082,10180,10215,10243,10566,10616,10621,10626,10628,10778,11110,11967,12000,12174,12265,12345,13456,13722,13782,14000,14238,14441,15000,15002,15003,15660,15742,16000,16012,16016,16018,16080,16113,16992,17877,17988,18040,18101,18988,19101,19283,19315,19350,19780,19801,19842,20000,20005,20031,20221,20828,21571,22939,23502,24444,24800,25734,26214,27000,27352,27355,27715,28201,30000,30718,30951,31038,31337,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,33354,33899,34571,34572,35500,38292,40193,40911,41511,42510,44176,44442,44501,45100,48080,49152,49153,49154,49155,49156,49157,49158,49159,49160,49163,49165,49167,49175,49400,49999,50000,50001,50002,50006,50300,50389,50500,50636,50800,51103,51493,52673,52822,52848,52869,54045,54328,55055,55555,55600,56737,57294,57797,58080,60020,60443,61532,61900,62078,63331,64623,64680,65000,65129,65389]
 if(string == "top50"):
 return top50
 elif(string == "top100"):
 return top100
 elif(string == "top1000"):
 return top1000
 else:
 print("--ports参数错误!程序退出!")
 exit()
 
def logo():
 logo = """
 _____  _____    ____  __  _  __  _  _____  _____  _____  _____  _____  _____ 
/ ___/ / ___|   / _ | | \ | | | \ | | | ____| | _ \ | _ \ / _ \ | _ \ |_  _| 
| |___ | |    / /_| | |  \| | |  \| | | |__  | |_| | | |_| | | | | | | |_| |  | |  
\___ \ | |    / ___ | | |\  | | |\  | | __| | _ / | ___/ | | | | | _ /  | |  
 ___| | | |___  / /  | | | | \ | | | \ | | |___ | | \ \ | |   | |_| | | | \ \  | |  
/_____/ \_____| /_/  |_| |_| \_| |_| \_| |_____| |_| \_\ |_|   \_____/ |_| \_\  |_|  
 
 
 使用说明:
 默认扫描ip: 127.0.0.1
 默认扫描端口列表: 1-65535
 默认扫描线程数: 100
 --help: 查看帮助
 
 """
 print(logo)
 
def help():
 help = """
 --help:
 --ip 需扫描的IP地址
 --ports 需扫描的端口列表
 top50 常用端口前50
 top100 常用端口前100
 top1000 常用端口前1000
 
 --thread 扫描线程数
 
 格式: python scanport.py --ip 127.0.0.1 --port top50 --thread num
 """
 print(help)
 
if __name__ == "__main__":
 logo()
 args = sys.argv
 ip = "127.0.0.1"
 ports = list(range(1, 65535))
 string = "1-65535"
 thread_num = 100
 if("--help" in args):
 help()
 exit()
 if("--ip" in args):
 ip = args[args.index("--ip")+1]
 print("扫描的IP的地址为:",ip)
 if("--ports" in args):
 ports = GetPortList(args[args.index("--ports")+1])
 string = args[args.index("--ports")+1]
 print("扫描的端口列表为:",string)
 if("--thread" in args):
 thread_num = int(args[args.index("--thread")+1])
 print("扫描的线程数为:",thread_num)
 
 main(ip, ports, thread_num)

帮助页面:

python使用多线程+socket实现端口扫描

运行图:

python使用多线程+socket实现端口扫描

有点简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
python 字典套字典或列表的示例
Dec 16 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
python集合的新增元素方法整理
Dec 07 Python
PyCharm常用配置和常用插件(小结)
Feb 06 Python
教你怎么用python实现字符串转日期
May 24 Python
Python如何实现定时器功能
May 28 #Python
python实点云分割k-means(sklearn)详解
May 28 #Python
Python脚本实现监听服务器的思路代码详解
May 28 #Python
python中Ansible模块的Playbook的具体使用
May 28 #Python
python中如何进行连乘计算
May 28 #Python
python线程池如何使用
May 28 #Python
python中前缀运算符 *和 **的用法示例详解
May 28 #Python
You might like
JAVA/JSP学习系列之四
2006/10/09 PHP
php empty函数 使用说明
2009/08/10 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
js正则表达exec与match的区别说明
2014/01/29 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
jQuery实现聊天对话框
2020/02/08 jQuery
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
python数组复制拷贝的实现方法
2015/06/09 Python
python fabric实现远程部署
2017/01/05 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python创建学生成绩管理系统
2019/11/22 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
通过代码实例了解Python sys模块
2020/09/14 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
先进工作者获奖感言
2014/02/08 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
《观舞记》教学反思
2014/04/16 职场文书
跳蚤市场口号
2014/06/13 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
写给老师的感谢信
2015/01/20 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python