L'Adresse IP de Convertisseur
Il y a adresse IP: 66.102.13.19, et à partir de cette adresse qui a reçu cette adresse
http://1113984275
Mais comment? Et comment je peux faire cela avec l'aide de bash.
Par exemple, ce service peut le faire, mais je ne comprends pas l'algorithme.
OriginalL'auteur KarlsD | 2012-05-26
Vous devez vous connecter pour publier un commentaire.
Par la manière, le nombre dans votre question ne correspond pas à l'adresse IP.
Pour convertir un nombre décimal en une adresse IP:
Pour convertir une adresse IP à une décimale:
Démo:
Ces deux scripts s'appuyer sur les fonctionnalités de Bash qui ne sont pas présents dans certains Bourne dérivé de coquillages. Voici AWK versions à utiliser à la place:
et
Ils peuvent être appelés de la même manière que les scripts Bash ci-dessus.
Le nombre décimal pour l'adresse IP donnée est 1113984275
Je vous remercie pour votre décision, plus clair, j'ai corrigé l'erreur. Et comment faire l'opération inverse? À partir de la 1113984275 pour obtenir 66.102.13.19.
Veuillez voir mon édité réponse.
Est-ce de travailler dans le shell?
OriginalL'auteur Dennis Williamson
Adresse IP -> Nombre:
Nombre -> adresse IP:
Je l'ai mise à jour de la méthode de comment convertir une adresse IP en adresse IP. 🙂
Vous pouvez éviter l'appel à
tr
en spécifiant le séparateur d'enregistrement, c'est à dire.:awk 'BEGIN{RS="."}...
ouawk '{s = s*256 + $1} END{print s}' RS=.
OriginalL'auteur Hongbo Liu
ma version pour int de conversion ip:
echo 3232235521| awk {'print rshift(and($1, 0xFF000000), 24) "." rshift(and($1, 0x00FF0000), 16) "." rshift(and($1, 0x0000FF00), 8) "." and($1, 0x000000FF) '}
OriginalL'auteur vik
Voici mon point de vue:
ip2d.sh:
d2ip.sh:
ip2d() { IFS=. eval 'set -- $1'; echo ...
et d2ip peut aussi être écriteIFS=\ read -r a b c d < <(echo "obase=256;$1" |bc)
Courtes et plus encore:
A=($(dc -e "256o$1p"));IFS=. eval 'echo "${A[*]#0}"'
(ont le même problème que l'original lors d'un quad a deux 0 initial).OriginalL'auteur evuraan
Binaire déplacement est toujours plus rapide que la multiplication ou de la division.
À l'aide d'un binaire ET est plus rapide que le mod.
Remarque: Ce système échoue avec des valeurs comme
0008
.Bash pense que c'est un nombre octal.
Pour le résoudre, chaque valeur doit être nettoyé avec quelque chose comme:
Pour les (très) vieux coques: bash depuis 2.04, ou le tableau de bord ou toute (raisonnable) shell:
OriginalL'auteur sorontar
Je pense qu'il y a une solution plus simple qui gère également un nombre arbitraire d'octets, sans références à des offsets fixes etc.
de sortie: 1113984275
$((2#$(cat)))
Le
cat
commande lit les données transmises dans l'entrée standard qui est une chaîne de chiffres binaires. L'expression$((2#...))
convertit "..." à partir de la base 2 à la décimale.OriginalL'auteur Brian Chrisman
Simple int IP de conversion pour bash
OriginalL'auteur ken