ifconfig | grep -Po "^[^\s:]+" | while read if; do 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
Estou tentando despejar a saída de todas as minhas interfaces. Isso é o que eu tenho até agora:
ifconfig | awk '{print $1}' | sed s'/.$//'
Eu gostaria de ter algo como:
ifconfig | awk '{print $1}' | sed s'/.$//' | tcpdump -i {} -c 1
em que {} é o que é passado no pipe.
ATUALIZAÇÃO:
Aqui está um exemplo de saída do ifconfig:
em0: encaps: ether; framing: ether flags=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
o awk irá imprimir o nome da interface que eu preciso passar para o tcpdump.
A execução equivalente do código acima seria:
tcpdump -i em0
tcpdump -i em0.0
Como posso enviar o pipe para o tcpdump em uma linha?
I'm trying to dump output from all of my interfaces.
Existe algum motivo para você não usar apenas o dispositivo especial chamado any
? IE tcpdump -i any
.
http://www.tcpdump.org/tcpdump_man.html -i interface
Listen on interface. If unspecified, tcpdump searches the system interface list for the lowest numbered, configured up interface (excluding loopback), which may turn out to be, for example,
eth0''. On Linux systems with 2.2 or later kernels, an interface argument of
any'' can be used to capture packets from all interfaces. Note that captures on the ''any'' device will not be done in promiscuous mode.