web-dev-qa-db-ja.com

TCPホストからのトラフィックを「編集」する簡単な方法(Linux)

接続を処理するプロセスがストリームを取得する前に、既知のtcp Host:portからの着信トラフィックに小さな変更を加える必要があります。

たとえば、192.168.1.88をWebサーバーを実行するリモートホストとします。
ローカルホストのプロセスが192.168.1.88:80(たとえば、ブラウザ)からデータを受信すると、最初にデータが変更されてtext-Atext-B、 このような:

  • 127.0.0.1:...は192.168.1.88:80に接続します
  • 127.0.0.1:...は192.168.1.88:80に送信します。

    GET /
    
  • 192.168.1.88:80は127.0.0.1に送信します:...:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-A, some other text
    
  • そのデータはシステムによっていくらか傍受され、出力が次のようなプログラムに渡されます。

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-B, some other text
    
  • システムは、このように変更されたデータを、192.168.1.88:80からのように、127.0.0.1:...を処理するプロセスに提供します。

私がこの変更を行うためのストリームベースの方法(たとえば、sedを使用)があるとすると、着信tcpストリームを前処理する最も簡単な方法は何ですか?

これにはiptablesが関係すると思いますが、私はあまり得意ではありません。

アプリケーションは元のホストを処理するように感じる必要があるため、プロキシの設定はおそらく解決策ではないことに注意してください。

9
etuardu

これを正確に行うには、iptablesをsquidプロキシを介して透過的にプロキシ接続するを使用し、次にsquid re-write the http contentあなたのために。

5
paulos

iptables + libnetfilter_q の使用は、あなたが望むことをする別のオプションです:

「... [再注入]カーネルnfnetlink_queueサブシステムへの変更されたパケット。」

ソフトウェアのコーディングはあなた次第なので、拡張性が最も高くなるでしょう。

a python wrapper も利用できます。

3
mbrownnyc