Monitoruj liczbę bajtów przesłanych do / z adresu IP na porcie

19

Czy ktoś może polecić narzędzie wiersza polecenia systemu Linux do monitorowania liczby bajtów przesłanych między serwerem lokalnym a określonym adresem IP / portem.

Odpowiednikiem polecenia tcpdump byłoby:

tcpdump -s 0 -i any -w mycapture.trc port 80 host google.com

które wyjścia:

46 packets captured
131 packets received by filter
0 packets dropped by kernel

Chciałbym coś podobnego, co daje:

54 bytes out, 176 bytes in

Chciałbym, żeby działał na RHEL i był darmowy / open-source. Byłoby dobrze, gdyby istniało narzędzie, którego mi też brakowało!

Mikrofon
źródło

Odpowiedzi:

14

Możesz użyć iptables. Jeśli jeszcze go nie używasz, możesz użyć otwartej konfiguracji Akceptuj, ale masz regułę do liczenia.

Na przykład w RHEL twój /etc/sysconfig/iptablesplik może wyglądać mniej więcej tak:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -j INPUT
-A INPUT -s 10.10.1.1 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 10.10.1.1 -p tcp -m tcp --dport 80 -j ACCEPT

Gdzie 10.10.1.1:80 jest hostem: port, do którego chcesz policzyć ruch (nie możesz użyć nazwy hosta). Następnie możesz sprawdzić ruch liczony za pomocą polecenia iptables -nvxLjako root.

Przykładowe dane wyjściowe:

Chain INPUT (policy ACCEPT 7133268 packets, 1057227727 bytes)
    pkts      bytes target     prot opt in     out     source               destination     
 7133268 1057227727 ACCEPT     tcp  --  *      *       10.10.1.1            0.0.0.0/0              tcp spt:80


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination     
       0          0 INPUT      all  --  *      *       0.0.0.0/0            0.0.0.0/0       

Chain OUTPUT (policy ACCEPT 7133268 packets, 1057227727 bytes)
    pkts      bytes target     prot opt in     out     source               destination     
 7133268 1057227727 ACCEPT     tcp  --  *      *       0.0.0.0/0            10.10.1.1              tcp dpt:80
brent
źródło
7
Jest również całkowicie legalne, aby mieć regułę bez celu, wyłącznie do celów zliczania, np. Iptables -A WEJŚCIE -d 1.2.3.4 -p tcp --port 3456. Nie zrobi nic z ruchem, ponieważ nie ma argumentu „-j”, ale każdy pasujący pakiet spowoduje wzrost liczby.
MadHatter obsługuje Monikę
9

Właśnie miałem zasugerować wireshark (ponieważ ma wiele funkcji „ konwersacji ”), ale nie jest to narzędzie wiersza polecenia. Możesz jednak wypróbować tshark , narzędzie do analizy wiersza poleceń, które jest bliskie do wireshark. Dane wyjściowe powinny zawierać (nieco) to, czego szukasz (przykład poniżej):

tshark -R "ip.addr == 10.2.3.67" -z conv,ip -p -f "tcp port 22"

Wynik:

                                     |       <-      | |       ->      | |     Total     |
                                     | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
10.2.3.23           <-> 10.2.3.67        42     15341      35      4890      77     20231
l0c0b0x
źródło
7

Istnieje również narzędzie o nazwie „iftop”, które wyświetla wykorzystanie przepustowości interfejsu przez host. Myślę, że iftop może robić to, co opisałeś, ale zwykle jego interfejs to coś w rodzaju „top”.

Na przykład, myślę, że możesz po prostu utworzyć plik konfiguracyjny, aby podać swój kod filtru.

Oto mój kod filtru w moim pliku konfiguracyjnym.

$ cat /tmp/conf
filter-code: port http and host google.com

Następnie wykonałem następujące czynności, aby zobaczyć ruch w sieci.

$ sudo iftop -c /tmp/conf

Nie jestem pewien, czy jest to najlepsza opcja, ale na pewno jeden ze sposobów na osiągnięcie tego, czego potrzebujesz. HTH.

istudy0
źródło
3
Możesz także określić filtr w wierszu poleceń bez użycia pliku konfiguracyjnego:iftop -f 'port 80 and host google.com'
gioele
Op „d jak całości przeniesione bajty, a nie bandwidth.Can iftoppokazują, że?
arainone
3

Możesz także wypróbować „iptraf”, jest lekki i prosty. Może filtrować według portu i zapewnia informacje na wysokim poziomie, brak danych ładunku itp.

dixie_flatline
źródło