Chcę w prosty sposób pokazać wszystkie dane TCP (nie nagłówki TCP ani nic innego) przechodzące przez dowolny interfejs w moim Linux-ie.
Na przykład chcę magicznego polecenia, które jeśli zrobię:
magic_commmand_I_want port=1234
to jeśli na moim komputerze był serwer nasłuchujący na porcie 1234 i ktoś to zrobił:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port
Wtedy magiczne polecenie wydrukuje się po prostu:
hello
Próbowałem „tcpdump”, „ethereal”, „tethereal”, „tshark” i innych, ale nie jest oczywiste, jak je zdobyć:
- nie pokazuj adresów IP ani innych metadanych
- pokazują tylko wysyłane „dane”, a nie poszczególne pakiety i ich nagłówki
- wydrukuj dane takie, jakie są, nie w postaci szesnastkowej i nie ze znacznikami przesunięcia pakietu
- powąchać cały ruch sieciowy (czy to na eth0 lub eth1 lub LO , etc ...)
Tak, prawdopodobnie możesz połączyć ze sobą szereg poleceń unixowych, aby to zrobić, ale nie jest to łatwe do zapamiętania następnym razem :)
Jeśli masz prosty przykład wiersza polecenia, który to robi, właśnie tego chciałbym.
linux
networking
Dustin Boswell
źródło
źródło
Odpowiedzi:
Aktualizacja:
Jak zauważył Michał w komentarzach: Od wersji tcpflow 1.3 opcja -e służy do określania nazwy skanera. Tak więc drukowany jest błąd „Nieprawidłowa nazwa skanera„ 8983 ”. Prawidłowe polecenie to
sudo tcpflow -i any -C -J port 1234
(również
-J
został zmieniony na-g
w najnowszej wersji)Dzięki Yves za wskazanie mi „ tcpflow ”. Oto linia poleceń:
To robi wszystko, co chcę
„
-C
” Mówi mu, aby zrzucił konsolę zamiast pliku. „-e
” Włącza kolory, więc klient-> serwer i serwer-> klient są wizualnie różne.Zainstalowałem tcpflow po prostu robiąc
źródło
-e
opcja służy do określania nazwy skanera. Tak więc drukowany jest błąd „Nieprawidłowa nazwa skanera„ 8983 ”. Prawidłowe polecenie tosudo tcpflow -i any -C -J port 1234
-J
zmieniono na-g
w najnowszych wersjach.socat to narzędzie, o które prosisz. Może działać jako proxy:
wówczas aplikacja musi podłączyć port 4444 zamiast bezpośrednio połączyć się z 1234
Opcja -v umożliwia socat wydrukowanie wszystkiego, co otrzymuje na standardowym błędzie (stderr).
Aktualizacja:
Jeśli socat nie jest dostępny na twoim komputerze, możesz nadal emulować go w ten sposób za pomocą netcat:
zastrzeżenia: ta opcja jest jednokierunkowa. druga instancja netcat wydrukuje każdą odpowiedź z twojego serwera na standardowe wyjście. Nadal możesz to zrobić:
źródło
Wypróbuj Wireshark . To doskonały analizator protokołów przeznaczony zarówno dla systemu Linux, jak i Windows.
źródło
tcpflow jest tym, czego chcesz. Wyciąg ze strony podręcznika:
Skonfiguruj połączenie między aplikacją a serwerem. Gdy połączenie jest uruchomione, tcpflow nadal może przechwytywać z niego dane Na przykład:
Wszystkie dane będą przechowywane w pliku o nazwie 127.000.000.001.48842-127.000.000.001.05555.
Nadal możesz przekierować to na standardowe wyjście z opcją -Cs. Przeczytaj stronę podręcznika, aby zagrać z ekspresją, aby dostroić paquety, które chcesz przechwycić przez tcpflow.
źródło
ngrep
jest do tego bardzo miły. Do wyszukania w pakietach potrzebny jest ciąg BPF i ciąg opcjonalny, a następnie zrzut zawartości pakietu do ekranu w całkiem przydatnym formacie. Opcjonalnie zrzuca również plik pcap_dump, który można później dokładniej zbadać w Wireshark.źródło
Spójrz na Chaosreader . Chociaż robi to nieco więcej, niż prosisz i nieco inaczej, prawdopodobnie możesz zmodyfikować jego kod, aby zrobić to, co chcesz.
źródło
Może na przykład możesz napisać opakowanie dla tcpdump, które usunie wszystkie zbędne informacje
źródło