我正在寫一個內核模塊,通過使用網絡過濾器來阻止訪問特定的網站,它的工作效果很好。我已經爲NF_INET_PRE_ROUTING註冊了鉤子,並且可以檢查請求是否是http請求,並且是否進行了IP地址請求。從這裏,我想擴展我的模塊的功能,使對特定網站的請求重定向到另一個網站。我正在考慮重寫iphdr結構體的saddr屬性。這是可行的方法嗎?我試圖重寫saddr屬性,但請求沒有被重定向。 Wget只是停止響應。是否有可能重寫iphdr的saddr屬性?
這是我的代碼片段 -
// This code is inside hook function
__be32 test = ntohl(0xCC4FC5C8);
ip_header = (struct iphdr *)skb_network_header(skb);
ip_header->saddr = test;
return NF_ACCEPT;
內核版本 - 3.19 Ubuntu的
對不起,延遲迴復。我沒有用wireshark進行測試,但很可能你說的是真實的。我使用printk測試瞭解發生了什麼,發現客戶端不斷向同一個IP地址發送請求,並且不承認我做出的任何更改。我正在考慮使用連接系統調用的不同方法。 – user30646
我剛剛意識到你忘了重新計算ip頭的校驗和。網卡將丟棄具有無效校驗和的數據包。 – ruofan
你知道如何重新計算校驗和嗎? – user30646