扫描全国的公网IP需要多久?
作者基于个人兴趣,在一台旧款4核迷你主机的家庭网络环境下,测试了扫描中国大陆所有公网IP地址的耗时。最终扫描约3.43亿个地址,发现其中约592万个IP可达,总耗时约1小时2分58秒。该测试旨在探索使用单台设备探测全国范围内运营商与云服务商网络连通性、识别故障或劫持情况的技术可行性。 文章核心是介绍了一款由作者重构的网络扫描程序的实现。新版本摒弃了之前依赖libpcap库的gopacket方案,完全基于Go标准库中的icmp与ipv4扩展包构建,无需启用CGO,便于部署与编译。程序架构采用并发模型,主要由三个goroutine协作:一个负责解析APNIC提供的IP网段列表并分发任务;一个负责批量构造并发送ICMP回显请求报文;一个负责监听并接收ICMP回显应答,最终将存活IP输出。代码通过设置BPF过滤器优化性能,并使用进程ID作为ICMP报文标识以准确匹配响应。整个扫描引擎仅约200行代码,展示了使用Go语言进行高效网络编程的典型范例。