我想跟踪命令的网络活动,我尝试了 tcpdump 和 strace 但没有成功。
例如,如果我正在安装一个软件包或使用任何尝试访问某个站点的命令,我想查看该网络活动(它尝试访问的站点)。
我想我们可以使用 tcpdump 来做到这一点。我尝试过,但它正在跟踪我系统的所有网络活动。假设我运行多个与网络相关的命令,并且我只想跟踪特定的命令网络活动,那么那时很难找到确切的解决方案。
有没有办法做到这一点?
更新:
我不想跟踪我的网络接口上发生的所有事情。我只想跟踪命令(例如#yum install -y vim)网络活动。例如它试图到达的站点。
答案1
为了简单起见,netstat
使用netstat
和 grep 查找 PID 或进程名称:
# 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
:显示每个socket所属程序的PID和名称。--inet
:仅显示raw、udp和tcp协议套接字。
strace 的冗长程度
您说您尝试过该strace
工具,但您尝试过该选项trace=network
吗?请注意,输出可能非常详细,因此您可能需要进行一些 grep 操作。您可以从 grep “sin_addr”开始。
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
答案2
我会创建一个新的网络命名空间,将其桥接至真实网络,然后使用 监控桥接tcpdump
。
答案3
sysdig
允许您监控内核的所有活动或系统中运行的多个命令的所有活动,包括但不限于网络活动。
由于输出可能很大,您必须构建过滤器,最基本的过滤器的默认页面非常容易理解。
它还有一个优点,它不像 中那样用作应用程序包装器strace
,并且它可以非常强大。
联网
查看网络带宽使用率最高的进程
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"
答案4
您可以使用wireshark来嗅探网络接口的所有输入和输出流量。如果您需要没有 GUI 的选项,您可以使用 tshark。
使用这两个选项,您都可以查看所有网络流量并将其保存以供以后分析建立的所有连接。