9

別々のポートで複数のブラウザーへの複数の tcp 接続を開くプロセスがあります。

netsat を使用すると、出力は次のようになります。

tcp 0 0 server1.something:myprog client1.something:49987 ESTABLISHED
tcp 0 0 server1.something:myprog client1.something:65987 ESTABLISHED
tcp 0 0 server1.something:myprog client1.something:89987 ESTABLISHED

今、私はちょうど1つの接続を殺したいですか? どうすればいいのですか?(プロセスを強制終了すると、すべての接続が強制終了されるため)

4

4 に答える 4

6

以下にいくつかのオプションを示します。

  • gdb でアタッチし、fd で close() を呼び出します。/proc/net/tcp を介して addr/port から inode 番号にマップし、ls -la /proc/$pid/fd を使用してプロセス内の inode 番号から FD にマップできます。
  • RST パケットをスプーフィングします。ローカルで生成し、何らかの方法で SEQ 番号を推測する必要があります。
  • おそらく、次のパケットで RST を生成するように iptables ルールをセットアップします。
  • カーネルモジュールを書きます。

これを行うための十分にサポートされている方法はないようです。いずれにせよ、FD が予期せず閉じられると、プロセスがクラッシュする可能性があります。

于 2013-09-17T08:18:44.160 に答える
4

プロセスの単一の接続を強制終了することはできません。

ただし、iptables でブロックできます。したがって、接続はデータを提供または受信できず、クライアントはタイムアウトで実行されます。

于 2013-09-17T07:10:34.393 に答える