Я пытаюсь сбросить вывод со всех моих интерфейсов. Вот что у меня так далеко:

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

Я хотел бы иметь что-то вроде:

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

где {} - это то, что передается в трубе.

ОБНОВИТЬ:

Вот пример выходных данных 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

awk выведет имя интерфейса, которое мне нужно передать в tcpdump.

Эквивалентный запуск приведенного выше кода будет:

tcpdump -i em0
tcpdump -i em0.0

Как я могу передать в tcpdump в одну строку?

2 ответа2

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
0

Я пытаюсь сбросить вывод со всех моих интерфейсов.

Есть ли какая-то причина, по которой вы не просто используете специальное устройство с именем any? IE tcpdump -i any .

http://www.tcpdump.org/tcpdump_man.html -i interface

Слушай по интерфейсу. Если не указано, tcpdump ищет в системном списке интерфейсов настроенный интерфейс с наименьшим номером (исключая обратную связь), который может оказаться, например, eth0''. On Linux systems with 2.2 or later kernels, an interface argument of версии 2.2 или новее для захвата пакетов со всех интерфейсов можно использовать аргумент интерфейса любого ''. Обратите внимание, что захват на любом устройстве не будет выполняться в случайном режиме.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .