MASTG-TECH-0028: 获取打开的连接
您可以在 /proc/net
中找到系统范围的网络信息,或者直接检查 /proc/<pid>/net
目录(不知何故不是进程特定的)。这些目录中存在多个文件,其中从测试人员的角度来看,tcp
、tcp6
和 udp
可能被认为是相关的。
# 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_queue
和rx_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-Q
和Send-Q
: 与接收和发送队列相关的统计信息。指示连接的活跃程度。State
: 套接字的状态,例如,套接字是否处于活动使用中 (ESTABLISHED
) 或已关闭 (CLOSED
)。