Como capturar todos os pacotes recebidos na NIC, mesmo esses pacotes não pertencem a mim

13

AFAIK, a NIC recebe todos os pacotes do fio em uma rede local, mas rejeita os pacotes cujo endereço de destino não é igual ao seu IP.

Quero desenvolver um aplicativo que monitore o uso da internet pelos usuários. Cada usuário tem um endereço IP fixo.

Eu e algumas outras pessoas estamos conectadas a um comutador de mesa não gerenciado DES-108 8 portas Fast Ethernet

Como dito anteriormente, quero capturar todos os tráfegos de todos os usuários e não apenas os pacotes que me pertencem.

Como devo forçar minha NIC ou outros componentes a receber todos os pacotes?

m.r226
fonte
1
Compre um switch barato e gerenciado por cerca de 30 € e ative o espelhamento de porta no link para o gateway.
Max Ried

Respostas:

27

AFAIK, a NIC recebe todos os pacotes do fio em uma rede local, mas rejeita os pacotes cujo endereço de destino não é igual ao seu IP.

Correção: rejeita os pacotes cujo endereço MAC de destino não é igual ao seu endereço MAC (ou multicast ou qualquer endereço adicional em seu filtro.

Os utilitários de captura de pacotes podem colocar trivialmente o dispositivo de rede no modo promíscuo, ou seja, a verificação acima é ignorada e o dispositivo aceita tudo o que recebe. De fato, esse geralmente é o padrão: com tcpdump, você deve especificar a -popção para não fazer isso.

A questão mais importante é se os pacotes de seu interesse estão sendo carregados até a porta de farejamento. Como você está usando um switch Ethernet não gerenciado, eles quase certamente não o são. O switch está decidindo remover pacotes que não lhe pertencem da sua porta antes que seu dispositivo de rede possa vê-los.

É necessário conectar-se a uma porta de espelhamento ou monitoramento especialmente configurada em um switch Ethernet gerenciado para fazer isso.

Celada
fonte
1
Ou um hub Ethernet ... se você encontrar um enferrujado no sótão :) Duvido que exista algum para o 1000Base-T, a Wikipedia diz que os hubs de gigabit suportam apenas links half-duplex e estão obsoletos agora.
Chx 9/04
1
@chx, todos os hubs verdadeiros suportam apenas half duplex. Pessoalmente, eu nunca vi um 1000Base-T.
Celada
Acredito que isso tenha a ver com a lenta aceitação da Gigabit Ethernet - embora o padrão 802.3ab tenha sido lançado em 1999, a aceitação foi muito lenta até 2003/2004, quando a Intel lançou o chipset 875P pela primeira vez com o barramento CSA dedicado para a Gigabit Ethernet e depois em 2004, o PCI Express assumiu finalmente a largura de banda suficiente para a Gigabit Ethernet. E então, os switches eram baratos o suficiente.
chx
O comutador Ethernet nem sempre transmite os quadros. Possui sua própria tabela de comutação (contém mapa da porta do comutador e endereço MAC) para unir o quadro. Se a tabela não tiver uma entrada para o MAC no quadro, ela difunde / inunda o quadro. Sua área de trabalho nunca receberá outros quadros. Como na resposta, você precisa usar um switch especial para capturar todos os quadros que chegam ao seu switch.
Valarpirai
8

No início, diz respeito aos hubs ethernet (não comutadores), pacotes enviados estão disponíveis para todos os hosts na sub-rede, mas os hosts que não são o destinatário pretendido devem ignorar.

Obviamente, não demorou muito tempo para as sub-redes saturarem, então a tecnologia do switch nasceu para resolver os problemas, e uma das coisas que eles fizeram foi fazer com que a rede alternasse apenas os pacotes de roteamento destinados ao host para essa porta (mais o tráfego de transmissão de Andy )

Isso complica o monitoramento / detecção da rede, porque você só pode detectar pacotes que são para o seu host. Isso foi considerado uma coisa boa do ponto de vista de segurança, mas do ponto de vista de monitoramento de rede não é tão bom. Para fazer o monitoramento de rede funcionar, os fornecedores implementam um recurso chamado espelhamento de porta. Isso deve ser configurado no comutador de rede, e o link abaixo deve indicar a direção certa para os produtos D-link. Você o encontrará em algum lugar no software de gerenciamento de switches ou na interface de administração da web. Se você não encontrar esses recursos, talvez a funcionalidade não seja fornecida nesse dispositivo específico.

http://www.dlink.com/uk/en/support/faq/switches/layer-2-gigabit/dgs-series/es_dgs_1210_como_monitorear_trafico_de_un_puerto_port_mirroring

Thomas Carlisle
fonte
2

Primeiro, você precisa mudar sua NIC para o modo promíscuo. Vamos supor que sua interface NIC seja eth0.

root@linux#ifconfig eth0 promesc

Se você estiver em uma rede de comutadores, seu farejamento será reduzido ao domínio de colisão, conecte-se à sua porta do comutador. Você pode executar macofpara sobrecarregar a tabela de encaminhamento do comutador.

root@linux#macof -i eth0

Então você pode usar wiresharkou tcpdumpcapturar todo o tráfego.

root@linux#tcpdump -i eth0 -w outputfile

Se você não estiver em uma rede comutada, basta ativar o modo promíscuo e usar tcpdump.

Ahmed chiboub
fonte
1
tcpdumpativará o modo promíscuo para você. Você não precisa fazer isso (e lembre-se de desfazê-lo quando terminar) manualmente.
Celada
0

Você está reinventando a roda.

Supondo que você tenha uma rede simples com clientes conectados a switches, com um gateway padrão para a Internet, você só precisará monitorar nesse dispositivo de gateway padrão. Este será um ponto de estrangulamento para mostrar todo o tráfego entre um cliente da LAN e a Internet.

Estou assumindo que o tráfego de cliente LAN para cliente LAN não é interessante, porque com todos os endereços IP dentro da mesma sub-rede IP, o tráfego local não toca no gateway padrão.

Se você realmente deseja ver todo o tráfego, cada usuário precisa estar em sua própria rede IP e o tráfego para as outras redes é através do gateway padrão. Você pode alocar um / 28 para cada pessoa e elas podem ter 14 IPs para si.

Seu roteador doméstico médio não vai lidar com muito disso, você precisará explorar uma distribuição de firewall dedicada. Pessoalmente, o pfsense seria o meu objetivo, mas há muitas opções.

Criggie
fonte