2011-04-20 66 views
0

libpcap只能看過的包,我怎麼能改成呢?如何從C中的NIC更改傳入數據包?

基本上我想註冊一個對所有傳入數據包運行的回調函數,

如何才能做到這一點?

+0

請指定一個操作系統,像這樣的東西通常是非常不便攜的。 – unwind 2011-04-20 15:17:05

+1

如果你希望每個數據包都被轉換到一個特定的進程(但是不影響其他進程),你可能有一組修改 - 可能在程序本身。如果您希望每個程序的每個數據包都經過您的代碼,那麼您必須將代碼放入通常位於內核中的TCP/IP堆棧中。這是一件很難做的事情(也是一件好事 - 讓系統篡改通信系統的警察狀態)。 – 2011-04-20 15:34:26

+0

在linux內核上,你可以修改系統調用。 – 2011-04-20 15:47:46

回答

2

這是什麼樣的流量?你想如何修改它?什麼OS?

在linux上,您可能可以使用iptables讓內核爲您修改數據包。

如果這樣做不能達到你想要的(即,你需要獲得數據包到用戶空間),你可以看看netfilter_queue。或者作爲一個更簡單的選擇,使用iptables REDIRECT規則將所有數據包發送到單個端口,然後編寫一個應用程序以偵聽該端口。

相關問題