2012-09-01 30 views
0

previous question我試圖獲得一個子網中的所有有效的IP地址,所以我使用for循環,但是在我嘗試它之後,我發現我的代碼需要更多的2分鐘才能找到子網中的所有IP地址,並且在某些情況下需要5分鐘以上!有沒有快速的技術來獲取子網中的所有IP地址?

我的代碼是用C++在Mac OS下編寫的;

但在Windows中,做同樣的事情,你只寫net view/all命令,它立即打印一個子網中的所有IP地址!您可以使用來做這樣的工作。

這些技術如何以這種速度工作(Net view /allBonjour service)? 有沒有辦法像這樣快速完成這項工作? 如果不是請告訴我是否有APi在Mac OS中直接使用Bonjour服務到我的代碼(C++)中?

編輯:

我找到了新的思路

我對蘋果發現開發一些API叫卓悅API,我的是它的幫助,但我怎麼可以使用I C++,因爲我知道,Mac上使用opbjectiv -C 。

bonjour

+0

什麼是'net view/all'?這會導致Windows 7出現語法錯誤。 – harper

+0

這是一個在Windows命令中運行的命令 – user1344201

回答

1

你應該異步工作。您需要一個發出通訊請求的功能,但立即返回,如IcmpSendEcho2。您將不得不爲每個呼叫創建一個完成事件數組。每個事件句柄都被傳遞給一個IcmpSendEcho2調用。

之後,您調用WaitForMultipleObjects等待ALL事件設置。

+0

請檢查我的編輯 – user1344201

2

net view /all正在開發Windows網絡級別,而不是IP級別。它只會列出啓用了Windows網絡和名稱解析的計算機。如果您有沒有運行Windows(或samba)的計算機,它們將不會被列出。與打印機,路由器等相同。

對於IPv4,最好的方法是通過檢查計算機的IP地址和網絡掩碼來提取當前子網中的IP地址列表。然後強制對每個IP地址進行ARP查找。如果設備存在於網絡中,ARP查詢將始終有效,即使它完全被鎖定(沒有端口打開,也不會回答ping)。

對於IPv6,您基本上不走運。單個子網(18 446 744 073 709 551 616)中的可用IP地址數量太多以至於無法進行詳盡的搜索。

+0

請檢查我的編輯 – user1344201

+0

Bonjour是Windows網絡/ Samba的Mac等價物。它只會檢測Bonjour激活的設備(通常是Mac電腦)。它不會得到所有有效(使用中)的IP。 –