使用ss
with-p
选项时,user/pid/fd
列会跳到特定行下方。例如,这就是我实际看到的:
# ss -nulp4
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:20000 *:*
users:(("perl",pid=9316,fd=6))
UNCONN 0 0 *:10000 *:*
users:(("perl",pid=9277,fd=6))
UNCONN 0 0 192.168.100.10:53 *:*
users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN 0 0 127.0.0.1:53 *:*
users:(("named",pid=95,fd=515),("named",pid=95,fd=514))
Run Code Online (Sandbox Code Playgroud)
首选输出格式:
# ss -nulp4
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:20000 *:* users:(("perl",pid=9316,fd=6))
UNCONN 0 0 *:10000 *:* users:(("perl",pid=9277,fd=6))
UNCONN 0 0 192.168.100.10:53 *:* users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN 0 0 127.0.0.1:53 *:* users:(("named",pid=95,fd=515),("named",pid=95,fd=514))
Run Code Online (Sandbox Code Playgroud)
为了确认没有换行符,我试过这个:
# ss …
Run Code Online (Sandbox Code Playgroud) 我想知道 ss 命令输出中某些项目的含义。例如:
# sudo ss -iepn '( dport = :3443 )'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.43.39:45486 190.0.2.1:443 users:(("rocketchat-desk",pid=28697,fd=80)) timer:(keepalive,11sec,0) uid:1000 ino:210510085 sk:16f1 <->
ts sack cubic wscale:7,7 rto:573 rtt:126.827/104.434 ato:40 mss:1388 pmtu:1500 rcvmss:1388 advmss:1448 cwnd:10 bytes_sent:12904 bytes_retrans:385 bytes_acked:12520 bytes_received:13322 segs_out:433 segs_in:444 data_segs_out:215 data_segs_in:253 send 875.5Kbps lastsnd:18722 lastrcv:18723 lastack:18662 pacing_rate 1.8Mbps delivery_rate 298.1Kbps delivered:216 busy:16182ms retrans:0/10 dsack_dups:10 rcv_rtt:305 rcv_space:14480 rcv_ssthresh:6
CLOSE-WAIT 1 0 [2800:810:54a:7f0::1000]:37844 [2800:3f0:4002:803::200a]:443 users:(("plasma-browser-",pid=16020,fd=175)) uid:1000 ino:90761 sk:1d -->
ts sack …
Run Code Online (Sandbox Code Playgroud) 我想定期观察一个套接字状态,所以我需要通过命令检查套接字状态。
目前我列出了所有侦听套接字ss
并通过grep
.
ss -l | grep -q /run/php/php7.0-fpm.sock
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来检查套接字的状态?
一些本地进程在端口 1234 上连接和断开连接到 127.0.0.1。
我想记录到此端口(或服务器进程)的所有连接。
我试过了
ss -tpn | grep 1234
Run Code Online (Sandbox Code Playgroud)
它显示一个列表,但随后停止;它不会继续记录新连接,因此我无法捕获所有者的套接字或 PID。
我可以使用什么工具来发现连接和断开套接字的 PID?
从那篇文章中,我意识到:
UNIX 域套接字绑定到文件路径。
所以,我需要通过这里socat
提到的来嗅探 DGRAM Unix 套接字。但是当我为此尝试检索路径时,我发现目标应用程序使用了一个没有文件路径的套接字。
该ss -apex
命令显示带有和不带有文件路径的结果,例如:
u_dgr UNCONN 0 0 /var/lib/samba/private/msg.sock/32222 1345285 * 0 users:(("nmbd",pid=32222,fd=7))
u_dgr UNCONN 0 0 * 8567674 * 0 users:(("gnome-shell",pid=16368,fd=23))
Run Code Online (Sandbox Code Playgroud)
从ss 手册页我找不到,例如* 8567674
没有文件路径是什么意思。
所以,两个问题:
socat
没有文件路径的情况下嗅探 unix DGRAM 套接字?嗨,我觉得这是一个显而易见的问题,但到目前为止我还没有得到很好的答案。给定服务的名称(我知道在本地主机上运行),是否有任何网络命令行工具(例如(netstat
/ ss
))可以告诉我该服务正在哪个端口运行?理想情况下是这样的:
$ some-program --service-name='mysql' localhost
'mysql' is running at localhost:3306
Run Code Online (Sandbox Code Playgroud)
我觉得有一些解决方案,但没有一个能够充分解决这个问题。例如,我考虑了以下两个ss
命令:
ss -tuln
与输出:Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:21119 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:37766 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:54399 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*
udp UNCONN 0 0 [::]:51755 [::]:*
udp UNCONN 0 0 [::]:5353 [::]:*
udp UNCONN 0 0 *:1716 *:*
tcp LISTEN 0 …
Run Code Online (Sandbox Code Playgroud) 我运行这个命令
ss -tulpnoea|grep -i water|grep -v 127
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed to find cgroup2 mount
.....
Run Code Online (Sandbox Code Playgroud)
我尝试过 2> /dev/null...
ss -tulpnoea|grep -i water|grep -v 127 2> /dev/null
Failed to find cgroup2 mount
Failed to find cgroup2 mount
Failed …
Run Code Online (Sandbox Code Playgroud) ss ×7
linux ×2
networking ×2
socket ×2
command ×1
command-line ×1
netstat ×1
port ×1
process ×1
socat ×1
stderr ×1
tcp ×1
unix-sockets ×1