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中return语句用法实例分析
Aug 04 Python
浅析Python中的for 循环
Jun 09 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
微信跳一跳游戏python脚本
Apr 01 Python
《与孩子一起学编程》python自测题
May 27 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
python的pip有什么用
Jun 17 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 Python
python神经网络 使用Keras构建RNN训练
May 04 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
PHP5 字符串处理函数大全
2010/03/23 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
日期 时间js控件
2009/05/07 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
JQuery live函数
2010/12/24 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
在Django中创建动态视图的教程
2015/07/15 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Python中的socket网络模块介绍
2022/07/23 Python