Supervise el número de bytes transferidos a / desde la dirección IP en el puerto

19

¿Alguien puede recomendar una herramienta de línea de comandos de Linux para monitorear el número de bytes transferidos entre el servidor local y una dirección / puerto IP especificado?

El comando tcpdump equivalente sería:

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

que salidas:

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

Me gustaría algo similar que salga:

54 bytes out, 176 bytes in

Me gustaría que funcione en RHEL y sea gratuito / de código abierto. ¡Sería bueno si hubiera una herramienta existente que también me faltara!

Miguel
fuente

Respuestas:

14

Podrías usar iptables. Si aún no lo está usando, puede usar una configuración de Aceptar abierta, pero tiene una regla para hacer el recuento.

Por ejemplo, en RHEL su /etc/sysconfig/iptablesarchivo podría verse así:

*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

Donde 10.10.1.1:80 es el host: puerto al que desea contar el tráfico (no puede usar un nombre de host). Luego puede verificar el tráfico contado con el comando iptables -nvxLcomo root.

Salida de ejemplo:

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
fuente
77
También es completamente legal tener una regla sin un objetivo, únicamente para fines de conteo, por ejemplo, iptables -A INPUT -d 1.2.3.4 -p tcp --dport 3456. No hará nada al tráfico, ya que no hay un argumento "-j", pero cada paquete coincidente aumentará los recuentos.
MadHatter apoya a Monica el
9

Estaba a punto de sugerir wireshark (por sus muchas características de ' conversación '), pero no es una herramienta de línea de comandos. Sin embargo, podría probar tshark , que es una herramienta analizadora de línea de comandos que se cierra a wireshark. La salida debería tener (algo) lo que está buscando (ejemplo a continuación):

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

Resultado:

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

También hay una herramienta llamada 'iftop' que muestra el uso de ancho de banda en una interfaz por host. Creo que iftop puede hacer lo que describiste, pero normalmente su interfaz es algo así como 'top'.

Entonces, para su ejemplo, creo que puede crear un archivo de configuración para proporcionar su código de filtro.

Así que aquí está mi código de filtro en mi archivo de configuración.

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

Luego, ejecuté lo siguiente para ver el tráfico de la red.

$ sudo iftop -c /tmp/conf

No estoy seguro de si esta es la mejor opción, pero ciertamente es una forma de lograr lo que necesita. HTH.

istudy0
fuente
3
También puede especificar el filtro en la línea de comando sin usar un archivo de configuración:iftop -f 'port 80 and host google.com'
gioele
Op 'me gustaría el total de bytes transferidos, no el ancho de banda. iftop¿ Puede mostrar eso?
arainone
3

También puedes probar "iptraf", es ligero y simple. Puede filtrar por puerto y le brinda información de alto nivel, sin datos de carga útil, etc.

dixie_flatline
fuente