我正在尝试转储所有接口的输出。这是我目前得到的结果:
ifconfig | awk '{print $1}' | sed s'/.$//'
我想要类似的东西:
ifconfig | awk '{print $1}' | sed s'/.$//' | tcpdump -i {} -c 1
其中 {} 是管道中传递的内容。
更新:
以下是 ifconfig 的示例输出:
em0:封装:以太;帧:以太 标志=0x3/0x8000 当前媒体:i802 2:0:0:1:0:4 em0.0:标志=0x8000 inet 主 mtu 1500 本地=129.16.0.1 目标=128.0.0.0/2 bcast=191.255.255.255 tnp 主 mtu 1500 本地=17825796
awk 将打印出我需要传递给 tcpdump 的接口名称。
上述代码的等效运行如下:
tcpdump -i em0
tcpdump -i em0.0
我怎样才能用一行输出到 tcpdump?
答案1
ifconfig | grep -Po "^[^\s:]+" | 读取时如果;执行 tcpdump -i $if;完成 # tcpdump -i em0 # tcpdump -i em0.0 tcpdump `ifconfig | grep -Po“^[^\s:]+”| sed“s/^/-i /”` # tcpdump -i em0 -i em0.0
答案2
我正在尝试转储所有接口的输出。
有什么原因导致您不直接使用名为any
? 的特殊设备tcpdump -i any
。
http://www.tcpdump.org/tcpdump_man.html -i 接口
监听接口。如果未指定,tcpdump 将在系统接口列表中搜索编号最小、已配置的接口(不包括环回接口),例如,
eth0''. On Linux systems with 2.2 or later kernels, an interface argument of
可以使用 any'' 来捕获来自所有接口的数据包。请注意,在混杂模式下不会对“any”设备进行捕获。