2010-10-26 37 views
5

如何獲取LAN中的所有IP地址和相關主機名?LAN網絡上所有主機的列表

+0

什麼是您的平臺(OS)?你想要C++還是Cocoa? – 2010-10-26 13:14:16

+0

@Steve:我的平臺是Mac OS X 10.6和可可開發人員。但是,我正在使用RFB協議。我必須使用那些用C/C++語言編寫的協議。 – boom 2010-10-26 13:18:19

+0

因此,OS X上的C/C++解決方案將適合您? – 2010-10-26 13:24:48

回答

0

要獲取接口和IP地址列表,請使用getifaddrs()

搜索界面與ifa_addr->sa_family == AF_INET

的IP地址是在sin_addr.s_addr

然後,您可以使用gethostbyaddr()來查找該IP地址的DNS名稱。

更新:

有人向我指出的是,OP可能是詢問發現其他主機,而不是在本地計算機上的接口地址。

沒有可靠的方法來發現局域網上的其他機器,但有一些技巧。

  • Ping方法:使用ping實用程序(或與其等效的程序)ping本地廣播地址,然後查看誰迴應。通過列出如上所示的接口可以找到廣播地址。我相信ICMP在OSX下不需要root權限。請注意,許多系統可能禁用了ICMP ping或防火牆,因此您只能從非隱形設備獲得響應。

  • ARP方法:檢查系統ARP緩存以查看哪些IP地址最近處於活動狀態。這將只顯示最近幾分鐘內在同一網段上廣播數據包的系統。

這兩種方法都可以被防火牆,路由器甚至交換機阻塞,所以「LAN」的確切邊界可能非常窄。這兩種方法都可以通過編程方式實現,但只需調出命令行pingarp命令就可以更簡單,更方便。

+0

這個問題聽起來更像是作者想要枚舉LAN上的所有不同主機,而不僅僅是關於當前主機上行鏈路的信息。 – jdizzle 2012-05-07 02:31:38

+0

也許吧。我現在看到原來的問題不是平臺特定的,所以你可能是正確的。 – 2012-05-07 13:58:53