Bash Sed管道指挥单线


0

我正在尝试从我的所有接口转储输出。这是我到目前为止所得到的:

ifconfig | awk '{print $1}' | sed s'/.$//'

我希望有类似的东西:

ifconfig | awk '{print $1}' | sed s'/.$//' | tcpdump -i {} -c 1

其中{}是管道中传递的内容。

更新:

这是ifconfig的示例输出:

em0:encaps:ether; 框架:以太
        标志= 0x3 /为0x8000 
        curr media:i802 2:0:0:1:0:4
em0.0:flags = 0x8000 
        inet primary mtu 1500 local = 129.16.0.1 dest = 128.0.0.0 / 2 bcast = 191.255.255.255
        tnp primary mtu 1500 local = 17825796

awk将打印出我需要传递给tcpdump的接口名称。

以上代码的等效运行将是:

tcpdump -i em0
tcpdump -i em0.0

如何在一行中输出tcpdump?


如果只有一个接口,这将是正确的。不幸的是,所有系统至少有2个:)
user3063045 2016年

你可以提供ifconfig的示例输出和{}到tcpdump的预期内容吗?
guest-vm

Answers:


1
ifconfig | grep -Po“^ [^ \ s:] +”| 同时阅读; 做tcpdump -i $ if; DONE
#tcpdump -i em0
#tcpdump -i em0.0

tcpdump`ifconfig | grep -Po“^ [^ \ s:] +”| sed“s / ^ /  -  i /”`
#tcpdump -i em0 -i em0.0

0

我正在尝试从我的所有接口转储输出。

你有没有理由不使用名为的特殊设备any?IE 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可能会使用任何''来捕获来自所有接口的数据包。请注意,“任何”设备上的捕获将不会以混杂模式完成。


很好的想法,但它在我的tcpdump版本中不可用。
user3063045

什么版本的tcpdump,你运行的操作系统是什么?这几乎肯定非常重要,因为'ifconfig'的输出并非在所有* nix系统中完全标准化。
Zoredache 2016年

-i不只是通过所有接口循环。我试过OSX和CentOS,如果我没有输入接口名称就会出错
user3063045
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.