ip=66.102.13.19
IFS=. read -r a b c d <<< "$ip"
printf '%s%d\n' "http://" "$((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d))"
A proposito, il numero nella tua domanda non corrisponde all'indirizzo IP.
Per convertire un numero decimale in un IP:
#!/bin/bash
dec2ip() {
local ip [email protected]
for e in {3..0}
do
((octet = dec/(256 ** e)))
((dec -= octet * 256 ** e))
ip+=$delim$octet
delim=.
done
printf '%s\n' "$ip"
}
dec2ip "[email protected]"
Per convertire un IP ad un decimale:
#!/bin/bash
ip2dec() {
local a b c d [email protected]
IFS=. read -r a b c d <<< "$ip"
printf '%d\n' "$((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d))"
}
ip2dec "[email protected]"
Demo:
$ ./dec2ip 1113984275
66.102.13.19
$ ./ip2dec 66.102.13.19
1113984275
Questi due script si basano su caratteristiche Bash che non è presente in alcune shell derivate da Bourne. Qui ci sono le versioni di AWK da usare al posto:
#!/usr/bin/awk -f
# dec2ip
BEGIN {
dec = ARGV[1]
for (e = 3; e >= 0; e--) {
octet = int(dec/(256^e))
dec -= octet * 256^e
ip = ip delim octet
delim = "."
}
printf("%s\n", ip)
}
e
#!/usr/bin/awk -f
# ip2dec
BEGIN {
ip = ARGV[1]
split(ip, octets, ".")
for (i = 1; i <= 4; i++) {
dec += octets[i] * 256 ** (4 - i)
}
printf("%i\n", dec)
}
Possono essere chiamati nello stesso modo come gli script Bash di cui sopra.
fonte
2012-05-26 16:59:49
Qual è il numero? –
@AshBurlaczenko: il numero decimale per l'indirizzo IP specificato è 1113984275 –
Grazie per la tua decisione, più chiaro, ho corretto l'errore. E come funziona l'operazione inversa? Da 1113984275 per ottenere 66.102.13.19. – KarlsD