Java Android上快速准确的局域网主机发现

Java Android上快速准确的局域网主机发现,java,android,multithreading,networking,arp,Java,Android,Multithreading,Networking,Arp,我正在为Android构建一个端口扫描程序,并尝试不同的主机发现方法。我尝试了多线程ICMP回显请求,发现它不准确,因为大量较新的操作系统默认会阻止ICMP回显请求。我接着实现了mDNS解决方案,发现它更准确,但速度要慢得多 我现在决定的是在ARP表(/proc/net/ARP)被解析数据并查找具有非零MAC地址的IP地址填充之后读取它。我通过多线程处理一系列对的调用来填充ARP表。我发现我可以在调用isReachable时超时1ms,因为我只是用它填充ARP表,而不是实际连接到主机。这使得我的

我正在为Android构建一个端口扫描程序,并尝试不同的主机发现方法。我尝试了多线程ICMP回显请求,发现它不准确,因为大量较新的操作系统默认会阻止ICMP回显请求。我接着实现了mDNS解决方案,发现它更准确,但速度要慢得多

我现在决定的是在ARP表(/proc/net/ARP)被解析数据并查找具有非零MAC地址的IP地址填充之后读取它。我通过多线程处理一系列对的调用来填充ARP表。我发现我可以在调用isReachable时超时1ms,因为我只是用它填充ARP表,而不是实际连接到主机。这使得我的主机发现只需几秒钟


在这个过程中,准确性和速度对我来说同样重要,所以我的问题是,这个解决方案的稳定性如何?是否所有Android设备的ARP表都位于同一位置?有什么需要注意的事项吗?

请执行“你好/约会”。也许你可以使用它。实际上我专门试用了JmDNS,发现它比这个方法慢得多。除非我想获得更多的准确度,否则我宁愿不要使用耗时超过1秒或2秒的东西。正确实施的“你好”事件应该会立即出现。我必须重新审视它,看看我是否做错了什么。。。