Es gibt eine IP-Adresse: 66.102.13.19, und von dieser Adresse, die diese Adresse erhalten hat
%Vor%Aber wie? Und wie kann ich das mit Hilfe von bash machen? Zum Beispiel kann dieser Dienst es tun, aber ich verstehe den Algorithmus nicht.
Übrigens stimmt die Nummer in Ihrer Frage nicht mit der IP-Adresse überein.
Um eine Dezimalstelle in eine IP umzuwandeln:
%Vor%Um eine IP in eine Dezimalzahl umzuwandeln:
%Vor%Demo:
%Vor%Diese beiden Skripts basieren auf Features von Bash, die in einigen Bourne-abgeleiteten Shells nicht vorhanden sind. Hier sind AWK-Versionen zu verwenden:
%Vor%und
%Vor%Sie können auf die gleiche Weise wie die Bash-Skripte oben aufgerufen werden.
IP-Adresse - & gt; Nummer: echo 66.102.13.19 | tr . '\n' | awk '{s = s*256 + } END{print s}'
Nummer - & gt; IP-Adresse: (export ip=1113984275; for i in {1..4}; do s='.'$((ip%256))$s && ((ip>>=8)); done; echo ${s:1})
Binärverschiebung ist immer schneller als Multiplikation oder Division.
Eine binäre AND ist schneller als mod.
Hinweis: Dieses System wird mit Werten wie 0008
fehlschlagen.
Bash denkt, es ist eine Oktalzahl.
Um das zu lösen, muss jeder Wert wie folgt bereinigt werden:
%Vor%Für (sehr) alte Shells: bash seit 2.04 oder Bindestrich oder irgendeine (sinnvolle) Shell:
%Vor%Ich denke, es gibt eine einfachere Lösung, die auch eine beliebige Anzahl von Oktetten ohne Referenzen auf feste Offsets usw. behandelt.
%Vor%Ausgabe: 1113984275