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


14

我想跟踪命令的网络活动,我尝试了tcpdump和strace失败。

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

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

有没有办法做到这一点?

更新:

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


1
将应用程序放在网络名称空间中,然后使用tcpdump / wireshark。参见例如这里
dirkt'7

Answers:


17

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

您可以使用watch动态更新:

watch 'netstat -np --inet | grep "thunderbird"'

带有:

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

冗长的痕迹

您说您尝试过该strace工具,但您尝试过该选项trace=network吗?请注意,输出可能非常冗长,因此您可能需要进行grepping。您可以先在“ sin_addr”上grepping。

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

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

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

+1 netstat是恕我直言,最简单,最整洁的解决方案。
dr01年

@Gohu我对dnf也做同样的事情。但没有运气。我尝试使用dnf安装一些软件包,然后看到dnf进程正在运行(进程名:根据top和ps aux命令的dnf)。可悲的是,我没有从netstat -np --inet得到任何输出。grep“ dnf”。
Buvanesh Kumar

+1为str​​ace。解决了我的问题。我可以获取IP地址。非常感谢您的回答:) @Gohu。我猜它正在提供它通过网络到达的所有IP地址(例如,路由器IP和其他IP)。如果您知道,是否可以仅跟踪目标IP?
Buvanesh Kumar

您可以尝试进一步过滤strace输出,仅使用以下方法保留connect系统调用并删除dns请求(端口53):| grep connect | grep -v 'sin_port=htons(53)'
Gohu

+1对strace的跟踪网络选项
phreed


5

sysdig 使您可以随时监视内核或系统中运行的多个命令的所有活动,包括但不限于网络活动。

由于输出可能很大,因此您必须构建过滤器,最基本的过滤器的默认页面是可以理解的。

它还具有不像一样不用作应用程序包装的优点strace,并且功能非常强大。

Sysdig示例

联网

请参阅网络带宽使用情况中的顶级流程

sysdig -c topprocs_net 

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

作为二进制:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

作为ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

请参阅顶部的本地服务器端口:

就已建立的连接而言:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

在总字节数方面:

sysdig -c fdbytes_by fd.sport 

查看顶级客户端IP

就已建立的联系而言

sysdig -c fdcount_by fd.cip "evt.type=accept"   

在总字节数方面

sysdig -c fdbytes_by fd.cip 

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

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

1

您可以使用wireshark嗅探网络接口的所有输入和输出流量。如果您需要不带GUI的选项,则可以使用tshark。

使用这两个选项,您可以查看所有网络流量并保存,以供日后分析所有已建立的连接。


1
如前所述,如果我运行多个与网络相关的命令,那么我怎么知道哪个命令正在访问哪个站点?
Buvanesh Kumar'7

这是一个更通用的答案。我已经知道我们可以跟踪网络接口的网络活动了:)。我正在寻找跟踪特定的命令网络静态信息。
Buvanesh Kumar

如果您知道命令使用的端口,则可以过滤嗅探以将其限制为所需的命令。但是,根据您的情况,这可能不可行。
Ricard Molins
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.