Próbowałem tego:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Potrzebuję tylko części ascii. Jak usunąć resztę?
Próbowałem tego:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Potrzebuję tylko części ascii. Jak usunąć resztę?
Odpowiedzi:
Jak sugeruje Josh, tcpflow może wydrukować tylko dane pakietu TCP do pliku lub STDOUT. Możesz potokować tcpdump do tcpflow w następujący sposób:
tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
Aby wyświetlić tylko jedną stronę konwersacji, możesz użyć filtrów dla tcpdump, np dst port 23
.
tcpflow
jako root?
Nie jestem pewien dokładnej składni tcpdump
... w rzeczywistości zaznaczyłem to pytanie jako ulubione, ponieważ chciałbym wiedzieć! Ale jako alternatywne rozwiązanie możesz spróbować użyć tcpflow
zamiast tego. Działa zasadniczo w ten sam sposób, ale drukuje dane wyjściowe ASCII znacznie lepiej; wykluczył nagłówki i drukuje pakiety sekwencyjnie jako przepływ, dzięki czemu łatwiej jest je czytać i śledzić czasami niż tcpdump
.
Wydaje mi się, że najbardziej eleganckim rozwiązaniem jest porzucenie tcpdump. Żadnych rur jakiegokolwiek rodzaju:
tcpflow -c port 6667
I to wszystko.
Szybkim i brudnym sposobem na to jest filtrowanie danych wyjściowych przez ciągi:
tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
Czasami nie masz innych narzędzi i wystarczy rzucić okiem na ładowność. Oczywiście nie jest dobrze, jeśli potrzebujesz dokładnego ładunku do wstrzyknięcia lub dokładnej analizy.
Jeśli potrzebujesz tylko części ASCII, możesz użyć: tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g'
lub z ngrep:ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'