環境:ubuntu 16.04 64bit LTS
下面的內容只是一些安裝測試的步驟和方法的記錄,並沒有什么實質性和原理的說明,主要為作者本人記錄的遠程筆記,如果有幸對您也有幫助,請您順手頂一下,如果您覺得您是在看不下去,也請不要噴我,畢竟學習不易,小白辛苦的學習還是需要鼓勵的,先謝謝您吶!(滑稽狗頭.jpg)
在項目中需要使用netfilter_queue修改數據包,然后習慣性的先找了度娘,看到了大神的博文 這是傳送門
但是奈何對這塊的知識一點都不知道,環境也沒有配置好,只能一點一點摸索,下面就當是自己的步驟做一個簡單的記錄。
個人習慣:習慣於將手動下載的,手動安裝的程序放置在/opt下,所以操作都是在普通用戶下使用sudo命令。
libnetfilter_queue主要依賴於libmnl,libnfnetlink以及一些其他的工具等,先進行依賴文件的安裝。
一、安裝libmnl
二、安裝 libnfnetlink
三、安裝libnetfilter_queue
四、測試
安裝完成之后,進入到example目錄,里面包含了一個測試文件,使用gcc編譯並執行,因為例子中使用了libmnl的功能,所以編譯需要連接libmnl。
在測試之前需要將數據包入到隊列中(本人測試中直接將所有的數據都入到隊列8008中)
五、自己根據需要編寫測試例程
測試例程功能簡單說明:客戶端和服務端通過socket-tcp進行通訊,客戶端只負責發送數據,服務端負責接收數據並顯示,服務端通過iptables增加數據抓包並且修改其中的數據。
服務端iptables規則設置:
1、將所有輸入的協議為tcp、目標端口為9999的數據入到隊列號為80的隊列
然后運行編譯好的程序(代碼后附)
客戶端發送的數據
數據抓取成功並且更改成為其他的數據,然后發送到用戶空間。
服務端運行成功並且接收到數據。
下面是nfqueue的主要實現的代碼:





