在我的 Ubuntu 服务器上,我发现它非常有用,netstat -tulpn
它还显示了所连接的用户名sshd
(显然,这个用户名打印是专门为sshd
) - 不幸的是,这个打印输出也被截断了:
$ sudo netstat -tulpn | grep 'PID\|user1'
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN 1620557/sshd: user1
tcp6 0 0 :::12345 :::* LISTEN 1620557/sshd: user1
在上面的例子中,完整的用户名是user1234
,但由于截断,我只能读取user1
。
更不幸的是,我发现这个截断在Netstat 输出行宽限制netcat
中是硬编码的:
不幸的是,netstat 中 PID/程序名称列的宽度是硬编码的
#define PROGNAME_WIDTH 20
,因此无法直接从 netstat 获取完整输出。此外,您最终会得到 19 个字符和一个空格。
同样的答案也建议:
在今天的 Linux 中,人们可以使用
sudo ss -natp
稍微不同的格式来获取完整信息,但使用全名:
...不幸的是,ss
没有打印所连接用户的用户sshd
名netstat
:
$ sudo ss -tulpn | grep user1
$
$ sudo ss -tulpn | grep 12345
tcp LISTEN 0 128 0.0.0.0:12345 0.0.0.0:* users:(("sshd",pid=1620557,fd=10))
tcp LISTEN 0 128 [::]:12345 [::]:* users:(("sshd",pid=1620557,fd=11))
那么,如何才能获得与 的输出相同或相似的输出netstat -tulpn
,但打印出与 连接的完整用户名sshd
?
我的 netstat 版本是:
$ netstat --version
net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH
HW: +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64