いくつかのオプションがあります:
- gdb に接続し、fd で close() を呼び出します。 /proc/net/tcp を介して addr/port から inode 番号に、ls -la /proc/$pid/fd を使用してプロセス内の inode 番号から FD にマップできます。
- RST パケットを偽装する。ローカルで生成し、何らかの方法で SEQ 番号を推測する必要があります。
- たぶん、次のパケットで RST を生成するように iptables ルールをセットアップします。
- カーネル モジュールを作成する
これを行うための十分にサポートされている方法はないようです。いずれにせよ、FD が予期せず閉じられると、プロセスがクラッシュする可能性があります。
プロセスの単一の接続を強制終了することはできません。
ただし、iptables でブロックできます。そのため、接続はデータを送受信できず、クライアントはタイムアウトになります。
Linux カーネル>=4.9 では、 ss
を使用できます キー -K
を使用した iproute2 からのコマンド
ss -K dst client1.something dport = 49987
カーネルは CONFIG_INET_DIAG_DESTROY
でコンパイルする必要があります オプションが有効です。
宛先ポートで強制終了できます:
ss -K dport = 65987