Bardzo bym chciał, gdyby istniało jedno narzędzie wiersza poleceń do wykrywania pojedynczego polecenia w systemie Linux. coś takiego sniff dumpfile command
, abyś mógł po prostu uruchomić polecenie, które chcesz sniffować w terminalu i uzyskać zrzut pakietów gdzie indziej.
Chciałbym zrzucić / zapisać / zobaczyć tylko ruch sieciowy pojedynczego polecenia, które wprowadzam, a nie cały ruch TCP w moim pojedynczym interfejsie sieciowym. Gdybym więc był zalogowany na komputerze, a IRC działał w tle, i tak zrobiłem sniff somefile wget http://www.google.com
, chciałbym zobaczyć cały ruch sieciowy, jaki zrobiła komenda wget, aby pobrać http://www.google.com . Nie chcę, aby „jakiś czas” powodował, że ruch sieciowy IRC dezorientuje.
Istnieje wiele poleceń linux / unix, które akceptują inne polecenia i robią coś innego. Z sudo
(uruchom jako superużytkownik), nice
zmień niezły poziom, trickle
(ogranicz przepustowość polecenia)
Odpowiedzi:
Nic nie wiem, ale teoretycznie nie powinno być trudno uzyskać coś podobnego. Strace może służyć do przechwytywania połączeń sieciowych.
To da ci informacje o danych wysyłanych między jądrem a procesem. Wynik działania strace nie jest dokładnie tym, czego byś chciał. Jednak strace używa syscall ptrace do przechwytywania wywołań systemowych. Może być możliwe napisanie programu, który będzie wyświetlał dane nieco bardziej użytecznie.
Alternatywnie możesz przechwycić ładne przydatne gniazdo, powiązać i odsłuchać wywołania systemowe. Może być możliwe napisanie małego programu, który używał ptrace do tych wywołań i libpcap, aby dynamicznie zmieniać filtr przechwytywania za każdym razem, gdy otwierane jest nowe gniazdo.
źródło
Tracedump
Pobierz i opisz tutaj: http://mutrics.iitis.pl/tracedump
źródło
Spróbuj Wireshark - polecenie będzie
tshark
Czy naprawdę chcesz po prostu LSOF?
Nie sądzę, aby istniało narzędzie, które dynamicznie filtruje całą komunikację związaną z procesem. Możesz jednak spróbować śledzić komunikację procesową za pomocą takich narzędzi,
lsof
a gdy masz dobry filtr, który może odizolować komunikację tego procesu od całego ruchu w twoim systemie, możesz uzyskać prawidłowe przechwytywanie.Na przykład przy
wget
zwykle docelowym adresie IP różni się od innego ruchu związanego z procesem. Nawet jeśli weźmiesz coś takiego,skype
docelowy zakres portów jest zwykle ustalony dla instancji.To trochę przypomina zasadę nieoznaczoności. Zazwyczaj możesz wiedzieć, co przechodzi przez zestaw ścieżek komunikacyjnych (z filtrem sniffera filtrującym zidentyfikowaną grupę przepływów) lub gdzie tworzone są różne łącza komunikacyjne (z lsof).
Naprawdę chciałbym wiedzieć, czy można zrobić jedno i drugie dla aplikacji. Myślę, że to powinno być wykonalne. Ale nie widziałem jeszcze żadnego narzędzia, które to robi.
źródło
Naucz się korzystać z wyrażeń filtrujących.
Chociaż nie zrobi to fantazyjnych śladów, o które prosisz.
Pozwoli ci to usunąć prawie wszystkie „mylące rzeczy jak IRC” z przechwytywania.
Dodatkowo bardzo przydatna jest znajomość składni filtra, aby w przyszłości móc ją szybko znaleźć.
źródło
W szczególności w przypadku przeglądarki internetowej / strony internetowej coś takiego jak wtyczka Firebug dla Firefoksa może dostarczyć Ci niektórych informacji, których szukasz: http://getfirebug.com/net.html
W przypadku bardziej ogólnych aplikacji może być konieczne użycie polecenia netstat do identyfikacji portów używanych przez aplikację, a następnie Wireshark / tshark / dtrace z filtrem, aby przechwycić tylko ten ruch. Jednak nie jedna odpowiedź, której szukasz ...
źródło
Jeden pomysł, wypróbuj VMWare
-setup vm
-konfiguruj ten vm, aby używał określonego interfejsu
-sniff na tym interfejsie z hosta (to jest jak człowiek w środku ataku)
Jeśli wyodrębnisz, jakie aplikacje sieciowe działają na tym vm, być może otrzymasz odpowiedź
Wydaje mi się, że bardziej idealnym rozwiązaniem jest robienie tego, co robi VMWare, jeśli chodzi o sposób, w jaki wybiera interfejs do rozmowy. Myślę, że jego magia pochodzi z modułów jądra, których używa, w tym przypadku prawdopodobnie z modułu jądra vmnet.
O ile wiem, aplikacje nie wiedzą, o którym interfejsie rozmawiają i wierzę, że jest to zgodne z projektem; nie powinni się martwić o takie rzeczy.
Co więcej,
być może program już istnieje, nie wiem. Ale jeśli jeden został napisany, możesz nazwać go nettrace (na przykład), a użycie może być podobne
interfejs programu nettrace
następnie wąchaj używany interfejs i dodaj trasy (może robi to automatycznie) do twojego prawdziwego interfejsu
źródło
Zakładając, że jesteś jedyną osobą próbującą połączyć się z Google w tym czasie, pomyślałbym, że coś takiego powinno wystarczyć:
tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80
Jeśli nie jesteś jedynym połączeniem próbującym połączyć się z Google na urządzeniu, to jeśli możesz zidentyfikować adres IP / port, z którego się łączysz, możesz również określić port src / src ip.
Identyfikacja portu src może stanowić problem, chyba że możesz określić go na dowolnym kliencie, którego używasz. Nie jestem pewien, czy możesz z wget.
Podejrzewam, że możesz podać porty zarówno src, jak i dst,
netcat
więc jeśli naprawdę interesowałeś się google, możesz wykonać GET (ręcznie) przez netcat.Oczywiście strona podręcznika da ci szczegóły
źródło
Strona podręcznika tcpdump i wiele stron internetowych zawiera szczegółowe przykłady filtrów, a nawet kilka repozytoriów online wyrażeń filtrów tcpdump. Powinien być w stanie zrobić prawie wszystko, o czym marzysz, zakładając, że wiesz coś o ruchu w sieci (źródło, miejsce docelowe, porty, protokoły itp.) Poza tym, co program go generuje.
Jeśli pracujesz na serwerze lub urządzeniu bez głowy, zawsze możesz poprosić tcpdump o napisanie pliku zrzutu, a następnie otwarcie go w Wireshark na stacji roboczej i uzyskanie zaawansowanego filtrowania i interfejsu graficznego.
źródło
Być może ten skrypt zrobi co chcesz z odpowiednimi modyfikacjami polecenia tshark:
Przeczytaj plik zrzutu później:
źródło
Dtrace powinien na to pozwolić, chociaż nie wiem, czy jest już w Linuksie.
źródło