为何Python sockets模块显示端口关闭,但Nmap显示其为开放状态?
端口扫描代码问题排查:开放端口显示关闭+语法错误
一、先解决语法错误(核心前提)
语法错误会直接导致代码逻辑异常,哪怕视觉上和视频一致,也可能存在细节疏漏:
- 检查标点符号:确认所有引号、括号、分号都是英文半角,避免中文标点混入(比如把
"打成“”)。 - 核对变量/函数拼写:比如Python中
socket.connect()是否写成Socket.Connect(),或者变量名target写成targt这类低级拼写错误。 - 检查缩进(针对Python等缩进敏感语言):视频中的缩进层级要完全匹配,多一个空格或Tab都会触发语法错误。
- 重视报错信息:运行时的
SyntaxError会明确指出错误行号,直接定位该行对比视频代码细节。
二、端口显示关闭的排查方向
语法错误解决后,再处理端口状态不符的问题:
- 确认目标IP正确性:代码中的目标地址必须和Nmap扫描的主机一致,比如视频扫的是
192.168.1.100,你是不是误写成192.168.1.10? - 检查防火墙拦截:Nmap的SYN半开扫描可能绕过部分防火墙,而你的代码如果用全连接扫描,可能被本地或目标主机的防火墙拦截。可以临时关闭本地防火墙测试,或在目标主机上检查445端口的入站规则。
- 核对扫描逻辑:
- 超时时间:视频中设置的超时(比如2秒)是否被你改成过短的数值(比如0.2秒),导致未收到响应就判定端口关闭。
- 协议类型:确认代码是扫描TCP端口(445是TCP端口),而非UDP。
- 连接逻辑:比如代码中是否错误地使用了
send()而非connect(),或者连接后的判断条件写反(比如把0当成关闭,实际应该是0表示连接成功)。
- 重新确认端口状态:用Nmap再扫一次目标主机的445端口,确认端口是否仍处于开放状态(可能你扫描后端口被关闭)。
三、执行命令的细节检查
- 确认脚本文件名:
./[NAME]中的[NAME]要替换成你的实际脚本名,比如./port_scan.py,同时确保脚本有可执行权限(执行chmod +x port_scan.py添加权限)。 - 编译型语言需重新编译:如果是C/C++编写的程序,修改代码后必须重新编译(比如
gcc port_scan.c -o port_scan),否则执行的还是旧版本程序,端口未更新。
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

