MASTG-TECH-0028: 获取打开的连接

您可以在 /proc/net 中找到系统范围的网络信息,或者直接检查 /proc/<pid>/net 目录(不知何故不是进程特定的)。这些目录中存在多个文件,其中从测试人员的角度来看,tcptcp6udp 可能被认为是相关的。

# cat /proc/7254/net/tcp
sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
...
69: 1101A8C0:BB2F 9A447D4A:01BB 01 00000000:00000000 00:00000000 00000000 10093        0 75412 1 0000000000000000 20 3 19 10 -1
70: 1101A8C0:917C E3CB3AD8:01BB 01 00000000:00000000 00:00000000 00000000 10093        0 75553 1 0000000000000000 20 3 23 10 -1
71: 1101A8C0:C1E3 9C187D4A:01BB 01 00000000:00000000 00:00000000 00000000 10093        0 75458 1 0000000000000000 20 3 19 10 -1
...

在上面的输出中,对我们来说最相关的字段是

  • rem_address: 远程地址和端口号对(以十六进制表示)。
  • tx_queuerx_queue:根据内核内存使用情况,传出和传入的数据队列。这些字段指示了连接的活跃程度。
  • uid:包含套接字创建者的有效UID。

另一种选择是使用 netstat 命令,它还以更易读的格式提供有关整个系统的网络活动的信息,并且可以根据我们的要求轻松过滤。例如,我们可以很容易地按PID过滤它

# netstat -p | grep 24685
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program Name
tcp        0      0 192.168.1.17:47368      172.217.194.103:https   CLOSE_WAIT  24685/com.google.android.youtube
tcp        0      0 192.168.1.17:47233      172.217.194.94:https    CLOSE_WAIT  24685/com.google.android.youtube
tcp        0      0 192.168.1.17:38480      sc-in-f100.1e100.:https ESTABLISHED 24685/com.google.android.youtube
tcp        0      0 192.168.1.17:44833      74.125.24.91:https      ESTABLISHED 24685/com.google.android.youtube
tcp        0      0 192.168.1.17:38481      sc-in-f100.1e100.:https ESTABLISHED 24685/com.google.android.youtube
...

netstat 输出显然比读取 /proc/<pid>/net 更用户友好。 与之前的输出类似,对我们来说最相关的字段如下

  • Foreign Address: 远程地址和端口号对(端口号可以替换为与该端口关联的协议的众所周知的名称)。
  • Recv-QSend-Q: 与接收和发送队列相关的统计信息。指示连接的活跃程度。
  • State: 套接字的状态,例如,套接字是否处于活动使用中 (ESTABLISHED) 或已关闭 (CLOSED)。