Estou usando o IPSet para gerenciar dezenas de milhares de intervalos IPv4 CIDR / netmask que, em seguida, são vinculados às regras do IPTables. Essa configuração está funcionando muito bem, mas eu gostaria de obter uma boa contagem geral de alto nível dos endereços IP do host em que o IPSet atua para fins de relatório do cliente.
A formatação de entrada do IPSet é consistentemente assim:
123.456.0.0/16 timeout 86400
Então eu posso encontrar as linhas que timeout
para obter valores para atuar nos intervalos CIDR / netmask contidos na entrada.
Por exemplo, se eu salvar a saída IPSet (via ipset -L -n > ipset-20181228.txt
) para um arquivo de texto chamado ipset-20181228.txt
e, em seguida, execute uma combinação de grep
e wc -l
como isso:
grep "timeout" ipset-20181228.txt | wc -l
Recebo uma contagem de mais de 39.000 itens, o que equivale a 39.000+ escalas de CIDR / netmask. Mas isso é (é claro) contar apenas os intervalos de CIDR / netmask e não as contagens completas de endereços de host IP nesse intervalo.
Tentei usar prips
(que expande valores CIDR / netmask para endereços IP reais no Bash) com o grep para selecionar apenas itens com intervalos CIDR / netmask como este:
grep -oE '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\/([0-9]{1,2})' ipset-20181228.txt | awk 'NF { system( "prips " $0) }' | wc -l
E depois de um gritante 20 a 30 minutos (!!!) no meu 2018 MacBook Air (com os fãs chutando), a contagem que eu consegui foi de 736.000.000+ que é o que eu estou indo para… Mas 20 a 30 minutos é muito longo . Eu quero que isso seja o mais scriptável e não intrusivo possível, e não posso confiar em um comando como esse para ser executado em um servidor de produção sem consumir recursos. Quero dizer, observe como ele se comporta na configuração de desenvolvimento do MacBook Air local.
Existe alguma maneira de calcular apenas a contagem do intervalo CIDR / netmask com base simplesmente no valor CIDR / netmask? Espero que haja apenas uma ferramenta de linha de comando - ou uma opção nas ferramentas existentes que estou usando - que não conheço que possa ajudar.
2^(32-mask)-2
. A máscara representa os bits da rede, então a outra parte representa os bits dos hosts. -2
é para o endereço de rede e ips de transmissão. Se você tem ipcalc
instalado, execute-o para ver essas informações. (Desculpe-me se eu entendi mal sua pergunta).
2^(32-mask)
endereços e é isso.
2^(32-mask)
.
1.2.3.0/24
para1.2.3.0-1.2.3.255
Opção B.1.2.3.0-1.2.3.255
para1.2.3.0/24
. Nmap, traceroute tem alguns recursos.