2012-08-31 85 views
0

我開發的採用C++爲我們的項目代碼的一部分,我的代碼必須在一個子網中返回所有可用的IP地址列表,所以我有這樣的場景:找到所有的IP子網中

  1. 獲取我的子網。

  2. 測試每一個IP子網使用for循環,例如:

    for (int i = 0; i < 254; i++) 
    { 
        testip(X, X, X, i); 
        /* if IP is valid */ 
        vectoriplist.push_back(X, X, X, i); 
    } 
    

對於發現子網我想我會用IPnetwork utility,但我仍然有一個問題,它是我如何可以測試該IP在子網上有效。我嘗試使用boost.asio,但我找不到任何東西。

+0

這取決於您稱爲有效IP地址的內容,它是否對應一個硬件響應ping請求的地址?然後,您可以嘗試使用簡單的SYN/ACK tcp ping – Geoffroy

+0

假設網絡是鏈路本地的,即通過鏈路可見,則可以使用每個IPv4子網具有廣播地址的事實。對於IPv6來說,只需ping到ff02 :: 1(全節點地址)就可以實現。 – hroptatyr

+0

您可以使用fping在子網中查找有效的節點。 http://www.cyberciti.biz/tips/linux-unix-profiling-network-connectivity-with-fping.html – Arvind

回答

0

我發現了一個解決方案:

我使用coonect()getpeername()功能在for循環。獲取子網中的所有有效IP地址