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 相关文章推荐
python自动化测试实例解析
Sep 28 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
基于Python获取城市近7天天气预报
Nov 26 Python
python如何通过twisted搭建socket服务
Feb 03 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
python上下文管理的使用场景实例讲解
Mar 03 Python
pandas中DataFrame重置索引的几种方法
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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
2014年幼儿园植树节活动方案
2014/03/02 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
安全教育片观后感
2015/06/17 职场文书
重阳节简报
2015/07/20 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
详解Python为什么不用设计模式
2021/06/24 Python
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python