Howto攔截tcp數據包並在Linux(Ubuntu)中無代理地修改?舉例來說,捕獲包作爲wireshark但修改數據包。如何攔截tcp數據包並在飛行中修改?
需要捕獲,搜索和替換包,但例如:
搜索正則表達式"/(<form\s+.*?>)/i"
,通過"$1\n<input name=\"newinput\">"
僅限使用FTP,SMTP,HTTP等HOWTO使這個地方包替換?
Howto攔截tcp數據包並在Linux(Ubuntu)中無代理地修改?舉例來說,捕獲包作爲wireshark但修改數據包。如何攔截tcp數據包並在飛行中修改?
需要捕獲,搜索和替換包,但例如:
搜索正則表達式"/(<form\s+.*?>)/i"
,通過"$1\n<input name=\"newinput\">"
僅限使用FTP,SMTP,HTTP等HOWTO使這個地方包替換?
給出你的例子,你不想只改變一個數據包中的單個字節,而是一個可能跨越多個數據包的字符串。另外,您的替換可能與原始字符串的長度不同。如果你這樣做在數據包級別(因爲你不想使用代理服務器),你將需要:
除了實現這一點的複雜性之外,延遲數據包的第一點也可以通過TCP流量控制來推斷哪個連接可能會減慢甚至停止。
因此,實施此類深度數據包修改的常用方法是使用代理,其中客戶端和代理之間有一個TCP連接,代理和服務器之間有另一個TCP連接。這樣你有兩個獨立的TCP連接,它們都有自己獨立的TCP流量控制。此外,內核自動處理正確的序列號等,因此不需要手動調整。
我不知道你沒有代理的要求是多麼的不可改變。這可能是因爲你只是不想有一個需要在客戶端配置的顯式代理。但是,代理也可以以透明的方式使用,不需要客戶端的顯式配置。
因此,您最好使用透明代理實現您的實際需求。有關如何爲HTTP執行此操作,請參閱例如this documentation for mitmproxy。我們也可以用類似的方法來實現這個協議,而不是HTTP協議。