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的Django框架下使用django-tagging的教程
May 30 Python
python中的字典使用分享
Jul 31 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
基于Python pip用国内镜像下载的方法
Jun 12 Python
使用Python对微信好友进行数据分析
Jun 27 Python
python中强大的format函数实例详解
Dec 05 Python
在pycharm中设置显示行数的方法
Jan 16 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 Python
python中selenium库的基本使用详解
Jul 31 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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
PHP 写文本日志实现代码
2010/05/18 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
WebPack基础知识详解
2017/01/16 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python中装饰器的一个妙用
2015/02/08 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
浅析python的优势和不足之处
2018/11/20 Python
Python流程控制 while循环实现解析
2019/09/02 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
禁毒宣传工作方案
2014/05/23 职场文书
世界遗产的导游词
2015/02/13 职场文书
安全生产奖惩制度
2015/08/06 职场文书
社区服务活动感想
2015/08/11 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js