2016-05-23 27 views
-1

我想獲得網絡中使用C的所有活動IP設備的列表。程序中在子網中的所有設備的列表

我會用一個例子來解釋我的問題。

例如:我與IP範圍內的網絡中的5個裝置從

  1. 設備10.0.0.2
  2. 設備10.0.0.3
  3. 設備10.0.0.4
  4. 設備10.0.0.5
  5. 設備10.0.0.6

從我的申請我想要ge這個清單。我的平臺是Linux,我正在使用C.目前我沒有使用任何網絡庫。如果一些圖書館提供這樣的實用程序,我可以使用相同的工具。

請諮詢此處。

+0

問題是IP從來沒有爲此設計過。不同的工具在不同的網絡層使用不同的方法,並且一些工具使用許多方法來嘗試這樣做。沒有一種方法是萬無一失的,並且一些配置(例如專用VLAN)將完全阻止這種嘗試。如果您的應用程序依賴於此,它將在某些網絡上失敗。只需在阻塞ICMP回聲的主機上啓用防火牆,就可以防止您的代碼通過ping進行檢測。查看交換機中的MAC地址表將獲得交換機當前知道的MAC地址。 –

+0

@Ron Maupin我正在嘗試構建一個服務器應用程序,該應用程序將在專用端口的子網(如家庭網絡)中的多個設備上運行。我有其他設備上運行的客戶端應用程序。客戶端應用程序必須發現活動設備並連接到服務器端口。我不想嘗試連接到所有255個IP,我希望獲得所有活動IP的列表,並且客戶端可以連接到它們。 –

+0

確定正在使用的其他地址沒有萬無一失的方法。這聽起來像是一個多播工作。您感興趣的主機訂閱特定的多播組。使用正確的工具來完成這項工作。順便說一句:目前只有兩個IP:IPv4和IPv6。如果您的意思是IPv4地址,則在任何子網中可能有可變數目的IPv4地址,但沒有子網有255個可能的地址。 '/ 24'子網有254個,'/ 25'子網有126個,'/ 23'子網有510個可能的地址。較短的面具有更多可能的主人。它將始終是'((32- )^ 2)-2'。 –

回答

0

有沒有超快速的直接邏輯知道哪些IP地址在線,但有一些技巧可以使用。

最常見的是不需要任何特別的東西,只是嘗試使用TCP連接到每臺主機上,您希望的服務。

另一種技術可以先做發送ICMP的ping,但不是所有的OS'es回答使用默認設置等來ping

最新技術,可使用(即僅適用於本地網絡,無法通過網關),是在您嘗試發送ping之後,查看ARP表。如果存在有效的ARP條目,則即使未收到ping回覆,主機仍處於聯機狀態。

+0

目前我正嘗試連接到每個IP,但該掃描需要很長時間。 「可以使用的最後一種技術(只適用於本地網絡,而不是通過網關)的想法是,在嘗試發送ping之後,查看ARP表。如果存在有效的ARP條目,則主機處於聯機狀態,即使沒有收到ping回覆。「看起來有希望你能否指點我一個示例代碼 –

+0

@PrajoshPremdas,你的主機將只在其ARP表中有條目,用於在特定時間段內與之通信的其他主機; ARP表項超時。大多數這些技術不適用於IPv6,每個子網有18,446,744,073,709,551,616個可能的地址。在每秒掃描的百萬個地址中,掃描子網需要超過五億年的時間。 –

+0

@PrajoshPremdas連接調用可以通過超時(http://developerweb.net/viewtopic.php?id=3196) 進行異步。 ICMP ping你可以找到幾個在線的例子,一個是隨機的(https://www.cs.utah.edu/~swalton/listings/sockets/programs/part4/chap18/myping.c)。當前的IPv4 ARP表可以在這裏找到:「/ proc/net/arp」 –

相關問題