Überwachen Sie die Anzahl der Bytes, die an die / von der IP-Adresse am Port übertragen wurden

19

Kann jemand ein Linux-Kommandozeilen-Tool empfehlen, um die Anzahl der zwischen dem lokalen Server und einer bestimmten IP-Adresse / einem bestimmten Port übertragenen Bytes zu überwachen.

Der äquivalente Befehl tcpdump wäre:

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

welche Ausgänge:

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

Ich möchte etwas Ähnliches, das ausgibt:

54 bytes out, 176 bytes in

Ich möchte, dass es auf RHEL läuft und frei / quelloffen ist. Es wäre gut, wenn es ein vorhandenes Tool gäbe, das mir auch gefehlt hat!

Mike
quelle

Antworten:

14

Sie könnten iptables verwenden. Wenn Sie es noch nicht verwenden, können Sie eine offene Accept-Konfiguration verwenden, für die Zählung ist jedoch eine Regel vorhanden.

Auf RHEL könnte Ihre /etc/sysconfig/iptablesDatei beispielsweise so aussehen:

*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

Wobei 10.10.1.1:80 der Host: Port ist, an dem der Datenverkehr gezählt werden soll (Sie können keinen Hostnamen verwenden). Sie können dann den mit dem Befehl iptables -nvxLals root gezählten Datenverkehr überprüfen .

Beispielausgabe:

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
quelle
7
Es ist auch völlig legal, eine Regel ohne Ziel zu haben, und zwar ausschließlich zu Zählzwecken, z. B. iptables -A INPUT -d 1.2.3.4 -p tcp --dport 3456. Es wird nichts mit dem Datenverkehr zu tun haben, da es kein "-j" Argument gibt, aber jedes übereinstimmende Paket wird die Anzahl erhöhen.
MadHatter unterstützt Monica
9

Ich wollte gerade Wireshark vorschlagen (da es viele " Konversations " -Funktionen gibt), aber es ist kein Befehlszeilen-Tool. Sie können auch tshark ausprobieren , ein Kommandozeilen-Analysetool, das sich in der Nähe von wireshark befindet. Die Ausgabe sollte (etwas) das haben, wonach Sie suchen (Beispiel unten):

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

Ergebnis:

                                     |       <-      | |       ->      | |     Total     |
                                     | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
10.2.3.23           <-> 10.2.3.67        42     15341      35      4890      77     20231
l0c0b0x
quelle
7

Es gibt auch ein Tool namens "iftop", das die Bandbreitennutzung auf einer Schnittstelle nach Host anzeigt. Ich denke, iftop kann das tun, was Sie beschrieben haben, aber normalerweise ist die Benutzeroberfläche so etwas wie "top".

In Ihrem Beispiel können Sie also einfach eine Konfigurationsdatei erstellen, um Ihren Filtercode bereitzustellen.

Also hier ist mein Filter-Code in meiner Konfigurationsdatei.

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

Anschließend habe ich Folgendes ausgeführt, um das Netzwerk-Traffice anzuzeigen.

$ sudo iftop -c /tmp/conf

Ich bin mir nicht sicher, ob dies die beste Option ist, aber auf jeden Fall eine Möglichkeit, das zu erreichen, was Sie brauchen. HTH.

istudy0
quelle
3
Sie können den Filter auch in der Befehlszeile angeben, ohne eine Konfigurationsdatei zu verwenden:iftop -f 'port 80 and host google.com'
gioele
Op möchte die Summe der übertragenen Bytes, nicht die Bandbreite. Kann das iftopzeigen?
Arainone
3

Sie können auch "iptraf" ausprobieren, es ist leicht und einfach. Es kann nach Port filtern und bietet Ihnen Informationen auf hoher Ebene, keine Nutzdaten usw.

dixie_flatline
quelle