检查Linux中哪个进程打开了SCTP端口

sud*_*udo 8 networking ubuntu

使用 Ubuntu Server 16。我机器上的某个东西打开了一个 SCTP 端口,我需要找到它并杀死它(无需重新启动)。

lsof 不显示 SCTP 套接字,只显示 TCP 和 UDP。

我正在浏览所有这些网络实用程序,对于这样一个旧标准,SCTP 支持令人惊讶地稀缺。我netstat通过从这里构建最前沿的网络工具来使用 SCTP 。sudo netstat --sctp -tulpn显示了一些打开的 SCTP 连接,但没有说明哪个进程有它们。它只显示 UDP 和 TCP 套接字的 PID。

apr*_*boy 8

有点迂回曲折的方式,但似乎对我有用。希望有人会找到更好的方法,但我的第一个想法(ss/netstat)似乎并不承认 SCTP。

首先,使用procfs查找sctp连接的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
Run Code Online (Sandbox Code Playgroud)

使用该 inode(在我的示例中为 1895802)并使用lsof它来查找谁拥有它:

$ lsof -R | grep 1895802
socat      8697        2045             root    5u     sock    1895802      0t0       SCTP ENDPT: b6d72780 0.0.0.0[123]
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在使用socat套接字侦听 123/sctp。8697 是pid。

  • 哦,有趣。我安装的新“netstat”确实显示了我的 ncat SCTP 侦听器的 PID,但没有显示神秘进程(或其他任何进程)。并且 `procfs` 也没有显示任何内容。所以也许我以某种方式打开了套接字而没有使用它们的进程。但这是一个单独的问题,这回答了我的问题。 (2认同)