LinuxでどのプロセスがSCTPポートを開いているか確認する

LinuxでどのプロセスがSCTPポートを開いているか確認する

Ubuntu Server 16 を使用しています。マシン上の何かに SCTP ポートが開いているので、それを見つけて強制終了する必要があります (再起動せずに)。

lsofSCTP ソケットは表示されず、TCP と UDP のみが表示されます。

私はこれらのネットワークユーティリティをすべて調べていますが、SCTPのサポートは、このような古い標準に対して驚くほど少ないです。私は、netstat最先端のnet-toolsを構築することでSCTPに取り組むことができました。ここから. は、sudo netstat --sctp -tulpn開いている SCTP 接続をいくつか表示しますが、どのプロセスがそれらを持っているかは示しません。UDP および TCP ソケットの PID のみが表示されます。

答え1

ちょっとハッキーな回りくどい方法ですが、私の場合はうまくいっているようです。誰かがもっと良い方法を見つけてくれることを期待していますが、私の最初の考え (ss/netstat) は SCTP を認識していないようです。

まず、procfssctp 接続の inode を見つけるために使用します。

$ cat /proc/net/sctp/eps
 ENDPT     SOCK   STY SST HBKT LPORT   UID INODE LADDRS
b6d72780 a8903800 2   10  48   123       0 1895802 0.0.0.0

その inode (私の例では 1895802) を取得し、lsofそれの所有者を見つけるために使用します。

$ lsof -R | grep 1895802
socat      8697        2045             root    5u     sock    1895802      0t0       SCTP ENDPT: b6d72780 0.0.0.0[123]

ご覧のとおり、私はsocat123/sctp でリッスンするソケットを作成するために使用していました。8697 は pid です。

関連情報