首页
python
Win桌面应用自动化pywinauto
pywinauto遍历展示程序的所有菜单项
Python3使用串口
Python字符串处理
Python3实现配置文件差异对比(键值对key=value的形式)
正则
正则匹配两个字符之间的字符串
正则提取markdown中图片链接
正则表达式基本知识
字符串-正则实例
Python生成8位随机字符串的一些方法
python3批量ping检测
python3检测一批主机ip的tcp端口
Python3--DNS
3D人体骨架检测(mediapipe)
Python-网络
检测到win电脑断网就发出告警声音
Python编写的DNS服务可靠性测试程序
Python编写的TCP/UDP端口探测程序
Python抓包-Pyshark
并发扫描TCP、UDP端口
Python-DHCP
端口的问题以及绑定端口(Python)
VSCode编辑器
python远程开机工具
Pyhton3--Win注册表
开源IT运维项目
python知识点
Python开源运维项目集合
python3备份交换机配置
Python3使用snmp获取H3C交换机arp表
Python检测tcp端口状态并发送到企微群
Python3使用smtp发邮件
Python3使用smtp发邮件(带附件)
Python3拉取微软AD域所有用户信息
Python3使用微软AD域账号认证
自动更新公网域名的解析(阿里云)
每日定时推送Excel中排班表信息到企微群
Django
Django模板标签
Django在发送POST请求时返回403错误
Django-mysql数据库条件查询
uwsgi 配置 python virtualenv 虚拟环境目录 ( ini 配置)
常用收藏
python3数据类型转换
python处理文本
txt每行一个字符串_用英文逗号连接
txt_匹配并拆分出需要字符串
python获取日期时间
python执行linux命令的三种方式
python使用ssh连接到linux服务器执行命令
本文档由 内网文摘 发布,转载请注明出处
-
+
首页
并发扫描TCP、UDP端口
## 扫描主机tcp端口 ``` # 扫描主机tcp端口 import socket import concurrent.futures # 目标主机 # host = '192.168.1.1' host = '172.16.1.100' # 端口范围 port_start = 1 port_end = 65535 # 用于保存开放端口的列表 open_ports = [] def scan_port(port): try: # 创建一个socket对象 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置超时时间,防止等待太久 sock.settimeout(1) # 尝试连接目标端口 result = sock.connect_ex((host, port)) sock.close() # 如果连接成功,说明端口是开放的 if result == 0: open_ports.append(port) print(f'Port {port} is open\n') except socket.error as e: pass # 忽略错误,继续扫描下一个端口 def main(): # 使用ThreadPoolExecutor实现并发 with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor: # 将端口扫描任务分配给线程池 futures = [executor.submit(scan_port, port) for port in range(port_start, port_end + 1)] # 等待所有任务完成 concurrent.futures.wait(futures) # 将开放的端口写入文件 with open('D:/acl/port_scan_results.txt', 'w') as file: for port in sorted(open_ports): file.write(f'Port {port} is open\n') if __name__ == '__main__': main() ``` ## 扫描主机udp端口 ``` # 扫描主机udp端口 import socket import concurrent.futures # 请注意,这个脚本可能不会检测到所有开放的UDP端口,因为有些服务可能不会响应空的数据包。 # 此外,由于UDP是无连接的,即使没有服务监听某个端口,发送到该端口的数据包也可能因为网络设备(如路由器)的响应而被错误地认为是开放的。 # 目标主机 host = '192.168.1.1' # 端口范围 port_start = 1 port_end = 65535 # 用于保存开放端口的列表 open_ports = [] def scan_udp_port(port): try: # 创建一个UDP socket对象 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置超时时间 sock.settimeout(1) # 向目标端口发送一个空的数据包 sock.sendto(b'', (host, port)) # 尝试接收响应 sock.recvfrom(1024) # 如果收到响应,说明端口是开放的 print(f'UDP Port {port} is open\n') open_ports.append(port) except socket.error: pass # 忽略错误,继续扫描下一个端口 finally: # 关闭socket sock.close() def main(): # 使用ThreadPoolExecutor实现并发 with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor: # 将端口扫描任务分配给线程池 futures = [executor.submit(scan_udp_port, port) for port in range(port_start, port_end + 1)] # 等待所有任务完成 concurrent.futures.wait(futures) # 将开放的端口写入文件 with open('udp_port_scan_results.txt', 'w') as file: for port in sorted(open_ports): file.write(f'UDP Port {port} is open\n') if __name__ == '__main__': main() ``` ## 优化 ``` # 让结果实时保存到udp_port_scan_results.txt文件中,频繁地打开和关闭文件可能会影响性能。 # 在这个脚本中,我们对每个端口都进行了扫描,无论端口是开放的还是关闭的,都会将结果写入文件。如果端口开放,我们会写入Port is open,如果端口关闭,我们会写入Port is closed。 # 请注意,这个脚本会覆盖udp_port_scan_results.txt文件中的现有内容,因为它是以'w'模式打开文件的。如果你想要追加到现有文件,可以改用'a'模式。 # 此外,由于UDP是无连接的,即使没有服务监听某个端口,发送到该端口的数据包也可能因为网络设备(如路由器)的响应而被错误地认为是开放的。因此,这个脚本的结果可能不是100%准确。 import socket import concurrent.futures # 目标主机 host = '192.168.1.1' # 端口范围 port_start = 1 port_end = 65535 def scan_udp_port(port, file): try: # 创建一个UDP socket对象 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置超时时间 sock.settimeout(1) # 向目标端口发送一个空的数据包 sock.sendto(b'', (host, port)) # 尝试接收响应 data, _ = sock.recvfrom(1024) # 如果收到响应,说明端口是开放的 if data: status = 'is open' else: status = 'is closed' file.write(f'UDP Port {port} {status}\n') file.flush() # 确保数据被写入文件 except socket.error as e: status = 'is closed' file.write(f'UDP Port {port} {status}\n') file.flush() # 确保数据被写入文件 finally: # 关闭socket sock.close() def main(): # 打开文件用于追加 with open('udp_port_scan_results.txt', 'w') as file: # 使用ThreadPoolExecutor实现并发 with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor: # 将端口扫描任务分配给线程池 futures = [executor.submit(scan_udp_port, port, file) for port in range(port_start, port_end + 1)] # 等待所有任务完成 concurrent.futures.wait(futures) if __name__ == '__main__': main() ```
local
2024年10月24日 21:09
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 LocalNetwork
LocalNetwork
是由mrdoc开源
LocalNetwork.cn
修改的在线文档系统,作为个人和小型团队的云笔记、文档和知识库管理工具。
如果此文档给你或你的团队带来了帮助,欢迎支持作者持续投入精力更新和维护!内网文摘 & LocalNetwork
>>>主页
logo
logo
下载Markdown文件
分享
链接
类型
密码
更新密码