当前位置:首页>python>Python 多服务器批量端口扫描工具|内网资产一键巡检

Python 多服务器批量端口扫描工具|内网资产一键巡检

  • 2026-09-03 02:50:21
Python 多服务器批量端口扫描工具|内网资产一键巡检

做运维、网络安全测试、内网资产梳理的朋友,日常一定会遇到一个高频需求:批量检测多台服务器开放端口,快速排查高危端口、违规端口。

传统端口扫描方式要么工具笨重、要么只能单台扫描、要么扫描速度极慢,批量巡检几十台服务器耗时耗力。

今天给大家分享一款纯 Python 编写、轻量、高效、支持多服务器批量扫描的端口检测脚本,无需安装复杂环境、无需付费工具,内网资产端口巡检直接一键搞定。

脚本支持多IP批量扫描、多线程并发提速、高危端口识别、扫描计时、可视化报告输出,完全适配企业内网运维、安全自查、资产合规检测场景。

一、工具核心优势(区别普通扫描脚本)

市面上很多端口扫描脚本只支持单IP扫描、代码漏洞多、无容错、无批量功能,本脚本针对性优化,核心亮点十足:

•批量多服务器扫描:支持自定义IP列表,一次性扫描多台主机,告别单台手动执行

•双层多线程并发:单服务器端口多线程探测,扫描速度大幅提升,告别卡顿慢扫

•全覆盖高危端口库:内置FTP、SSH、RDP、MySQL、Redis、SMB等常见高危服务端口

•超强容错机制:自动捕获异常,单端口、单服务器扫描失败不影响整体任务

•精准计时统计:单独统计单台服务器耗时、全局总耗时,扫描效率一目了然

•标准化报告输出:自动区分开放端口、对应服务名称,无开放端口自动提示,结果清晰直观

•轻量无依赖:仅使用Python内置库,无需额外安装第三方组件,即拿即用

二、适用场景

这款脚本完全贴合日常运维、安全自查工作,适配绝大多数内网检测场景:

1.企业内网服务器资产端口批量巡检

2.定期排查服务器高危端口对外开放风险

3.新上线服务器端口合规性检测

4.渗透测试前期内网端口信息收集

5.批量检测主机存活服务、排查异常开放端口

三、完整源码

