Validando endereços IP (IPv4 e IPv6)

3

Simplesmente gostaria de verificar se uma string representa um endereço IP válido em um script bash. Acho que, como muitos outros, caí na armadilha de tentar fazer isso com uma expressão regular; enquanto isso funciona bem o suficiente para o IPv4, o IPv6 é mais complexo (já que suporta compressão de zeros) e é apenas uma solução complicada e não muito legível.

No entanto, o unix e o linux entendem bem os endereços IP, então estou pensando se existe uma maneira melhor de validar endereços IP no bash? De preferência, uma ferramenta razoavelmente comum que pode ser usada para fazer isso.

Eu gostaria de evitar o uso de outras linguagens como o Python para fazer isso, já que estou na verdade esperando substituir uma solução atual que é usar a função filter_var do PHP. Funciona, mas como acontece com as expressões regulares, está introduzindo uma segunda linguagem onde espero evitar usar uma.

Por fim, se houver uma solução que também possa lidar com intervalos de endereços IP (como 0.0.0.0-255.255.255.255 ou 0.0.0.0/16 etc.), isso seria ideal, mas posso lidar com isso sozinho

    
por Haravikk 10.12.2015 / 18:03

3 respostas

1

Ipcalc pode ajudá-lo:

ipcalc -c <ip-address>
    
por 10.12.2015 / 20:09
1

bash provavelmente não tem acesso direto à chamada de sistema inet_pton(3) relevante, então você provavelmente precisará ligar para alguma empresa, por exemplo sipcalc (que deve estar na árvore ports ou packages para vários unix). É provável que os idiomas de nível mais alto também recebam a inet_pton(3) ou equivalente, mas os detalhes serão específicos do idioma, por exemplo, Eu usei NetAddr::IP para código relacionado à sub-rede em Perl.

    
por 11.12.2015 / 00:41
-1

Isso fará o truque para o ipv4

#check for valid IP address if [[ $SourceIP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then echo "valid IP" else echo "Invalid IP: $SourceIP"; exit 0; fi

Estou implementando o ipv6 no script do qual extraí isso, assim que terminar, atualizarei este post.

    
por 11.12.2015 / 15:11