Como gerar endereços IP aleatórios

0
$ nmap -n -iR 0 -sL > RANDOM-IPS-TMP.txt
$ grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" RANDOM-IPS-TMP.txt |
      egrep -v "10.*|172.[16-32].*|192.168.*|[224-255].*" > RANDOM-IPS.txt
egrep: Invalid range end
$ 

Como posso gerar endereços IP aleatórios fora do intervalo de endereços IP privados e do intervalo de endereços IP multicast?

    
por LanceBaynes 09.06.2011 / 10:40

2 respostas

7

Você entendeu mal a sintaxe regex. [16-32] não significa "correspondência 16, 17, ... ou 32". Significa "associe um caractere que seja 1 ou 2 ou no intervalo 6-3" (que não é um intervalo válido, daí o erro).

É possível escrever um regex para corresponder a um intervalo de inteiros, mas é complexo e propenso a erros. No seu caso, seria muito mais fácil usar a nmap option de --exclude para excluir os intervalos que você não quer. Ele entende a notação CIDR, que é uma maneira muito mais simples de descrever os intervalos que você está falando.

nmap -n -iR 0 --exclude 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,224-255.-.-.- -sL >RANDOM-IPS.txt

Você não mencionou o bloco de loopback (127.0.0.0/8), mas provavelmente deve excluí-lo também.

    
por 09.06.2011 / 11:33
0

Este fragmento de shell gera um endereço IP.

ip_address=$(dd if=/dev/urandom bs=4 count=1 2>/dev/null |
             od -An -tu1 |
             sed -e 's/^ *//' -e 's/  */./g')

Se você não estiver satisfeito com isso, tente novamente em um loop.

while
  set $(dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1)
  [ $1 -lt 224 ] &&
  [ $1 -ne 10 ] &&
  { [ $1 -ne 192 ] || [ $2 -ne 168 ]; } &&
  { [ $1 -ne 172 ] || [ $2 -lt 16 ] || [ $2 -gt 31 ]; }
do :; done
ip_address=$1.$2.$3.$4
    
por 10.06.2011 / 01:07