Ferramenta para agrupar uma lista de endereços IP em intervalos de IP [fechados]

1

Eu cuido de um site que está sendo inundado com solicitações HTTP de endereços IP diferentes, mas todos usando a mesma string do agente do usuário

Eu usei o arquivo de log e agora tenho um arquivo com todos os 2696 endereços IP exclusivos por linha. Parece que cada 20 ou mais IPs pertencem ao mesmo intervalo de IP, ou seja, o primeiro, segundo e, às vezes, o terceiro octeto são os mesmos

Existe uma maneira de agrupar esses IPs para que eu possa ver uma lista de cada intervalo de IP? Algum tipo de magia de linha de comando ou uma ferramenta eu posso apenas colocar os IPs e obter os intervalos de IP como saída?

Editar:

Por exemplo, 24 dos endereços IP começam com 104.140 e há três octetos diferentes. 8 IPs começam com 104.140.183 , outros 8 começam com 104.140.211 e os 8 finais começam com 104.140.4

Meu gerenciador de firewall me permite bloquear intervalos de IP com o tamanho do prefixo da rede e permite escolher entre /24 e /32

Eu não sei o suficiente sobre sub-redes para saber qual deve ser a saída, mas gostaria de ver A) quantos intervalos diferentes existem e B) idealmente ter a saída em um formato que eu possa usar para bloquear o intervalos no firewall

    
por Andy 04.03.2015 / 10:28

1 resposta

3

Tudo bem, acho que isso pode funcionar para você - supondo que você tenha o awk instalado e os endereços IP em ip.txt:

cat ip.txt | awk 'BEGIN { FS = "." } ; { printf("%s.%s.%s\n%s.%s.%s.%s\n", $1, $2, $3, $1, $2, $3, $4) }' | sort | uniq -c | sort -rn

Uma pequena explicação:

  • cat imprime o arquivo
  • O awk divide os endereços IP em 4 variáveis e imprime os intervalos de 24/32 e / 32
  • classifica os endereços IP, então podemos contá-los
  • o uniq conta-os (graças à opção -c) e coloca a frequência na frente do endereço ip
  • classifica-os em ordem decrescente (-r) da contagem de frequência (-n interpreta valores em vez de string)

Observe que os intervalos / 32 e / 24 são exibidos. Se você quiser apenas o / 32 do intervalo / 24, ajuste a instrução printf (assim, printf("%s.%s.%sn", $1, $2, $3) somente imprime / 24 e printf("%s.%s.%s.%s\n", $1, $2, $3, $4) imprime apenas / 32.

    
por 04.03.2015 / 15:36