我正在为Android构建端口扫描程序,并尝试使用不同的方法进行主机发现。我尝试了多线程ICMP回应请求并发现它不准确,因为大量新的操作系统默认阻止ICMP回应请求。我继续实施mDNS解决方案,发现它更准确但速度更慢。
我现在解决的是在解析数据并查找具有非零化MAC地址的IP地址后填写ARP表(/ proc / net / arp)。我通过多线程调用isReachable()来填充ARP表。我发现我能够在对isReachable的调用中超时1ms,因为我只使用它来填充ARP表而不是实际连接到主机。这使我的主机发现只需要几秒钟。
在这个过程中,准确性和速度对我来说同样重要,所以我的问题是解决方案的稳定性如何?是否所有Android设备都将ARP表放在同一位置?有什么需要注意的注意事项吗?