はじめに
LinuxでSocket通信してるプログラムのデバッグをしてるときに、
プロセスを殺さずに指定のポートの通信だけ切断したい。。。さてどうするか。。。
を ChatGPT と解決したときのメモ
Amazon Linux 2023 の場合を追加しました。
公式の EPEL がないので、Fedora の EPEL から rpm をとってきてインストールするのが楽。
ゴール
通信が ESTAB になっている通信を一時的に通信断にさせる
$ ss -ant
State Recv-Q Send-Q Local Address:Port Peer Address:Port
:
:
ESTAB 0 0 [10.0.0.1]:41880 [10.0.0.2]:33333 ← この接続を一時的に通信断にする
インストール
UBUNTU22.04 の場合
sudo apt install dsniff
RHEL9.2 の場合
sudo yum install dsniff
amazon linux 2022 の場合
sudo amazon-linux-extras install epel -y
sudo yum install dsniff
amazon linux 2023 の場合
- fedora の epel から rpm をダウンロードする
- dnf で libXmu, libnet をインストールする
- rpm で libnids をインストールする
- rpm で dsniff をインストールする
ダウンロード
wget https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/l/libnids-1.24-23.el9.x86_64.rpm
wget https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/d/dsniff-2.4-0.37.b1.el9.x86_64.rpm
インストール
sudo dnf install libXmu
sudo dnf install libnet
sudo rpm -ivh libnids-1.24-23.el9.x86_64.rpm
sudo rpm -ivh dsniff-2.4-0.37.b1.el9.x86_64.rpm
通信断手順
ここでは eth0 の 33333 ポートで接続しているプログラム
ポートの確認
sudo ss -antp | grep :33333
ESTAB 0 0 [10.0.0.1]:57684 [10.0.0.2]:33333 users:(("java",pid=18771,fd=21))
通信断
Ctrl+c をするまで切断される
sudo tcpkill -i eth0 port 33333
tcpkill: listening on eth0 [port 33333]
10.0.0.2:33333 > 10.0.0.1:57684: R 458329705:458329705(0) win 0
10.0.0.2:33333 > 10.0.0.1:57684: R 458330194:458330194(0) win 0
10.0.0.2:33333 > 10.0.0.1:57684: R 458331172:458331172(0) win 0
:
:
さいごに
かんたんでしたね。