我想捕獲一個數據包之前,該數據包出現tcp/ip層,並用C++和用戶界面給用戶空間。如何更改以太網數據包(來自NIC的數據包)?我可以使用Netfilter掛鉤嗎?
我該怎麼做? Qt & Netfilter是否可以做到這一點?
我想捕獲一個數據包之前,該數據包出現tcp/ip層,並用C++和用戶界面給用戶空間。如何更改以太網數據包(來自NIC的數據包)?我可以使用Netfilter掛鉤嗎?
我該怎麼做? Qt & Netfilter是否可以做到這一點?
Qt在那裏是無奈的。你需要的是編寫一個netlink NFQueue處理程序。當你的數據包與一個說明-j NFQUEUE的規則相匹配時,你的用戶空間程序將接收這些數據包,允許你接受,丟棄或者修改(修改)數據包(只在mangle表中)。如果您可以使用GPLv2庫,則應使用libnetfilter_queue來幫助您。
但請注意,mac層不完整。這是因爲網絡代碼需要支持各種設備類型,並且一些非以太網設備沒有MAc地址。在以太網設備上,通常只有發送者的MAC地址。
非常感謝您的幫助,可以在將數據包在netfilter中預先路由之前對數據包進行排隊,並將其掛接到用戶空間並使用NFQueue處理程序處理隊列 –
您可以使用NFQUEUE和libnetfilter_queue。
iptables -t raw -I PREROUTING -p tcp -j NFQUEUE --queue-num 1
你可以看到在這個網站的例子:
我想,當數據包從數據鏈路層交叉之前接收並改變它們將數據包發送到用戶空間,然後發送更改的數據包到特定的網卡 –