Próbuję rozwiązać problem polegający na tym, że w urządzeniu mam tylko tcpdump. Chcę użyć tcpdump do filtrowania ruchu w sieci i wyświetlania tylko ruchu zawierającego określone ciągi.
Wykonuję następujące czynności:
tcpdump -nei eth0 -X | grep "something interesting"
Dane wyjściowe to widok szesnastkowy z 16 bajtami wiersza pr. Nie mogę grepować tych danych, ponieważ dane są prezentowane w wielu wierszach.
Czy istnieje sposób, aby tcpdump prezentował przechwycone dane w jednym wierszu? Umożliwiłoby to użycie grep do znalezienia interesujących pakietów.
linux
networking
tcpdump
Pies je świat kotów
źródło
źródło
tcpdump -nei eth0 -X | grep --line-buffered "something interesting"
zrobi, z powodów, których nie zauważyłem, moja ważna robocza odpowiedź została usunięta.Odpowiedzi:
Dla tych, którzy nie mogą używać
ngrep
, oto jak użyć,awk
abytcpdump
wyjście zawartości pakietu było grepowalne.Najpierw kilka przykładowych danych wyjściowych dostarczonych przez
tcpdump -x
, aby przedstawić zadanie przed:I jest to skrypt do skopiowania i wklejenia, do
awk
którego możesz przesłać dane wyjściowew celu uzyskania następującego grepowalnego wyniku
Poniżej znajduje się skomentowana wersja powyższego skryptu:
źródło
Z strony
tcpdump
podręcznika:Upewnij się, że korzystasz z
-s 0
opcji, aby upewnić się, że cały pakiet jest wyświetlany.źródło
Możesz rzucić okiem na
ngrep
polecenie:ngrep -W single -d eth0 'regex to match' 'port 80'
Gdzie:
-W single
określa formatowanie jednowierszoweregex to match
oznacza zrzucanie tylko pakietów zawierających określony ciąg znaków.'port 80'
to filtr pcap do wąchania tylko pakietów z lub do portu 80źródło
Powodem, dla którego dane wyjściowe jest hex, jest
-X
flaga. Próbować:Dostaniesz czytelne dane wyjściowe bezpośrednio do cli.
źródło
Nie mogłem zmusić skryptu awk do zrobienia tego, co chciałem, a ngrep nie działałby w sieci Ethernet przez USB, więc napisałem mały program w C, który dołącza do wyjścia wiersza przez tcpdump, aby były grepowe. Jest na https://gitlab.com/dargaud/TcpDumpJoin
źródło