Zrzuć ruch sieciowy pojedynczej aplikacji (podobny do strace)

11

Szukam sposobu na zrzucenie pcap danych sieciowych wygenerowanych przez aplikację, w podobny sposób stracezrzuca połączenia systemowe itp. Np .:

net-strace somecommand -args

somecommandzrobiłby coś przez sieć i net-stracezaoszczędziłby zrzut pcap całego ruchu generowanego przez tę aplikację (+ odpowiedzi i związany z tym ruch).

Czy można to osiągnąć?

gesti
źródło
Problem polega na tym, że aplikacje nie wysyłają pakietów (z wyjątkiem tych, które używają gniazd surowych, takich jak ping), ale używają sieciowego interfejsu API, który powoduje, że jądro wysyła pakiety (i odbiera pokrewne) w ich imieniu.
Stéphane Chazelas,
Tak, ale istnieją aplikacje (np. Proxy --ains - proxyychains.sourceforge.net ), które uruchamiają wszystkie dane aplikacji przez proxy. Nie wiem, jak to robią, ale mogą je przechwycić i wysłać przez serwer proxy. Być może jeśli istnieje prosty serwer proxy (uruchamiany lokalnie), który może zrzucić pcap, do uzyskania zrzutu można użyć kombinacji proxy + proxy.
gesti
Bardziej prawdopodobne jest, że przechwytują API (z LD_PRELOAD) niż pakiety. To powiedziawszy, może być w stanie wstrzyknąć niektóre setsockopt (SO_MARK) do aplikacji i użyć netfilter do zalogowania pakietów do ulog.
Stéphane Chazelas,
3
Utwórz nową przestrzeń nazw sieci dla aplikacji i przechwytuj cały ruch, ponieważ może być akceptowalne podejście w niektórych przypadkach użycia.
Stéphane Chazelas,

Odpowiedzi:

3

Co powiesz na użycie samego strace?

strace -f -e trace=network -o output_file -s 10000 somecommand -args
Christian Long
źródło
Podany wiersz polecenia wyświetla tylko żądania DNS. -eOpcja strace często nie wybiera tego, czego naprawdę chcesz.
Robin Green,
2

Możesz zrzucić ruch generowany przez aplikację różnymi metodami:

Jeśli znasz porty, z których korzysta aplikacja, możesz uruchomić program tcpdump lub wireshark z określonymi regułami filtrowania dla tych portów.

Jeśli nie jest to możliwe, możesz oznaczyć pakiety aplikacji za pomocą reguły iptables , dopasowując właściciela procesu. Może być konieczne utworzenie nowego konta użytkownika, aby całkowicie odizolować proces. Następnie możesz przechwycić ruch zgodny tylko z regułą.

Więcej pełnych informacji na ten temat można znaleźć: /ubuntu/11709/how-can-i-capture-network-traffic-of-a-single-process

Interesujący może być również ten tracedump programu, jak stwierdzono w poprzednim temacie. http://mutrics.iitis.pl/tracedump

jałmużna
źródło