邻居发现C.

时间:2011-07-19 07:22:58

标签: c linux networking nearest-neighbor

我需要发现Linux中的所有网络邻居(他们也在运行Linux),我需要获取他们的IP地址(第3层)。任何想法如何做到这一点?

顺便说一下,我需要在C而不是shell

中执行此操作

非常感谢提前!

3 个答案:

答案 0 :(得分:2)

你应该做的是,让邻居运行一个守护进程,它对UDP多播做出响应(对发送者的单播响应)。

然后发送TTL为1的UDP多播(因此不会路由)并听取谁回应。您只会收到正在运行代理的邻居的响应。

另一种可能性是使用现有的协议,例如mDNS。

答案 1 :(得分:1)

如果相关机器没有合作,则无法保证这样做。

您可以做的最好的事情是扫描可能的地址并探测每个地址以查看是否可以获得响应 - 该探测可以是从简单的ICMP回应请求(ping)到复杂的畸形数据包的任何尝试引起远程主机的响应。

所需的复杂程度,以及它是否会起作用,完全取决于所讨论的主机的防火墙等等。

正如评论者已经观察到的那样,有nmap这样的整个程序致力于尝试发现这些信息,这可以让人知道这可能是多么重要。

另一方面,如果主机是合作的,那么简单的广播ICMP回应请求就足够了。

答案 2 :(得分:0)

如果您的网段使用合理的交换机,您可以通过检查其中一个交换机的转发数据库来发现链路层邻居。您应该能够通过SNMP相当自动地获取此信息,请查看交换机的文档。

一旦你有一个链接邻居列表,你可以尝试找出他们的IP地址,但要记住他们可能有很多或根本没有。为此你需要某种反向ARP。也许你的路由器维护着一个MAC-to-IP关联列表,你可以查询它(同样SNMP也是最方便的解决方案)。