2

libpcapを使用してTCPパケットをキャプチャしましたが、このパケット全体を(変更せずに)別のホスト(そのポートをリッスンしている別のスニファがある)の特定のポートに送信したいと思います。

これを行う方法はありますか?

どうもありがとう!

4

3 に答える 3

1

使用しているプログラミング言語とこれまでに試したことを指定していません。

IP アドレス フィールドをターゲット IP に変更し、TCP ポート フィールドを必要なポートに変更します。両方のチェックサムを更新することを忘れないでください。

IP パケット形式 TCP パケット形式

TCP 転送が必要な場合は、Linux カーネルが既にこれを行っています

于 2013-02-06T15:31:33.727 に答える
1

この場合、netcat が機能する可能性がありますが、ヘッダーを再構築する必要があると思いますが、試していません。

netcat で 16 進値をエスケープする方法

もう1つのオプションは、iptablesを使用して、パッケージアナライザーでパケットをキャッチしながら、パケットを他のスニファーに送信することです

http://www.bjou.de/blog/2008/05/howto-copyteeclone-network-traffic-using-iptables/

もう 1 つのオプションは、ポート ミラーを使用することです。これは、使用するスイッチに応じていくつかの異なる名前で呼ばれますが、スイッチのポートを本質的にハブに設定することができます。

netcat を動作させることができない場合の最善の策は、iptables を使用することであり、それにフィルターを追加することもできます。

于 2013-02-06T15:55:35.763 に答える
0

C を使用する必要があるかどうかはわかりませんが、使用する場合でも、最初は Python/Scapy でプロトタイプを作成することをお勧めします。

scapy を使用する手順は次のとおりです。

  1. rdpcap() を使用して pcap ファイルを読み取ります。
  2. 宛先 IP アドレスと TCP 宛先ポート番号 (pkt.getlayer(IP).dst、pkt.getlayer(TCP).dport) を取得し、必要な形式で文字列として保存します (例: ペイロード = "192.168.1.1: 80インチ)。
  3. パケットの宛先 IP アドレスと宛先ポート番号を変更して、特定のポートでリッスンしている他のホストがパケットを受信できるようにします。
  4. パケットの上にペイロードを追加します (pkt = pkt / ペイロード)
  5. パケットを送信する (sendp(pkt, iface='eth0'))
  6. ペイロードを取得するには、他のホストでパケットを分析する必要があります。元のパケットの TCP 層の上にあるものを正確に知らなければ、これを正確にコード化することはできませんが、比較的単純なはずです。

これは Python/Scapy ではすべて非常に簡単ですが、C ではもっと難しくなると予想され、正しいオフセットとチェックサムなどを手動で計算する必要があります。頑張ってください。これがお役に立てば幸いです。

于 2013-02-06T23:19:39.850 に答える