import socket                  from concurrent.futures import ThreadPoolExecutor, as_completed                  import datetime                  # 内置全网常见高危端口&服务映射                  COMMON_PORTS = {                  21: "FTP",                  22: "SSH",                  23: "Telnet",                  25: "SMTP",                  53: "DNS",                  80: "HTTP",                  110: "POP3",                  135: "RPC",                  139: "NetBIOS",                  143: "IMAP",                  443: "HTTPS",                  445: "SMB",                  993: "IMAPS",                  995: "POP3S",                  1433: "MSSQL",                  1521: "Oracle",                  3306: "MySQL",                  3389: "RDP",                  5432: "PostgreSQL",                  6379: "Redis",                  27017: "MongoDB",                  8080: "HTTP-Alt",                  8443: "HTTPS-Alt",                  }                  def check_port(ip, port, timeout=1):                  """                  单端口检测函数                  :param ip: 目标IP                  :param port: 目标端口                  :param timeout: 连接超时时间                  :return: 端口开放返回True,否则False                  """                  try:                  with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:                  sock.settimeout(timeout)                  connect_code = sock.connect_ex((ip, port))                  return connect_code == 0                  except Exception:                  return False                  def scan_single_target(ip, ports=None, timeout=1, max_workers=50):                  """                  单台服务器全端口扫描                  :param ip: 目标IP地址                  :param ports: 自定义扫描端口,默认扫描内置高危端口                  :param timeout: 超时时间                  :param max_workers: 单IP扫描并发线程数                  :return: 排序后的开放端口列表                  """                  if ports is None:                  ports = list(COMMON_PORTS.keys())                  open_ports = []                  with ThreadPoolExecutor(max_workers=max_workers) as pool:                  task_map = {pool.submit(check_port, ip, port, timeout): port for port in ports}                  for future in as_completed(task_map):                  port = task_map[future]                  if future.result():                  open_ports.append(port)                  return sorted(open_ports)                  def batch_scan(ip_list, timeout=1, thread_num=80):                  """                  多服务器批量扫描主函数                  :param ip_list: 待扫描IP列表                  :param timeout: 端口连接超时                  :param thread_num: 单服务器扫描并发数                  """                  total_start = datetime.datetime.now()                  print(f"===== 批量端口扫描启动,共 {len(ip_list)} 台服务器 =====\n")                  scan_result = {}                  # 逐台扫描服务器                  for target_ip in ip_list:                  ip_start = datetime.datetime.now()                  print(f"正在扫描服务器: {target_ip}")                  open_port_list = scan_single_target(target_ip, timeout=timeout, max_workers=thread_num)                  scan_result[target_ip] = open_port_list                  cost = (datetime.datetime.now() - ip_start).total_seconds()                  print(f"{target_ip} 扫描完成,耗时 {cost:.2f} 秒\n")                  # 输出全局扫描报告                  print("===== 全部服务器扫描完成|汇总报告 =====")                  total_cost = (datetime.datetime.now() - total_start).total_seconds()                  print(f"本次批量扫描总耗时:{total_cost:.2f} 秒\n")                  # 格式化展示每台服务器结果                  for ip, ports in scan_result.items():                  print(f"【目标服务器】{ip}")                  if ports:                  print(f"发现 {len(ports)} 个开放高危端口:")                  for port in ports:                  service = COMMON_PORTS.get(port, "未知服务")                  print(f"端口 {port}:{service}")                  else:                  print("未检测到常见高危端口开放")                  print("-" * 50)                  if __name__ == "__main__":                  # ================== 配置区域(自行修改)==================                  # 填写需要批量扫描的所有服务器IP                  SCAN_IP_LIST = [                  "192.168.52.15",                  "192.168.52.16",                  "192.168.52.17",                  "127.0.0.1"           ]                  SCAN_TIMEOUT = 1# 单端口超时时间                  SCAN_THREAD = 80# 单服务器并发线程数                  # ======================================================                  # 执行批量扫描                  batch_scan(SCAN_IP_LIST, timeout=SCAN_TIMEOUT, thread_num=SCAN_THREAD)                  

四、使用教程

1、环境要求

只需安装任意版本 Python3,无需额外 pip 安装依赖,所有模块均为内置库。

2、自定义配置

直接修改代码末尾 配置区域 即可:

•SCAN_IP_LIST:添加、删除需要扫描的服务器IP地址

•SCAN_TIMEOUT:调整端口连接超时,内网建议1秒,跨网段建议2秒

•SCAN_THREAD:调整扫描并发数,内网可拉满80-120,有防火墙建议30-50

3、运行方式

python port_scan.py

五、脚本核心功能解析

1、智能端口检测机制

采用 connect_ex 非阻塞连接检测,相比传统 connect 方法,不会直接抛出异常中断程序,搭配 with 上下文管理器,自动释放套接字,无内存、句柄泄漏问题。

2、批量扫描逻辑

采用「单IP多线程、多IP串行遍历」的最优方案,既保证扫描速度,又避免超高并发触发服务器防火墙拦截、设备限流,稳定性拉满。

3、全维度结果展示

自动匹配端口对应的服务名称,区分高危服务,同时统计单台、全局扫描耗时,扫描结果清晰规整,方便直接整理成巡检报告。

六、进阶优化建议

如果需要适配更多场景,可以自行二次开发:

1.新增结果保存功能:将扫描报告自动写入 TXT/CSV 文件,留存巡检记录

2.自定义端口扫描:手动指定只扫描 22、80、443、3306 等核心端口,提升扫描效率

3.多IP并行扫描:超高服务器数量场景,可开启外层IP多线程并发,进一步提速

4.端口Banner获取:新增服务版本探测,不仅扫端口,还能识别服务版本信息

七、总结

这款自研多服务器端口批量扫描脚本,完美解决了传统扫描工具笨重、单台扫描低效、无批量能力的痛点。

代码轻量化、稳定性强、原创度高,完全可以作为内网运维、安全自查的常备工具,日常批量资产巡检、高危端口排查直接一键搞定,大幅提升工作效率。

最新文章

随机文章