2015-10-07 41 views
2

我想實現使用libpcap重新存儲在.pcap文件中的數據包。 這個過程非常簡單:我打開pcap_open_offline的pcap文件,然後將數據包傳遞給使用pcap_open_live打開的設備,並通過接口將它們發送到pcap_injectpcap_inject在一個斷開的接口

現在NIC沒有連接到它的以太網電纜。我知道pcap_open_live不會告訴打開的設備是否支持發送,所以我從pcap_inject(errno 100)收到錯誤。這是預期的嗎?如果我簡單地使用tcpreplay從cmd行,它完成並不會顯示錯誤,無論是否插入以太網電纜。

任何人都知道tcpreplay/tcpedit如何處理「死」的接口? tcpreplay重寫數據包標題,而我試圖將它們發送原始?任何幫助表示讚賞!

我在Ubuntu 14.04和接口地址少和PROMISC模式:

auto eth1 
iface eth1 inet manual 
    up ifconfig eth1 promisc up 
    down ifconfig eth1 promisc down 

回答

1

現在的網卡沒有連接到它的以太網電纜。

那麼您希望通過在該NIC上發送數據包獲得什麼有用的結果?

我知道pcap_open_live不會告訴該設備是否開啓支持發送

設備是否是漲還是不能夠隨時間而改變,所以你從pcap_open_live()得到任何答案可能是由不正確的你真的嘗試發送數據包。

所以我從pcap_inject得到錯誤(errno 100

在Linux中errno.h中搜索100顯示:

#define ENETDOWN 100 /* Network is down */ 

我猜Linux網絡不喜歡的人時,嘗試在系統調用send()系統調用失敗的接口上發送數據包,這是libpcap所做的。

這是預期的嗎?

是的。

如果我只是從CMD線使用tcpreplay,它完成,因此不會造成錯誤

tcpreplay有不同的機制一大堆使用它來發送數據包。請參閱tcpreplay源文件中的sendpacket.c源文件中的sendpacket()。例如,它們中的一些可能會靜靜地丟棄在死接口上發送的數據包,而不是報告錯誤,並且可能正在使用其中一種機制。

+0

謝謝蓋伊!我證實,即使tcpreplay報告沒有錯誤,數據包確實被丟棄。我打算使用NIC作爲一種嗅探器,並且只處理來自pcap文件的數據包,但是它正在從以太網電纜獲取數據包......我想我只是需要使它不起作用 – icdevppl

+0

或者我可以使用爲此目的的環回設備....希望有一個網絡書籍的假人:P – icdevppl