nmap 在几分之一秒内显示本地主机上的随机开放端口

nmap shows random open ports on localhost for a fraction of a second

当我扫描自己时,我经常会看到随机打开的端口:

nmap -sT -T normal -p 1-65535 localhost

例如

43194/tcp open  unknown
58167/tcp open  unknown

有时什么也没有,有时就是这样。

不过我看到这以前是误报,但现在已经很旧了:

http://seclists.org/incidents/2002/Dec/136

最近还有一些其他用户也报告了此问题:

https://bbs.archlinux.org/viewtopic.php?id=168197

但似乎没有多少人注意到它。我也觉得很奇怪,这仍然是内核的 "bug"/问题。这个问题真的这么久了吗?

其他人能否确认这是正常行为(必须多次执行测试才能得出结论,如果这确实是 kernel/nmap 问题,可能因系统而异)?我现在已经在几台物理机上测试过了,结果都是一样的。包括一台最近安装了 OS 并且从未 运行 面向网络的服务的机器,因此妥协似乎不太可能。

我的ip_local_port_range是32768 61000

内核测试:3.16.3-smp、3.17.8-gentoo-r1

Nmap 版本:6.4、6.47

如果我从同一台物理机器扫描我的 IP,也会发生这种情况。如果我从另一台机器扫描机器,即使使用 -T insane,我也看不到这些端口打开。

是的,这是 Linux 的一个已知问题:在关闭的 ephemeral port has a small chance (usually about 1 in 28000) of connecting to itself with a 4-way or "split" handshake 上连接到本地主机。 Nmap 受此错误的影响最大,因为它一次连接到如此多的不同端口,几乎可以肯定在本地主机 -sT (TCP 连接) 扫描中至少发生一次。

Nmap 的这个错误由​​来已久。 1999 年,Fyodor reported it to the LKML, but it was deemed to be an edge case in the RFC, and not a bug in the Linux kernel. A workaround was put in place in 2000, but it was removed in February 2013 作为清理工作的一部分,因为它有竞争条件。下一个版本是 Nmap 6.40,你说它显示了无效的结果。

去年夏天,我introduced a change检查并重新测试了这些虚假结果。 Nmap的下一个版本不会有同样的问题。


编辑:该错误影响版本 6.40 - 6.47。它已在 6.49BETA1 (2015-06-03) 中修复。