2

iptables (PREROUTING) を使用して、すべての TCP トラフィックをローカル ポートにリダイレクトします。

ここで、C プログラムを使用してこれらのパケットをキャプチャしたいと考えています。さまざまなソケットのバリエーション (UDP / TCP / ...) を試しましたが、iptables で指定したポートを使用して localhost に接続できません。

すべてのパケットがリダイレクトされていることを確認できますが、このトラフィックをキャプチャするにはどうすればよいですか?

これらは私のルールです(そのAndroidですが、違いはありません...):

Chain PREROUTING (policy ACCEPT 32 packets, 5675 bytes)
 pkts bytes target     prot opt in     out     source               destination
FIX ME! implement getprotobynumber() bionic/libc/bionic/stubs.c:384
    0     0 DNAT       tcp  --  any    any     anywhere             anywhere            tcp dpt:5512 to:192.168.1.107

Chain OUTPUT (policy ACCEPT 56 packets, 3433 bytes)
 pkts bytes target     prot opt in     out     source               destination
FIX ME! implement getprotobynumber() bionic/libc/bionic/stubs.c:384
    0     0 DNAT       tcp  --  any    any     anywhere             anywhere            tcp dpt:5512 to:127.0.0.1

私はすでに TCP/UDP/RAW ソケット (「ローカル」/UNIX ソケットについても考えましたが、そのアドレスは何ですか?) と ServerSocket / DatagramServer を作成しようとしましたが、何も受け取りませんでした...

ありがとう!!

4

2 に答える 2

1

イーサネットデバイスで発生するトラフィックをキャプチャするlibpcapを使用して、必要なもの/必要なものをフィルタリングするだけです。

ポートでリッスンしているサービスがない場合は、DNAT を使用してもポートに接続できません。何を達成しようとしているのかを正確に説明し、ネットワーク設定とキャプチャしようとしているデータを説明する必要があります。

于 2011-06-05T23:19:50.270 に答える
0

単にパケットを読み取りたい場合は、ULOGおそらくターゲットが最初の選択肢になるはずです。パケットをユーザー空間に送信するように netfilter を構成でき、ulogdデーモンはパケットをファイルまたはデータベースに保存できるため、おそらくプログラムにパケットを直接送信するように構成または変更できます。

一方、透過的な VPN などを作成するために巧妙な介入を行おうとしている場合は、ULOGおそらく少し手間がかかります。

于 2011-06-05T23:12:53.000 に答える