Lobsters | 📄 原文链接 | 2026-11-08 收录

不存在的 0 号端口:一次全 IPv4 扫描翻出了什么

来源:acid.vegas — 2026-11-06

📋 概述

acidvegas 把自己的 IRC 网络挂在 0 号端口上——一个「谁都不该用、所以谁都不看」的地方——然后用 masscan 扫遍整个 IPv4,看还有谁在那里。前提先讲清楚:0 不是被禁止,而是被预留。RFC 9293 只说端口字段是 16 位,没有禁止零;IANA 把 0/tcp 与 0/udp 列为 Reserved,意思是「先留着,将来可能用来扩展端口空间」。真正让 0 号端口「不存在」的是套接字 API:bind() 传 0 的意思是「随便给我一个」。Linux 内核还按奇偶把两件事分开——bind() 拿奇数端口、connect() 拿偶数端口,实测 2000 次 bind 全是奇数、300 次 connect 全是偶数。绕过办法只有一条 iptables REDIRECT:把 dport 0 改写到 6667,ircd 全程不知情。客户端反而更难:OpenBSD nc 与 telnet 直接拒绝,Chromium 报 ERR_UNSAFE_PORT;甚至内核把「目标端口为 0」当作「这个 socket 没连上」的内部标记,getpeername() 对一条正常的 0 号连接返回 ENOTCONN,Python 的 ssl 因此抛 BlockingIOError。扫描结果:117 万个地址回 SYN-ACK,但 8% 的 /24 装下了 78% 的 IP,整块 /16 全在应答——这是边缘防火墙代答;56,951 个真正回了数据,其中 94% 是 F5 BIG-IP 写在 RST 里的报错横幅;滤掉后剩下 2,905 个,755 是 SSH、215 是 MySQL、211 是 telnet、159 是 HTTP、105 是 FTP,绝大多数是路由器与嵌入式设备。最糟的不是登录页,而是 21 台 Avaya 电话系统,把公司通话记录连姓名带号码读给任何连上来的人,其中 19 台在英国。

🔑 核心要点

💡 金句

0 号端口更像一个套接字 API 的概念,而不是网络的概念;在线路上它就是个数。
← 返回 Lobsters 首页