Monitore o número de bytes transferidos para / do endereço IP na porta

19

Alguém pode recomendar uma ferramenta de linha de comando Linux para monitorar o número de bytes transferidos entre o servidor local e um endereço IP / porta especificado.

O comando tcpdump equivalente seria:

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

quais saídas:

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

Eu gostaria de algo semelhante que produz:

54 bytes out, 176 bytes in

Eu gostaria que ele funcionasse no RHEL e fosse gratuito / de código aberto. Seria bom se houvesse uma ferramenta existente que eu também estava perdendo!

Mike
fonte

Respostas:

14

Você pode usar o iptables. Se você ainda não o estiver usando, poderá usar uma configuração Aceitar aberta, mas ter uma regra em vigor para fazer a contagem.

Por exemplo, no RHEL, seu /etc/sysconfig/iptablesarquivo pode se parecer com:

*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

Onde 10.10.1.1:80 é a porta host: na qual você deseja contar o tráfego (você não pode usar um nome de host). Você pode então verificar o tráfego contado com o comando iptables -nvxLcomo root.

Exemplo de saída:

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
fonte
7
Também é completamente legal ter uma regra sem destino, apenas para fins de contagem, por exemplo, iptables -A INPUT -d 1.2.3.4 -p tcp --dport 3456. Isso não fará nada com o tráfego, pois não há argumento "-j", mas cada pacote correspondente aumentará as contagens.
MadHatter suporta Monica
9

Eu estava prestes a sugerir o wireshark (por muitos recursos de ' conversa '), mas não é uma ferramenta de linha de comando. Você pode tentar o tshark , porém, que é uma ferramenta do analisador de linha de comando que se fecha ao wireshark. A saída deve ter (um pouco) o que você está procurando (exemplo abaixo):

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
fonte
7

Há também uma ferramenta chamada 'iftop' que exibe o uso da largura de banda em uma interface pelo host. Eu acho que o iftop pode fazer o que você descreveu, mas normalmente sua interface é algo como 'top'.

Então, para o seu exemplo, acho que você pode apenas criar um arquivo de configuração para fornecer seu código de filtro.

Então, aqui está o meu código de filtro no meu arquivo de configuração.

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

Em seguida, executei o seguinte para ver o tráfego de rede.

$ sudo iftop -c /tmp/conf

Não tenho certeza se esta é a melhor opção, mas certamente uma maneira de conseguir o que você precisa. HTH.

istudy0
fonte
3
Você também pode especificar o filtro na linha de comando sem usar um arquivo de configuração:iftop -f 'port 80 and host google.com'
Gioele
Você gostaria do total de bytes transferidos, não da largura de banda. Pode iftopmostrar isso?
arainone
3

Você também pode tentar o "iptraf", é leve e simples. Ele pode filtrar por porta e fornece informações de alto nível, sem dados de carga útil, etc.

dixie_flatline
fonte