电脑知识铺
第二套高阶模板 · 更大气的阅读体验

用Python实现网络测试自动化,轻松搞定端口映射验证

发布时间:2025-12-11 09:37:52 阅读:151 次

为什么需要自动测端口映射

家里装了宽带,路由器上设了端口映射,想让外网访问家里的NAS或者摄像头。可每次改完设置,都得掏出手机连4G,再打开浏览器输IP加端口号试试通不通。有时候半天打不开,是配置错了?还是设备没开机?还是运营商封了端口?来回折腾,费时间还容易烦躁。

其实这种重复性操作完全可以让程序来干。写个简单的Python脚本,定时检测外部能否访问指定端口,结果直接发到微信或者邮箱,省心多了。

用Python检测端口连通性

Python有个很轻量的模块叫socket,专门处理网络通信。我们可以用它模拟一次TCP连接,就像浏览器访问网站那样,看目标端口是否响应。

import socket
 
def check_port(host, port, timeout=5):
  try:
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  sock.settimeout(timeout)
  result = sock.connect_ex((host, port))
  sock.close()
  if result == 0:
  return True
  else:
  return False
  except Exception as e:
  print(f"检查出错: {e}")
  return False
 
# 示例:检测公网IP的8080端口
if check_port('123.123.123.123', 8080):
  print("端口开放,映射正常")
else:
  print("端口不通,检查路由器设置")

把上面代码里的IP和端口换成你自己的,运行一下就能知道外网能不能连上。可以把它打包成一个定时任务,比如每5分钟跑一次,发现不通就发个提醒。

结合实际场景做自动

比如你在公司想远程连家里的Windows电脑,做了3389端口映射。但小区宽带不稳定,偶尔断线重拨后公网IP变了,原来的映射就失效了。这时候可以在家里放一台树莓派或旧电脑,跑一个Python脚本定期检测3389端口,并抓取当前公网IP。

一旦发现IP变了或者端口不通,就自动发邮件或通过企业微信机器人通知你。甚至还能调用路由器的API自动重新配置端口映射规则,全程不用动手。

扩展功能:批量测试多个映射

如果你同时开了好几个服务——NAS用5000端口,监控系统用8000,Web服务器用80,完全可以写个列表批量检测。

servers = [
  ('123.123.123.123', 5000, 'NAS'),
  ('123.123.123.123', 8000, '监控'),
  ('123.123.123.123', 80, '网站')
]

for ip, port, name in servers:
  if check_port(ip, port):
  print(f"{name}({port}) - 正常")
  else:
  print(f"{name}({port}) - 异常!")

输出一目了然,哪个服务挂了马上就知道。还可以把结果写进日志文件,方便以后排查问题。

别忘了防火墙和内网设备

脚本报端口不通,不一定就是路由器映射没配好。也可能是内网那台机器的Windows防火墙拦了连接,或者是服务根本没启动。所以建议在脚本里先ping一下内网设备确认在线,再从局域网内测试一遍对应端口,排除本地问题。

自动化不是一步到位的事,但从第一个check_port开始,你就已经走在摆脱手动测试的路上了。