如何跟踪命令的网络活动?

Buv*_*mar 20 linux networking tcpdump strace wireshark

我想跟踪一个命令的网络活动,我尝试了 tcpdump 和 strace 没有成功。

例如,如果我正在安装一个软件包或使用任何试图访问某个站点的命令,我想查看该网络活动(它试图访问的站点)。

我想我们可以通过使用 tcpdump 来做到这一点。我试过了,但它正在跟踪我系统的所有网络活动。假设我运行多个与网络相关的命令并且我只想跟踪特定的命令网络活动,那么此时很难找到确切的解决方案。

有没有办法做到这一点?

更新:

我不想跟踪我的网络接口上的所有内容。我只想跟踪命令(例如#yum install -y vim)网络活动。例如它试图到达的站点。

Goh*_*ohu 27

为简单起见,netstat

netstat在 PID 或进程名称上使用和 grepping:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird
Run Code Online (Sandbox Code Playgroud)

您可以watch用于动态更新:

watch 'netstat -np --inet | grep "thunderbird"'
Run Code Online (Sandbox Code Playgroud)

和:

  • -n: 显示数字地址而不是尝试确定符号主机、端口或用户名
  • -p: 显示每个socket所属的程序的PID和名称。
  • --inet: 只显示 raw、udp 和 tcp 协议套接字。

冗长的strace

你说你试过这个strace工具,但你试过这个选项trace=network吗?请注意,输出可能非常冗长,因此您可能需要进行一些 grepping。您可以从搜索“sin_addr”开始。

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr
Run Code Online (Sandbox Code Playgroud)

或者,对于已经运行的进程,使用 PID:

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr
Run Code Online (Sandbox Code Playgroud)


Rui*_*iro 8

sysdig 允许您一次性监控内核或系统中运行的多个命令的所有活动,包括但不限于网络活动。

由于输出可能很大,您必须构建过滤器,最基本的过滤器的默认页面非常容易理解。

它还具有不像 中那样用作应用程序包装器的优点strace,并且它可以非常强大。

来自Sysdig 示例

联网

查看网络带宽使用率最高的进程

sysdig -c topprocs_net 
Run Code Online (Sandbox Code Playgroud)

显示与主机 192.168.0.1 交换的网络数据

作为二进制:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   
Run Code Online (Sandbox Code Playgroud)

作为 ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 
Run Code Online (Sandbox Code Playgroud)

查看顶级本地服务器端口:

在已建立的连接方面:

sysdig -c fdcount_by fd.sport "evt.type=accept"   
Run Code Online (Sandbox Code Playgroud)

在总字节数方面:

sysdig -c fdbytes_by fd.sport 
Run Code Online (Sandbox Code Playgroud)

查看顶级客户端 IP

在已建立的连接方面

sysdig -c fdcount_by fd.cip "evt.type=accept"   
Run Code Online (Sandbox Code Playgroud)

在总字节数方面

sysdig -c fdbytes_by fd.cip 
Run Code Online (Sandbox Code Playgroud)

列出所有不由 apache 提供服务的传入连接。

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
Run Code Online (Sandbox Code Playgroud)


Sim*_*ter 7

我会创建一个新的网络命名空间,将其桥接到真实网络,然后使用tcpdump.

  • 谢谢你的回答。如果你告诉我怎么做,那就太好了:)。 (3认同)