winpcap開發包在使用中還是會有一些容易被忽略的問題的,由於這些問題可能讓您在開發中產生一些莫名奇妙的結果。
首先,我們從winpcap的環境配置中可能出現的錯誤開始。
winpcap開發環境需要是windows作業系統,而且必須安裝winpcap驅動才可以除錯您的程式。
如果鏈結的時候出現error lnk2001: unresolved external symbol _pcap_findalldevs等問題,請察看link中是否加入了wpcap.lib.vc6下的加入方法是project->settings->link的objects/library modules裡面加入wpcap.lib。
接下來是使用winpcap開發包中的一些函式的問題。
1。用pcap_lookupnet時發現網絡卡的ip和掩碼都是0.0.0.0並且無法捕捉。出現這個問題很多是因為使用了pcap_lookupdev這個函式。最好不要使用pcap_lookupdev這個函式,這個函式也是winpcap開發手冊中不推薦使用的,因為在實際使用中我們會發現很多機器在查詢網絡卡時都能找到乙個虛擬的網絡卡,而且這個很多時候都在第乙個位置,這樣向下一步提交裝置控制代碼的時候就已經傳錯了。推薦您使用pcap_findalldevs返回乙個網絡卡列表,然後找到您需要的正常網絡卡。這樣也適合向多網絡卡移植。
2。在使用了pcap_findalldevs,並且除錯時發現已經是正常網絡卡,可是還是無法捕獲。出現這個問題請您在除錯時看看是否網絡卡的前面還有如:rpcap://這樣的字段,這可能是因為您沒有注意pcap_findalldevs,pcap_findalldevs_ex,pcap_open,pcap_open_live這幾個函式的區別的原因,請您參考winpcap開發手冊,裡面有這樣的字段the following formats are not allowed as 'source' strings:
•rpcap:// [to open the first local adapter]
•rpcap://hostname/ [to open the first remote adapter]
在上面的2種找網絡卡,和開啟方式中,有的開啟是沒有rpcap://這種欄位的,有的卻有,有沒有這個字段,後面的操作是不一樣的,有的需要使用pcap_createsrcstr()來建立正確的字段,所以您一定要注意了。
3。以上都沒有問題,可是還是抓不到包,好像winpcap沒有工作。請您察pcap_open或pcap_open_live函式中的延遲引數設定,一般設到1000(ms),因為如果您是在主線程下捕獲,延遲設定過小(一般200ms以下就不穩定了)會使winpcap無法工作,多執行緒下沒有這個問題,設到1都可以正常工作。
4。在mfc下開發的問題,不要使用在dos下開發時常用的pcap_loop而要選用pcap_next_ex等替代函式,這樣才不會有回掉函式的那個問題。可以參看winpcap開發手冊其中有如下說明:
最近使用winpcap發包又發現了點毛病,這裡貼出來。
1。關於winpcap的延遲引數設定多少。
在winpcap的open_live中有乙個延遲引數,主要是設定多長時間返回,當使用主線程抓包時應該設定長一點,500ms~1000ms左右,設定的過小winpcap 會抓不到包。如果是在子執行緒下可以設定的小一些。
2。如果有發包的情況怎麼設定。
如果你的捕獲和發包在乙個執行緒裡,就是捕獲後立即發包的話,你會發現即使設定成1ms還是有不小的延遲,我感覺主要還是winpcap發包機制不是太好,你可以設定成-1,也就是捕獲後立刻返回,這樣會快一些(平均反映速度提高10倍左右),雖然還是會有些的延遲,但是一般的專案要求基本可以滿足了。
3。出現不停傳送同乙個包的情況怎麼辦。
如果你在作tcp或dns,arp欺騙或其他需要捕獲後立刻傳送包的程式時可能會發現每捕獲乙個包就會作很多回覆,而且是一樣的,為什麼呢?一般是因為你的pcap_next_ex或類似的抓包函式沒有注意返回值,一定要注意寫成if(pcap_next_ex(....)==1)的形式,不要直接用pcap_next_ex因為其可能==0這個時候會把前乙個包重複抓一遍。可以參考winpcap開發手冊。
Redis 的 C 開發包 使用例子
1.首先安裝完畢redis 2.安裝boost 庫 4.上 include redisclient.h include include using namespace boost using namespace std shared ptrconnect client intmain shared ...
php組合開發包 appserv的使用
最近在學習ajax。在 鋒利的jquery 一書第六章中,介紹了在jquery於ajax的應用。要學習ajax當然要有例項啦。書上的例子是無法直接在本地執行的,因為會跨域,要在伺服器上執行才行。首先是安裝,非常的簡單,一直點下一步就行。安裝好之後,在瀏覽器輸入http localhost,如果出錯,...
Detour開發包介紹 2 使用
一般來說,使用detours 的 都具有固定的模式。detours 1.5 和 detours 2.1 的介面函式變了很多,這裡按照 2.1 版本對基本的使用方法進行說明。常用的函式有下面幾個 detourtransactionbegin 開始一次 截獲 或者 解除截獲 過程。detourupdat...