显示进程的网络连接

ᴜsᴇ*_*sᴇʀ 39 networking process monitoring

有没有办法显示进程的连接?类似的东西:

show PID
Run Code Online (Sandbox Code Playgroud)

其中show是执行此操作的命令,并且PID是进程的 ID。我想要的输出由进程的所有连接(实时)组成。例如,如果进程尝试连接到173.194.112.151,则输出为173.194.112.151

一个更具体的 Firefox 示例:

show `pidof firefox`
Run Code Online (Sandbox Code Playgroud)

使用 Firefox,我首先访问google.com,然后访问unix.stackexchange.com,最后访问192.30.252.129。当我关闭浏览器时,输出必须是:

google.com
stackexchange.com
192.30.252.129
Run Code Online (Sandbox Code Playgroud)

(显然对于浏览器这个输出是不现实的,因为还有很多其他相关的连接,但这只是一个例子。)

小智 40

你在找strace!我在 askubuntu 上找到了这个答案,但它对 Unix 有效:

要启动和监视新进程:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
Run Code Online (Sandbox Code Playgroud)

要监视具有已知 PID 的现有进程:

strace -p $PID -f -e trace=network -s 10000
Run Code Online (Sandbox Code Playgroud)

否则,但这是特定于 Linux 的,您可以在隔离的网络命名空间中运行该进程并使用 wireshark 来监控流量。这可能比阅读strace日志更方便:

  • `strace` 实际上是特定于 Linux 内核的,因此它不适用于所有类 Unix 操作系统。据我了解,类似 BSD 的系统具有类似的实用程序(DTrace 和 truss)。无论如何,很好的答案(如此赞成)。欢迎使用堆栈交换。 (3认同)

小智 26

尝试

lsof -i -a -p `pidof firefox`
Run Code Online (Sandbox Code Playgroud)

  • 这仅显示某个时间点的连接,它没有列出进程在其生命周期内建立的所有连接。即使您将此命令放入循环中,它也会错过短期连接。 (2认同)

Ser*_*nyy 11

这是另一种方法:

ss -nap | grep $(pidof firefox)

示例输出:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))
Run Code Online (Sandbox Code Playgroud)


小智 6

您也可以尝试使用netstat -p. 从手册页:

netstat - 打印网络连接、路由表、接口统计信息、伪装连接和多播成员资格

要仅显示网络连接,请使用netstat -tup. 请注意,要查看进程 PID,您可能需要是 root。

如果您netstat的系统上没有ss,您可能有,它具有几乎完全相同的语法。您可以使用 then ss -tup(作为 root)。

  • 这仅显示某个时间点的连接,它不会列出进程在其生命周期内建立的所有连接。即使您将此命令放入循环中,它也会丢失短暂的连接。 (2认同)