Surveiller le nombre d'octets transférés vers / depuis l'adresse IP sur le port

19

Quelqu'un peut-il recommander un outil de ligne de commande Linux pour surveiller le nombre d'octets transférés entre le serveur local et une adresse IP / un port spécifié.

La commande tcpdump équivalente serait:

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

qui génère:

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

J'aimerais quelque chose de similaire qui génère:

54 bytes out, 176 bytes in

J'aimerais qu'il fonctionne sur RHEL et qu'il soit gratuit / open-source. Ce serait bien s'il existait un outil qui me manquait aussi!

Mike
la source

Réponses:

14

Vous pouvez utiliser iptables. Si vous ne l'utilisez pas déjà, vous pouvez utiliser une configuration Accepter ouverte, mais avoir une règle en place pour effectuer le comptage.

Par exemple, sur RHEL, votre /etc/sysconfig/iptablesfichier pourrait ressembler à:

*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

Où 10.10.1.1:80 est l'hôte: port sur lequel vous souhaitez compter le trafic (vous ne pouvez pas utiliser de nom d'hôte). Vous pouvez ensuite vérifier le trafic compté avec la commande en iptables -nvxLtant que root.

Exemple de sortie:

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
la source
7
Il est également tout à fait légal d'avoir une règle sans cible, uniquement à des fins de comptage, par exemple iptables -A INPUT -d 1.2.3.4 -p tcp --dport 3456. Cela ne fera rien au trafic, car il n'y a pas d'argument "-j", mais chaque paquet correspondant augmentera le nombre.
MadHatter prend en charge Monica
9

J'étais sur le point de suggérer Wireshark (car il s'agit de nombreuses fonctionnalités de « conversation »), mais ce n'est pas un outil en ligne de commande. Vous pouvez cependant essayer tshark , qui est un outil d’analyseur de ligne de commande qui se ferme à Wirehark. La sortie devrait avoir (quelque peu) ce que vous recherchez (exemple ci-dessous):

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

Résultat:

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

Il existe également un outil appelé «iftop» qui affiche l'utilisation de la bande passante sur une interface par hôte. Je pense que iftop peut faire ce que vous avez décrit mais normalement son interface est quelque chose comme 'top'.

Donc, pour votre exemple, je pense que vous pouvez simplement créer un fichier de configuration pour fournir votre code de filtre.

Voici donc mon code de filtre dans mon fichier de configuration.

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

Ensuite, j'ai exécuté ce qui suit pour voir le réseau traffice.

$ sudo iftop -c /tmp/conf

Je ne sais pas si c'est la meilleure option mais certainement une façon d'atteindre ce dont vous avez besoin. HTH.

istudy0
la source
3
Vous pouvez également spécifier le filtre sur la ligne de commande sans utiliser de fichier de configuration:iftop -f 'port 80 and host google.com'
gioele
J'aimerai le nombre total d'octets transférés, pas la bande passante. Pouvez-vous le iftopmontrer?
arainone
3

Vous pouvez également essayer "iptraf", c'est léger et simple. Il peut filtrer par port et vous donne des informations de haut niveau, aucune donnée de charge utile, etc.

dixie_flatline
la source