ᴜ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 有效:
要启动和监视新进程:
Run Code Online (Sandbox Code Playgroud)strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
要监视具有已知 PID 的现有进程:
Run Code Online (Sandbox Code Playgroud)strace -p $PID -f -e trace=network -s 10000
否则,但这是特定于 Linux 的,您可以在隔离的网络命名空间中运行该进程并使用 wireshark 来监控流量。这可能比阅读strace
日志更方便:
创建一个测试网络命名空间:
Run Code Online (Sandbox Code Playgroud)ip netns add test
创建一对虚拟网络接口(veth-a 和 veth-b):
Run Code Online (Sandbox Code Playgroud)ip link add veth-a type veth peer name veth-b
更改 veth-a 接口的活动命名空间:
Run Code Online (Sandbox Code Playgroud)ip link set veth-a netns test
配置虚拟接口的 IP 地址:
Run Code Online (Sandbox Code Playgroud)ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0 ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
在 test 命名空间中配置路由:
Run Code Online (Sandbox Code Playgroud)ip netns exec test route add default gw 192.168.163.254 dev veth-a
激活 ip_forward 并建立 NAT 规则以转发来自您创建的命名空间的流量(您必须调整网络接口和 SNAT ip 地址):
Run Code Online (Sandbox Code Playgroud)echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
(如果您愿意,也可以使用 MASQUERADE 规则)
最后,您可以在新命名空间中运行要分析的进程,也可以运行wireshark:
Run Code Online (Sandbox Code Playgroud)ip netns exec test thebinarytotest ip netns exec test wireshark
您必须监视 veth-a 接口。
小智 26
尝试
lsof -i -a -p `pidof firefox`
Run Code Online (Sandbox Code Playgroud)
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)。