Bash Sed Pipe para comandar o One-Liner

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?

    
por user3063045 30.06.2016 / 21:15

2 respostas

1
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
    
por 01.07.2016 / 00:19
0

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 ofany'' can be used to capture packets from all interfaces. Note that captures on the ''any'' device will not be done in promiscuous mode.

    
por 30.06.2016 / 21:46

Tags