Ich kann meine IP-Adresse mit dem Befehl ifconfig oder hostname -i ermitteln.
Aber wie finde ich meine öffentliche IP?
(Ich habe eine statische öffentliche IP-Adresse, möchte diese jedoch mithilfe des Unix-Befehls herausfinden.)
Ich kann meine IP-Adresse mit dem Befehl ifconfig oder hostname -i ermitteln.
Aber wie finde ich meine öffentliche IP?
(Ich habe eine statische öffentliche IP-Adresse, möchte diese jedoch mithilfe des Unix-Befehls herausfinden.)
Antworten:
curl ifconfig.me
curl ifconfig.me/ip
(nur für die ip)
curl ifconfig.me/all
(für mehr Infos braucht man Zeit)
Weitere Befehle finden Sie unter: http://ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
Sie können anfordern myip.opendns.com
. von OpenDNS. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. Oder unter Windows: nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
um direkt die ip zu bekommen ohne die ganze antwort durchgehen zu müssen.
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Beachten Sie, dass das oben Genannte derzeit nur für IPv4 funktioniert (keiner dieser Resolver scheint derzeit über IPv6 zu verfügen). Wenn Sie jedoch -4
das Explizite weglassen, besteht die -t a
Gefahr, dass es in Zukunft ausfällt (mit Ausnahme von Google txt
, das möglicherweise tatsächlich funktioniert) IPv6 eines Tages, wenn es von Google ordnungsgemäß aktiviert wurde)).
Beachten Sie, dass dies myip.opendns.com
nur durch resolver1.opendns.com
und nicht durch auth1.opendns.com
behoben werden kann. Sie scheinen also DNS-Hijacking durchzuführen und mitten in ihrem eigenen Domain-Namen zu sein! Sie können es daher nicht verwenden, um die IP eines zufälligen Auflösers zu finden, da dies resolver1.opendns.com
für nicht maßgeblich ist myip.opendns.com
.
Beachten Sie, dass dies o-o.myaddr.l.google.com
der flexibelste und zukunftssicherste Ansatz ist. Sie können sogar testen, ob Ihr DNS-Resolver die experimentelle EDNS0-Erweiterung für das Client-Subnetz unterstützt (für die nur sehr wenige Resolver die Unterstützung haben):
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
oder -6
ob Sie eine bestimmte IP-Version benötigen.
Eine sehr einfache Antwort, wenn Sie einen Internetzugang haben, ist:
curl icanhazip.com
Bedenken Sie, dass das Vertrauen in Drittanbieterquellen für Ihre IP-Adresse problematisch sein kann, insbesondere wenn das, was Sie mit diesen Daten tun, eine besondere Bedeutung hat.
Ein vertrauenswürdigerer Weg ist, einen bekannten, vertrauenswürdigen DNS-Server (im Idealfall DNSSEC) auszuwählen und den Hostnamen der Box damit abzufragen, sofern Ihr DNS-Server solche Einträge enthält.
dig @trustworthysource.com +short `hostname`
Ich habe dafür einen einfachen und schnellen Webservice geschrieben.
curl ident.me
Sie können nach Ihrem IPv4 fragen:
curl v4.ident.me
Oder IPv6:
curl v6.ident.me
Die API ist unter http://api.ident.me/ dokumentiert.
Ein Weg: http://www.whatismyip.com/
Wenn
Dann können Sie einfach die Ausgabe von ifconfig nach den IP-Adressen der Schnittstellen (dem Teil "inet addr:") analysieren, um die Liste der IP-Adressen aller Ihrer Schnittstellen abzurufen. Die eine IP-Adresse, die nicht im privaten Bereich liegt (siehe http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ), ist Ihre öffentliche IP-Adresse.
Die gleiche Liste erhalten Sie auch über
ip addr show
Das kann einfacher zu analysieren sein.
Wenn Sie keine direkte Internetverbindung (NAT usw.) haben, können Sie Ihre öffentliche IP-Adresse nicht ohne externe Hilfe finden (da Ihr Computer sie nicht kennt). Dann musst du es wie in den anderen Antworten machen.
Ich habe einen etwas anderen Ansatz gewählt, indem ich das für NAT Traversal entwickelte STUN-Protokoll verwendet habe. Wenn Sie Ubuntu verwenden, können Sie das Paket "stun" einfach installieren, indem Sie Folgendes eingeben:
sudo apt-get install stun
Das Paket installiert einen STUN-Server, den Sie wahrscheinlich nicht benötigen, enthält jedoch auch einen STUN-Test-Client, mit dem ich dieses Problem gelöst habe. Jetzt können Sie Ihre öffentliche IP mit einem (nicht ganz einfachen) Befehl abrufen:
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
Nun geht es darum, dass stun den öffentlichen STUN-Server "stunserver.org" kontaktiert und eine Antwort mit Ihrer öffentlichen IP-Adresse erhält. Der Rest des Befehls besteht nur darin, die IP-Adresse aus der Ausgabe herauszufiltern.
Eine Möglichkeit ist, dass Sie eine Anfrage an die Seite unter stellen können
http://www.biranchi.com/ip.php
Es gibt die IP-Adresse Ihres Systems zurück
text/html
ist in Ordnung für das, was diese Pseudo-API zurückgibt - es ist sicherlich nicht XML oder JSON. text/plain
vielleicht, aber es ist völlig verwendbar als text/html
.
wget -q -O - http://wgetip.com/
Google zeigt jetzt Ihre öffentliche IP-Adresse an: http://www.google.com/search?q=ip
User-Agent
Zeichenfolge auf der Seite angezeigt wird. Mit Firefox funktioniert es; Aber SeaMonkey mit deaktiviertem "Firefox" -String (über "general.useragent.compatMode.firefox" auf "false" gesetzt) funktioniert dies plötzlich nicht mehr. Haben Sie überhaupt keine Ahnung, warum Google so etwas explizit nur für Firefox anstelle von Gecko aktiviert, da es viele andere Desktop-Browser auf Gecko-Basis gibt, die ebenfalls kompatibel sind, einschließlich SeaMonkey.
Okay ... ich weiß, dass dies WEG ist und wahrscheinlich nicht einmal einen Beitrag wert ist, aber hier ist meine funktionierende Lösung.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Schön und einfach.
hostname -I
(Großbuchstabe 'i') tun .
Am einfachsten ist es , wie vorgeschlagen http://ifconfig.me/ zu verwenden .
Auf dieser Seite erfahren Sie, welcher Befehl für welche Informationen verwendet werden soll, die Sie abrufen möchten.
Für IP:
locken ifconfig.meoder
locken ifconfig.me/ip
Für öffentlichen Hostnamen:
locken Sie ifconfig.me/host
Für alle Informationen in einer XML-Datei:
locken Sie ifconfig.me/all.xml
etc ... checkt einfach http://ifconfig.me aus
Ich mache das oft und von vielen Geräten aus, also habe ich meine eigenen zwei Dienste auf einem Server erstellt:
PHP-Datei im Stammverzeichnis eines Webservers:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Verwendung auf einer Shell:
$ curl -4 mydomain.com
79.22.192.12
funktioniert auch mit ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Mit Netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Auf einem Cisco-Router:
router#more http://myserver.com/index.php
79.22.192.12
Schneller Hack mit einem benutzerdefinierten Telnet-Server: xinetd spawning / usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
und dann telnet darauf:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
funktioniert genauso mit einem router:
router#telnet myserver.com
79.22.192.12
Auf diese Weise können Sie es in Ihrem internen Netzwerk zum Laufen bringen, wenn ein Nat oder ein Proxy an der Kommunikation beteiligt ist und Sie wissen möchten, von welcher IP aus Sie angezeigt werden.
Es ist kein Service von Drittanbietern erforderlich.
Um nicht auf externe Quellen angewiesen zu sein, verwende ich expect, um in meinen Router zu telneten und die IP-Adresse seiner öffentlichen Schnittstelle abzurufen. Hier ist ein Beispiel für ein Expect-Skript:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
Ich führe dann das obige Skript wie folgt aus, um die öffentliche IP zu erhalten:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Dies basiert natürlich auf der Annahme, dass ich Administratorzugriff auf den Router habe und dass es sich um einen Linux-basierten Router handelt, für den der Befehl ifconfig verfügbar ist.
Duplikat von vielen anderen Fragen (daher meine -1 Stimme).
Eine einfache Shell-Skriptlösung finden Sie hier:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Funktioniert unter Linux, FreeBSD, SunOS und Apple Darwin (mit einer geringfügigen Änderung).
Wenn Sie die externe IP-Adresse Ihres Routers ermitteln möchten, fragen Sie entweder den Router selbst nach seiner WAN-Adresse oder fragen Sie jemanden außerhalb des Routers, ob er sie für Sie abrufen soll.
Manuell können Sie eine der oben angegebenen Sites durchsuchen, die die IP-Adresse der eingehenden Anfrage zurückgeben.
Auf automatisierte Weise können Sie versuchen:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
Dadurch erhalten Sie die Zeile, die die IP - Adresse in der http - Antwort enthält, und können sie dann mit sed, awk usw
Sie können nur die Shell verwenden, um Ihre externe IP-Adresse zu überprüfen, auch mit externen Anbietern
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
Ausgabe
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -m1
Ich mache das Es gibt mir nur die IP ohne Beteiligung von Dritten.
ip addr show | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | cut -f1 -d "/"
Hier ist eine weitere Alternative, die von Hosts abhängt, deren Geschäft sich mit der Verwaltung dynamischer IP-Adressen befasst, und nicht mit "öffentlich zugänglichen" Sites, die möglicherweise nicht mehr funktionieren oder das Format ändern.
1) Registrieren Sie Ihren Server bei einem der vielen kostenlosen dynamischen DNS-Dienste (z. B. no-ip.com). Dadurch erhalten Sie einen DNS-Eintrag wie xxx.no-ip.org.
2) Installieren Sie das dynamische Aktualisierungstool des Dienstes (meldet IP-Änderungen an den Dienst).
Gehen Sie wie folgt vor, um die IP-Adresse in einem Skript abzurufen:
$external_ip = `dig +short xxx.no-ip.org`
Hervorragend für die Verwendung in Cron-Jobs geeignet, um zu überprüfen, ob sich die dynamische IP geändert hat und einige Konfigurationseinträge geändert werden müssen.
Unter OS X gibt es zwei einfache Lösungen, um sowohl die private als auch die öffentliche IP-Adresse abzurufen (mit Bonuscode, wenn Sie LaunchBar verwenden).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"