0

仲間のコーダー。libnetfilter_queue モジュールと iptables ルール ipatbles -I OUTPUT 1 -p all -j NFQUEUE --queue-num 11220 を使用して送信トラフィックを監視しています

Jitsi と呼ばれる特定のアプリ (Java 上で動作) が、これまで遭遇したことのないような奇妙な動作を示しています: NFQUEUE パケットを処理する私の監視プログラムは、UDP パケットが送信されていることを明確に示しています。 proc/net/udp" および "/proc/net/udp6" は空です。さらに、"/proc/net/protocols" には UDP の "sockets" 列があり、0 です。しかし、UDP パケットは送信され続けます。1 分ほどすると、「/proc/net/udp」と「/proc/net/protocols」が UDP パケットに関する正しい情報を表示し始めます。そしてしばらくすると、UDP パケットが送信されている間、それらに情報がありません。

私の唯一の結論は、どういうわけか、アプリケーションがソケットを作成せずに UDP パケットを送信する可能性があること、および/またはソケットを作成してから削除し (カーネルが存在しないと判断するようにするため)、依然としてあいまいな方法を使用して送信することが可能であるということです。外のパケット。

そのような行動についてアイデアを持っている人が手を差し伸べてくれませんか?

4

2 に答える 2

4

2 つのアイデア:

strace を使用してアプリを実行し、その出力を確認してください。

ソケット操作用のフィルターを使用して、systemtapを介して実行することもできます。そのリンクから:

probe kernel.function("*@net/socket.c").call {
  printf ("%s -> %s\n", thread_indent(1), probefunc())
}
probe kernel.function("*@net/socket.c").return {
  printf ("%s <- %s\n", thread_indent(-1), probefunc())
}
于 2011-09-26T17:03:46.060 に答える
0

正しい方向へのヒントを与えてくれた Paul Rubel に感謝します。strace は、Java アプリが IPv6 ソケットを使用していることを示しました。/proc/net/udp6 を詳しく調べたところ、それらのソケットがありました。主に、そこにそれらが見つかるとは思っていなかったので、最初は大まかに見すぎたのでしょう。IPv6 ソケットを介した IPv4 パケットに出くわしたのはこれが初めてです。しかし、それは Java が行うことです。乾杯。

于 2011-09-27T20:01:53.350 に答える