Answers:
您可以netstat
为此使用。参见示例(我为修改了ssh
):
netstat -putan | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1725/sshd
tcp 0 0 1.2.3.4:45734 1.2.3.5:22 ESTABLISHED 2491/ssh
tcp6 0 0 :::22 :::* LISTEN 1725/sshd
说明:
我经常使用参数-putan
(因为它们很容易记住)。
-p
:显示应用程序/进程的PID-u
:显示udp端口/连接-t
:显示TCP端口/连接-a
:同时显示侦听和非侦听套接字-n
:数字输出(不对主机名进行DNS查找等)在上面的输出中,您看到一个ssh守护进程(sshd
),其中PID 在所有网络接口()的1725
端口22
上监听0.0.0.0
。还有一个ssh客户端进程(PID 2491
)连接到1.2.3.5
端口号的IP地址22
,我的IP地址是1.2.3.4
,我的外部端口是45734
。您会看到连接已建立。因此,我已通过登录ssh
。
另一个可以做到这一点的工具是lsof
:
# lsof -i -a -p 1981
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:22 (LISTEN)
#
使用的选项如下:
-i
打印出通过过程打开的Internet端口-a
使所有选项都进行“与”运算-p 1981
显示过程1981的输出-n
禁止查找主机名并显示IP-P
禁止服务查找并显示端口号lsof
具有的优点是您可以指定要检查的过程,而不必从较大的输出中提取出来。 netstat
尽管lsof
它变得比以前更标准,但它在系统上更可靠地可用。
strace
@olivecoder建议的解决方案。
ss
适用于Linux的iproute软件包中的实用程序
我们已经有了很好的答案,但是它们仅列出命令运行时打开的端口。
strace
是监视应用程序生命周期中打开的连接的正确工具:
strace -e socket,connect,close -f -o hipchat.strace.txt hipchat
输出将显示其他信息,例如UDP请求和打开但关闭的连接。