Nikto扫描时为什么忽略我指定的8080端口?

a'ゞ春红 阅读 9

我用Nikto扫描本地Apache服务器时,明明加了-port 80,8080参数,但结果只显示扫描了80端口。手动curl 8080能访问,防火墙也没问题,这是什么原因?

命令是这样写的:


nikto -h http://localhost -port 80,8080 -C all

扫描日志里直接跳过了8080,提示”Skipping port 8080 as it’s closed”,但用netstat确认8080确实在监听。试过加-maxtime-timeout参数都没用,这是配置哪里出错了?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
端木淇钧
你这个是Nikto的协议识别问题,性能上它默认用的是HTTP协议探测,而你传的是 -port 80,8080 但没指定协议,它会尝试通过标准方式判断端口是否“开放”——这里的“closed”不是指端口没监听,而是Nikto发了个HTTP请求过去没收到它认为有效的响应,就直接跳过了。

根本原因是:Nikto对非标准端口(比如8080)做探测时,默认不会自动加Host头,有些Apache配置只绑定特定Host才会响应,你curl能通是因为curl默认带了Host: localhost,而Nikto没带,服务器可能返回400或者空响应,Nikto就判定为“closed”。

解决办法很简单,强制指定目标URL带上端口:

nikto -h http://localhost:8080 -port 8080 -C all


或者分开扫两次,别用逗号拼端口。用逗号的方式在某些版本里会有解析bug,尤其是混用标准和非标准端口时。

另外,-port 参数其实是“额外检测这些端口”,但它依然依赖服务响应符合HTTP规范。最稳的做法是指定完整URL,让Nikto明确知道要扫哪个host:port组合。

顺带一提,这种扫描工具在设计上为了性能,会快速失败,一旦初始请求异常就跳过,不会像curl那样重试或宽松处理,所以看着端口开着也得按它的规则来。
点赞 5
2026-02-10 21:05