Linux 下如何查看指定进程发起的所有连接信息

定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息,通常查找某个端口的连接信息使用 ss 或者 netstat,如果是主动与其他服务器建立的连接信息则可以通过 lsof 命令查看。

一、指定进程连接

例如想要查看进程 frps 当前的所有连接信息,则先获得进程的 pid:

# ps -ef|grep frps
root       4721     1  0 10:27 ?        00:00:01 ./frps

可以看到进程 pid 为 4721,然后通过 lsof 命令查看所有 TCP 连接信息:

# lsof -p 4721 -nP | grep TCP
frps    4721  root    4u     IPv4 117051764      0t0     TCP *:7000 (LISTEN)
frps    4721  root    6u     IPv4 117051765      0t0     TCP *:7003 (LISTEN)
frps    4721  root    7u     IPv4 117092563      0t0     TCP 139.129.11.120:7000->116.231.70.223:61545 (ESTABLISHED)
frps    4721  root    8u     IPv4 117092565      0t0     TCP *:6000 (LISTEN)
frps    4721  root    9u     IPv4 117334426      0t0     TCP 139.129.11.120:7000->116.237.93.230:64898 (ESTABLISHED)
frps    4721  root   10u     IPv4 117053538      0t0     TCP 139.129.11.120:7000->115.231.20.123:41297 (ESTABLISHED)
frps    4721  root   11u     IPv4 117053540      0t0     TCP *:6005 (LISTEN)
frps    4721  root   12u     IPv4 117334428      0t0     TCP *:6004 (LISTEN)

从 lsof 的输出结果中可以清楚的看到 frps 进程监听了 5 个端口,并且在 7000 端口上建立了 3 个连接,连接两端的 ip 信息也都可以查到。

lsof 的 -nP 参数用于将 ip 地址和端口号显示为正常的数值类型,否则可能会用别名显示。

如果提示

# lsof -p 4721 -nP | grep TCP
-bash: lsof: command not found

那么安装下 lsof 即可(一般出现在 CentOS):

# yum install lsof -y

二、指定端口连接

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等,功能强大。

常见参数:

  • -a (all)显示所有选项,默认不显示 LISTEN 相关
  • -t (tcp)仅显示 tcp 相关选项
  • -u (udp)仅显示 udp 相关选项
  • -n 拒绝显示别名,能显示数字的全部转化成数字。
  • -l 仅列出有在 Listen (监听) 的服務状态
  • -p 显示建立相关链接的程序名
  • -r 显示路由信息,路由表
  • -e 显示扩展信息,例如 uid 等
  • -s 按各个协议进行统计
  • -c 每隔一个固定时间,执行该 netstat 命令。

提示:LISTEN 和LISTENING 的状态只有用 -a 或者 -l 才能看到

常用命令组合如下:

# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp    0    0    0.0.0.0:22           0.0.0.0:*               LISTEN      1161/sshd           
tcp    0    0    0.0.0.0:666          0.0.0.0:*               LISTEN      1159/shellinaboxd   
tcp    0    0    10.2.0.205:47134     104.18.38.114:443       ESTABLISHED 1173/python         
tcp    0    0    10.2.0.205:46888     104.18.38.114:443       ESTABLISHED 1173/python         
tcp    0    248  10.2.0.205:22        10.2.2.132:49339        ESTABLISHED 32416/sshd: [email protected] 
tcp    0    0    10.2.0.205:22        10.2.2.132:52139        ESTABLISHED 32118/sshd: [email protected] 
tcp6   0    0    :::22                :::*                    LISTEN      1161/sshd           

可以看到系统监听了 22 和 666 端口,并与 104.18.38.114 产生了外网连接,也可以看到与 104.18.38.114 产生连接的是 Python,进程 ID 是 1173。

同样的,如果出现

# netstat -antlp
-bash: netstat: command not found

那么安装一下软件包即可(主要出现在 CentOS7)

# yum install net-tools -y

参考文章:
1、《linux下查看指定进程的所有连接信息
2、《Linux netstat命令详解


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 linux连接进程 的文章

 本文最后更新于 2018/01/03 10:38:04,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 系统 > Linux 下如何查看指定进程发起的所有连接信息

精选评论

  1. PrajnaSmoke
    1. VirCloud

      我用的是开源版本,而且也已经说明了引用来源,还要注意啥?