Como coletar estatísticas concisas de tráfego no linux?

1

Eu preciso ter estatísticas divididas por períodos, como este:

time_1 - time_1 + 5mins
from_ip1 > to_ip2  total_packages_size1
from_ip3 > to_ip4  total_packages_size2

time_1 + 5mins - time_1 + 10mins
from_ip1 > to_ip2  total_packages_size3
from_ip5 > to_ip6  total_packages_size4
...

Eu olhei para tcpdump e sei como obter estatísticas não resumidas com ele. Mas eu realmente não quero fazer uma ferramenta que processe logs do tcpdump e, em seguida, apague-os. Deve haver alguma ferramenta pronta para uso para esse problema padrão.

    
por Roman 10.12.2010 / 14:38

3 respostas

1

Eu costumo fazer isso com regras de contabilidade no iptables. Eu crio uma regra de auditoria personalizada

iptables -N GKT-AUDIT

Em seguida, envio todo o tráfego que chega, neste caso, a cadeia OUTPUT , através dessa regra antes de qualquer outra coisa

iptables -I OUTPUT 1 -j GKT-AUDIT

Eu então introduzo regras sem metas na GKT-AUDIT chain

iptables -A GKT-AUDIT -s 5.5.5.1 -d 7.7.7.2
iptables -A GKT-AUDIT -s 5.5.5.3 -d 7.7.7.4

e assim por diante. Como essas regras não têm destinos, os pacotes correspondentes não terminam, mas continuam na cadeia GKT-AUDIT , depois acabam no final e retornam à cadeia OUTPUT , portanto, as regras não afetam o fluxo de dados. Mas os pacotes fazem incrementar as contagens de pacotes das regras correspondentes em seu caminho, para que eu possa dividir e dividir meu tráfego de qualquer maneira que eu quiser de uma base estatística. Eu normalmente os coleciono com um plug-in munin e tenho munição deles, mas isso é um refinamento que pode ou não ser adequado para você. / p> O bom de usar o iptables é que ele pode dividir o tráfego de muitas maneiras diferentes, para que eu possa ser muito preciso sobre qual tráfego qualquer regra específica corresponde: se eu quiser contar apenas pacotes de um determinado endereço, até um certo outro endereço, mas apenas em um determinado intervalo de portas de origem, e somente se fizer parte de uma conexão que tenha transferido mais de 10 MB, eu posso fazer isso.

    
por 10.12.2010 / 15:41
0

Não sei se isso ajudará você, mas talvez valha a pena investigar.

Você pode importar arquivos raw tcpdump em wireshark, isso é uma ferramenta muito legal. Não tenho certeza se é possível usar os arquivos resumidos embora.

Atenciosamente, jgr

    
por 10.12.2010 / 14:44
0

Qual é a sua infra-estrutura de rede de back-end? O Netflow foi construído para exatamente o caso de uso que você está descrevendo. Ele foi desenvolvido pela Cisco, mas está disponível na maioria dos switches topo de linha.

Se você tiver que fazer isso no nível do host, isso parece um trabalho para ntop . Não acho que seus relatórios sejam tão incrementais quanto você deseja, mas você provavelmente pode vincular sua API do Python para obter o que deseja.

    
por 10.12.2010 / 15:26