2016-08-13 98 views
2

我正在編寫通過局域網搜索的簡單程序,程序有很少的選項如何搜索(檢查單個IP地址,檢查主機名,檢查本地機器子網....等)。如何知道從子網掩碼搜索哪些IP地址?

我被困在「檢查本地機器子網」(至少我認爲這可能是一個問題)!?

好吧,這是什麼可能是一個問題,所以我想知道是否有一種方法來處理在c + +。

當我使用getadapteraddresses()來獲取IP地址和子網掩碼,所以我可以搜索本地機子網,我的疑惑是如果getadapteraddresses()返回子網 - 255.255.254.0和IP - 192.160.5.10。第一步是搜索192.168.5.0-255,但接下來,我應搜索192.168.6.0-255或192.168.4.0-255 ..的範圍?

如果有方法可以在C++中確定這一點,任何提示都會很棒。

謝謝:)

+0

這不就是路由器爲你做的嗎? –

+0

@πάνταῥεῖ我的目標是讓我可以開始程序,並選擇通過本地機子網搜索和程序給我所有的IP地址是活着的(與一些更多的信息MAC地址,主機名..等) – Genato

+1

拿子網掩碼和你的IP和還有他們;然後,或者用這個結果掩碼中所有位的組合爲零。這些是當前子網中的所有地址。 –

回答

1

你可以計算的所有地址的東西,如

int count = (~netmask) & 0x7FFFFFFF; 
int network = ip_address & netmask; 
for (int i=1; i<count; i++) { 
    int addr = network + i; 
    ... 
} 
+0

網絡掩碼是子網?如果是,當執行'(〜netmask)&0x7FFFFFFF'時,網絡掩碼應該是明確的十六進制?執行ip_address&netmask時,ip_address的格式應該是什麼? – Genato

+1

@Genato:我假設netmask和ip_address都是32位無符號數字'(b1 << 24)|(b2 << 16)|(b3 << 8)| b4',其中地址是''。 – 6502

0

老兄,我認爲你有一個錯誤的值。 192.168.5.x不在255.255.254.0的範圍內。這個子網掩碼允許從192.168.0.0到192.168.1.255的地址。如果5是主機部分,則掩碼必須是255.255.248.0。

+0

我沒有得到這個價值,這是我的擔心,如果我遇到這樣的例子。嗯你怎麼解釋這一點,我在家裏的子網是255.255.255.0,我的IP地址是192.168.5.20? – Genato

+0

完美有效,您的子網範圍是:192.168.5.0 - > 192.168.5.255。 192.168.5.0和192.168.5.255在子網中,但是無效地址,第一個是網絡地址,第二個是廣播地址。 –

+0

@RichardCritten我知道這一點,不讓我們走,我的問題是別的? – Genato