2016-10-06 12 views
1

Я хочу использовать tshark, чтобы найти пункт назначения или источник ip, который не является моим. Для этого я использую (ip-ifconfig дает свой IP от ifconfig)Как добавить трубку после функции tshark tshark pipe

# tshark -T fields -e ip.addr -E aggregator=" " | sed "s/$(ip-ifconfig)//" 
tshark: Lua: Error during loading: 
[string "/usr/share/wireshark/init.lua"]:44: dofile has been disabled due to running Wireshark as superuser. See https://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user. 
Capturing on 'wlp3s0' 
**5500** 

я получаю количество пойманных пакетов. Вместо этого я хочу использовать IP.

Возможно, с выходом awk может потребоваться выход.

Вывод этой команды без трубы с sed список IP-адресов

ответ

1

командной sed "s/$(ip-ifconfig)//" просто заменяет IP-адрес с пустой строкой. Это, вероятно, не то, что вы хотите. Кроме того, я не знаю команду ip-ifconfig, я предполагаю, что она дает вам один IP-адрес.

Грубым способом достижения этого было бы подавление всех строк, содержащих ваш IP-адрес, например. один из следующих двух примеров:

tshark -T fields -e ip.addr -E aggregator=" " | grep -v "$(ip-ifconfig)" 
tshark -T fields -e ip.addr -E aggregator=" " | sed "/$(ip-ifconfig)/d" 

Это решение не очень надежное. Если ваш IP-адрес равен 192.168.1.1, то вышеприведенный шаблон также будет соответствовать 192.168.1.10 или 192.168.1.123. Вы можете сопоставить целое слово с угловыми скобками:

tshark -T fields -e ip.addr -E aggregator=" " | grep -vE "\<$(ip-ifconfig)\>" 
tshark -T fields -e ip.addr -E aggregator=" " | sed "/\<$(ip-ifconfig)\>/d" 

Это должно работать большую часть времени. Обратите внимание, что точка в IP-адресе в идеале должна быть экранирована, иначе она будет использоваться как символ совпадения в регулярном выражении.

Наконец, вы можете просто использовать фильтр отображения в tshark:

tshark -T fields -e ip.addr -E aggregator=" " -Y "ip.addr != $(ip-ifconfig)" 

Это позволяет строить достаточно сложные фильтры.

1

Я искал tshark -l.

-l  Flush the standard output after the information for each packet is printed. (This is not, strictly speaking, line-buffered if -V was specified; however, it is the same as line- 
      buffered if -V wasn't specified, as only one line is printed for each packet, and, as -l is normally used when piping a live capture to a program or script, so that output for a 
      packet shows up as soon as the packet is seen and dissected, it should work just as well as true line-buffering. We do this as a workaround for a deficiency in the Microsoft 
      Visual C++ C library.) 

      This may be useful when piping the output of TShark to another program, as it means that the program to which the output is piped will see the dissected data for a packet as soon 
      as TShark sees the packet and generates that output, rather than seeing it only when the standard output buffer containing that data fills up.