[python]多线程socket端口探测(包含top50-1000)

2023-11-17

这个脚本是基于tcp的,以下链接是基于tcp、udp的自动切换的脚本,比这个脚本方便多了

实现UDP、TCP的多线程端口探测(包含TOP-50-1000)_sGanYu的博客-CSDN博客

# 多线程扫描工具
import optparse
import queue
import socket
import sys
import threading


# 定义端口扫描类
# 要想创建一个线程对象,只要继承类threading.Thread,然后在__ init__里边调用threading.Thread.__init__()方法
class PortScaner(threading.Thread):
    def __init__(self, ip, portqueue, timeout=3):
        threading.Thread.__init__(self)
        self.portqueue = portqueue
        self.ip = ip
        self.timeout = timeout

    def run(self):
        while True:
            # 判断当前端口是否为空,为空跳False跳出循环,否则从队列中取出端口,判断当超过指定时间的话退出等待
            if self.portqueue.empty():
                break
            port = self.portqueue.get(timeout=0.5)
            try:
                #                    Ipv4网络协议        提供面向连接的稳定数据传输,建立可靠的通讯,即TCP协议
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                # 超时调用,超过时间,就执行
                s.settimeout(self.timeout)
                result_code = s.connect_ex((self.ip, port))  # 该方法如果链接成功会返回0,失败会返回errno库中的errorcode中的key,当为0是代表端口开放
                print(result_code)
                if result_code == 0:
                    sys.stdout.write(f"{self.ip} [%d] open\n" % port)
            except Exception as e:
                print(e)
            finally:
                s.close()


# 根据用户输入的参数来指定目标ip,端口队列的生成以及子线程的生成,同时还支持单个端口的扫描和范围端口的扫描
def StartScan(targetip, port, threadNum):
    portlist = []  # 端口列表
    portnumb = port
    if port.count('-') == 1:
        for i in range(int(port.split('-')[0]), int(port.split('-')[1]) + 1):
            portlist.append(i)
    elif port.count('--top50') == 1:
        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]
        for i in top50: portlist.append(int(i))
    elif port.count('--top100') == 1:
        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]
        for i in top100:
            portlist.append(int(i))
    elif port.count('--top1000') == 1:
        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]
        for i in top1000:
            portlist.append(int(i))
    else:
        portlist.append(int(port))
    # 目标ip地址
    ip = targetip
    # 线程列表
    threads = []
    # 线程数量
    threadNumber = threadNum
    # 端口队列
    portQueue = queue.Queue()
    # 生成端口,加入端口队列
    for port in portlist:
        portQueue.put(port)
    for t in range(threadNumber):
        threads.append(PortScaner(ip, portQueue, timeout=3))
    # 启动线程
    for thread in threads:
        thread.start()
    # 阻塞线程
    for thread in threads:
        thread.join()


# 主函数
if __name__ == '__main__':
    parser = optparse.OptionParser('Example:python %prog -i 127.0.0.1 -p 80 \n python %prog -i 127.0.0.1 -p 1-100\n')
    parser.add_option('--ip', dest='targetIP', default='127.0.0.1', type='string', help='target IP')
    parser.add_option('--port', dest='port', default='80', type='string', help='scan port and support top50-1000')
    parser.add_option('--thread', dest='threadNum', default=100, type='int', help='scann thread number')
    (options, args) = parser.parse_args()

StartScan(options.targetIP, options.port, options.threadNum)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[python]多线程socket端口探测(包含top50-1000) 的相关文章

随机推荐

  • jmeter压测报错socket closed解决方法

    socket closed 问题原因 在JMeter下 发送http 请求时 一般都是默认选择了use keepAlive 这个是连接协议 JMeter坑就在这里 默认勾选了这个 如果不勾选的话 也不会保存 但其配置JMeter prope
  • 6个Python代码简化方法

    ython开发代码简化除了采用规范化的编程规则之外 代码编写的逻辑性和对内置规则的掌握也对其有一定的影响 以下是Python3支持的用法 合理的利用可以极大的简化代码的书写复杂度 列表推导式 对于一组列表 如果想让其所有元素翻倍 很多人都会
  • A notion of time

    1 simulation kernel用sc time数据类型来跟踪仿真时间 指定delay和timeouts sc time是用一个64bit的无符号整型数来表示 SC SEC seconds 10 0 秒 SC MS milliseco
  • 接口测试:postman发送POST请求

    Postman发送POST请求 postman发送POST请求 示例 微信公众平台创建用户标签接口 业务操作如下 1 打开微信公众平台 微信扫码登录 2 打开微信开放文档 找到用户管理 用户标签管理的接口信息 3 打开postman 新建一
  • 谷歌Chrome浏览器安装插件Hackerbar

    谷歌Chrome浏览器安装插件Hackerbar 因为google浏览器的应用市场 https chrome google com webstore category extensions 在国内无法访问 所以无法在线安装插件 这里提供开发
  • 刷脸和无感支付是社会科学发展的产物和动力

    手机支付不应该多过 而且有自动与支付余额联机 刷手机才是赚钱的出路 对比来看 手机支付操作简单但基础好 有相当多用户加入的话 就没有任何风险了 自动与支付余额联机有效 而对于支付余额联机更有效 但比安全性较低 不利于用户操作 而对于与银行合
  • python打包whl文件

    应用场景 在python的使用过程中 当遇到通过pip无法安装包 可以通过去Python安装包大全中 whl包下载 下载 whl 包来安装解决问题 也可以在别处打包成 whl 文件 拷贝过来运行 介绍 whl 文件是以 wheel 格式保存
  • PySerial:Python串口通信库的详细介绍、安装及使用方法攻略

    PySerial Python串口通信库的详细介绍 安装及使用方法攻略 一 PySerial 简介 PySerial 是 Python 的一个串口通信库 支持不同平台下的串口操作 在 Python 应用中 使用 PySerial 可以非常方
  • 《Programming in Lua 3》读书笔记(七)

    Compilation Executioin and Errors Lua的assert函数 assert v mess 相当于C的断言 当v为nil或者false将触发错误 mess为发生错误时返回的信息 dofile函数不仅会加载chu
  • 蓝桥杯中的阶乘(求1000的阶乘)

    首先这个题 它是求1000的阶乘 他最后的值太大了 以至于不能用int long long int 来求 那要怎求呢 那肯定是用最简单的数组来求鸭 用数组来代表它的每一个位 include
  • 如何判断链表有环

    如何判断单链表是否存在环 有一个单向链表 链表当中有可能出现 环 就像题图这样 如何用程序判断出这个链表是有环链表 不允许修改链表结构 时间复杂度O n 空间复杂度O 1 方法一 穷举遍历 方法一 首先从头节点开始 依次遍历单链表的每一个节
  • 网关模式/网桥模式/旁路模式的区别

    网关模式 网桥模式 旁路模式的区别如下 EG设备有三种工作模式 网关模式 网桥模式和旁路模式 比较常用的是网关模式和桥模 式 1 网关模式是把设备当作网络出口 支持NAT和路由选路下报文转发的部署方式 2 桥模式是把设备作为桥接 串接在内网
  • 【SqlServer】如何把本地SqlServer数据库部署到远程服务器上

    这里笔者使用的使用SqlServer2012 本机和远程环境均为Win7 1 选中需要部署的数据库 右击 任务 分离 选中删除连接 2 现在在左侧的表中就看不见刚才那个数据了 3 在本地找到分离出来的数据库的位置 该位置就是读者建立数据库的
  • 厌烦了Ctrl+CV ?试试用node自动生成重复代码文件

    前言 相信在我们日常遇到的项目中 无论是在前端网站还是后台管理系统中都会有功能类似的页面 我们在开发这些功能类似的页面的时候 为了提高效率 一般都会运用我们的CV大法 但是当我们CV久了之后 会不会觉得这样的开发方式有些许枯燥 我们能不能通
  • 孙子算经 之 物不知数(韩信点兵)

    孙子算经 作者不可考 成书于四 五世纪南北朝时期 传本分三卷 它是算经十书之一 中国古代最重要的数学著作之一 其下卷26题 物不知数 为其最重要的成就之一 今有物 不知其数 三三数之 剩二 五五数之 剩三 七七数之 剩二 问 物几 何 答曰
  • 解决下载文件时报:Could not find acceptable representation

    今天在写一个文件打包下载的接口的时候一直报错误 文件是可以下载的但是后台打印的日志信息出现 Could not find acceptable representation错误 我之前百度给我的结果是由于我的返回值是json字符串 而由于
  • STM32F1各个工作状态下的工作电流

    低功耗操作实验 文章非原创 从其他网站上摘录 如果侵犯到到 麻烦联系删除 实验目的 测量 STM32 在各种状态下的功耗 包括在不同时钟频率下 32M 8M 1M 100K 10K 不同振荡器 内部 外部 不同模式 活动 睡眠 停机 待机
  • 经纬度查询_查询经纬度并自动转换格式(升级版)附带下载

    链接 https pan baidu com s 1Ysjwdu9griOXzw50RvfF1A 提取码 iwvv 链接 https share weiyun com 8ECyYM8g 密码 bwqmk8 1 史上最齐全的CAD下载资源 2
  • 二进制方式部署kubernetes集群

    二进制方式部署kubernetes集群 1 部署k8s常见的几种方式 1 1 kubeadm Kubeadm 是一个 k8s 部署工具 提供 kubeadm init 和 kubeadm join 用于快速部署 Kubernetes 集群
  • [python]多线程socket端口探测(包含top50-1000)

    这个脚本是基于tcp的 以下链接是基于tcp udp的自动切换的脚本 比这个脚本方便多了 实现UDP TCP的多线程端口探测 包含TOP 50 1000 sGanYu的博客 CSDN博客 多线程扫描工具 import optparse im