Wie kann ich meine öffentliche IP-Adresse über die Befehlszeile abrufen, wenn ich mich hinter einem Router befinde?


37

Gibt es eine Möglichkeit, meine öffentliche (WAN) IP-Adresse in der Befehlszeile abzurufen? Ich befinde mich hinter einem Router (LAN-Netzwerk) mit einer von meinem Internetdienstanbieter zugewiesenen dynamischen IP-Adresse.

Ich habe Lösungen mit einem externen Webservice (z. B. ifconfig.me) gesehen, möchte jedoch wissen, ob ich auf einen externen Service verzichten kann.


Können Sie bitte weitere Details zu Ihrem Netzwerk-Setup hinzufügen? Befinden Sie sich hinter einem Router / Switch, der Zugriff auf das Internet hat, und versuchen Sie, die WAN-IP-Adresse zu ermitteln, die der Router / Switch von Ihrem ISP erhält?
Slm

@slm Ich bin hinter einem Router und einer Ameise, um herauszufinden, welche IP dem Router von ISP
user61954 22.12.12

Siehe den dritten Weg, den ich gerade zu meiner Antwort hinzugefügt habe. Sie werden sehen wollen, ob es eine Möglichkeit gibt, Ihre WAN-IP von Ihrem Router zu beziehen. Welches Fabrikat / Modell hat der Router?
Slm

Sie müssen irgendeine Art von externem Service abfragen. Im Allgemeinen hat ein Computer keine Ahnung, von welcher IP-Adresse die Verbindungen anderer Computer stammen.
David Schwartz

Antworten:


27

Angenommen , Ihr System verfügt über zwei Ethernet - Geräte, eth0und eth1und eth0ist mit Ihrem LAN, sagen IPs 192.168.1.X und Ihr eth1Gerät an Ihren ISP (WAN) verbunden ist , Sie gehen zu wollen , die folgenden verwenden ifconfigBefehl Ihre IP zu erhalten für die WAN-Seite.

HINWEIS: Bei den ersten beiden Methoden wird davon ausgegangen, dass Sie sie auf einem Computer mit zwei Ethernet-Geräten ausführen und eines davon mit Ihrem Internetdienstanbieter (Kabelmodem und / oder DSL-Modem) verbunden ist. In diesem Szenario wird das Ethernet-Gerät (eth1) mit Ihrer IP-Adresse im Internet (WAN-IP) konfiguriert.

1. Weg

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

Sie können auch den ipBefehl verwenden.

% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

2. Weg

Wenn Sie dies bei einem System herausfinden müssen, das nur im LAN installiert ist, können Sie einen passphrasenlosen SSH-Schlüssel einrichten und ihn einem Konto auf Ihrem LAN-Computer hinzufügen, damit er über den WAN-Zugriff remote auf das System zugreifen kann.

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

3. Weg

Wenn Sie nicht in die Box mit WAN-Zugang sshten können und einen Heim-Router / Switch wie eine Linksys- oder Netgear-Box verwenden. Möglicherweise können Sie die IP-Adresse von diesem Gerät über eine HTTP-Statusseite abrufen. Ich habe dies auch in der Vergangenheit getan, ähnlich dem, was in diesem whatismyip.com-Forumsbeitrag beschrieben wird .

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

HINWEIS: Dieser Ansatz hängt stark davon ab, über welchen Router / Switch Sie verfügen, ob es sich um eine Marke von Linksys, Netgear usw. handelt. Jeder hat eine eigene Seite mit der WAN-IP.

4. Weg

Senden einer Anfrage an eine externe Internetseite, die Ihre WAN-IP-Adresse zurückmeldet.

HINWEIS: Ich bin mir bewusst, dass in der ursprünglichen Frage erwähnt wurde, dass nach Alternativen zu diesem Ansatz gesucht wurde, aber ich füge sie hier ein, damit diese Antwort alle Grundlagen abdeckt.

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33

Zusätzliche Informationen finden Sie hier: HOWTO: Überprüfen Sie Ihre externe IP-Adresse über die Befehlszeile


Ich habe so etwas wie eine Verbindung zwischen meinem System und einem Router und es ist mit dem Intrnet verbunden
user61954 22.12.12

5
Da er angab, nicht direkt verbunden zu sein, hat keines der eth*Geräte die WAN-IP. Sofern sein Router ssh nicht unterstützt, hat er Zugriff und ifconfig wird dies nicht funktionieren. Kein Downvoting, aber jeder, der dies versucht, ist sich dessen bewusst.
AaronLS

Lesen Sie seine Frage noch einmal durch. Er sagt, er habe LAN-Zugang, nur keinen Internetzugang, Punkt 1. Artikel # 2 sagen , dass er eine dynamische IP von seinem ISP bekommen, ich gehe davon aus, dass er entweder ein anderes System in s / w seine LAN einzigen Verbindung und das Internet bekommt ist oder er ist ein Home - Router / Switch b bekam / w ihn und das Internet.
Slm

Downvoter, hinterlasse einen Kommentar. Diese Antwort ist bei weitem die vollständigste und dennoch stimmen die Leute nicht ab. @ user61954 sagte sogar in seinen Kommentaren, dass er sich hinter einem Router befindet, damit eine der von mir beschriebenen Methoden funktioniert.
Slm

Ich habe gestimmt. Die erste und zweite Methode funktionieren jedoch nicht. Sie gibt nur die lokale IP-Adresse zurück. Vielen Dank!
Jared Burrows

12

Wenn auf Ihrem System Curl installiert ist (die meisten tun dies), können Sie es verwenden

curl ifconfig.me

Hey, danke, diese Hilfe zu mir, nur eine Frage, Was ist die "ifconfig.me" Ich kenne die ifconfig-Funktion, aber ich bin in der Regel nicht mit dieser. Bitte können Sie mir einen Link geben, um darüber zu lesen oder es zu erklären. --Update-- hat die Frage nicht gelesen. ups
Aby W

ifconfig.me ist eine Website, die Ihnen Ihre IP gibt.
Rory

ifconfig.me unterstützt kein https und kann daher gefälscht werden. Es ist keine gute Idee, damit zu überprüfen, ob Ihr VPN aktiv ist.
Dan Dascalescu

9

Wenn Sie sich hinter einem NAT-Router mit UPNP befinden, können Sie mit miniupnpc die WAN-IP-Adresse ermitteln:

# debian/ubuntu setup: 
# sudo apt-get install miniupnpc

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

Sie könnten es in einem Skript verwenden, zB für cron wie:

#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#

EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi

5

Höchstwahrscheinlich muss der Router eine Möglichkeit zum Abrufen der externen IP bereitstellen, wenn kein externer Dienst verwendet werden soll oder kann (wie in einigen anderen Antworten bereits angegeben). Für externe Dienste wird in den meisten anderen Antworten ein Webdienst verwendet. Diese Antwort bei Unix SE schlägt vor, stattdessen DNS zu verwenden.

Zum Beispiel digmit OpenDNS als Resolver:

dig +short myip.opendns.com @resolver1.opendns.com

+1, aber am Ende des Tages ist es dasselbe, curl ident.meals würden wir uns auf einen bestimmten Dienst verlassen (in einem myip.opendns,comspeziellen Gehäuse des DNS-Servers)
am

4

Holen Sie sich Informationen von Ihrem Router per ssh oder curl.

Ich verwende curl, um dyndns nach meiner öffentlichen IP-Adresse zu fragen, aber ein solcher Befehl scheint für Sie nicht zutreffend zu sein, oder?

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'


2

Leider gibt es keine Möglichkeit, Mechanismen wie NAT zu erkennen, bei denen kein Remote-Service kontaktiert wird. NAT ist von Natur aus für den Benutzer völlig transparent, abgesehen von fehlerhaften Diensten, und es gibt kein Standardprotokoll für die NAT-Erkennung.

In Bezug auf externe Dienste muss ich jedoch den schnellen und einfachen Dienst vorschlagen, den ich geschrieben habe: ident.me, den Sie sowohl für IPv4 als auch für IPv6 verwenden können. Die einfachste Form, die Sie verwenden können, curl ident.meund die vollständige API finden Sie unter http://api.ident.me/.


1

Wenn Ihr Router NAT PMP (Port Mapping Protocol) unterstützt, können Sie möglicherweise Ihre öffentliche IP-Adresse mit natpmp abrufen.

Es gibt eine Befehlszeilenschnittstelle zur Linux-Bibliothek natpmp mit dem Namen natpmpc. Unter Ubuntu ist es im Paket natpmp-utils enthalten. Mein Router scheint natpmp nicht zu unterstützen, daher bin ich mir nicht sicher, ob das Dienstprogramm natpmpc Ihre öffentliche IP-Adresse zurückgibt.


0

Der von Ihnen gesuchte Linux-Befehl geht davon aus, ifconfigdass Sie direkt mit dem Internet verbunden sind.

Wenn dies nicht der Fall ist und der Zugriff über Proxys oder spezielles Routing erfolgt, ist der einfachste Weg (wie andere angeben), sich bei einem anderen Host anzumelden / auf ihn zuzugreifen und ihn von dort aus zu überprüfen.

Möglicherweise möchten Sie diese Frage auch mit Ihrem freundlichen Administrator für Nachbarschaftssysteme besprechen.


ifconfigist veraltet.
BatchyX

msgstr "Befehl traceroute, gibt aber die lokale IP des LANs an, 192.168.1.1". Es gibt also wohl ein Lan. Daher muss es irgendwo einen Router / Gateway / nat geben. Dann gibt ifconfig keine öffentliche IP-Adresse an, da ops Comp nicht direkt mit dem Internet verbunden ist.

@ BatchyX. Welches Betriebssystem verwenden Sie? Jedes System, auf dem ich laufe, hat ifconfig. Fedora, CentOS, Ubuntu, etc.
Slm

2
@batchx: Und woher bekommst du diese Informationen? Da bin ich nicht einverstanden mit dir.
mdpc

1
@sim: Da ein Befehl vorhanden ist, bedeutet dies nicht, dass er nicht veraltet ist. Schauen Sie sich einfach das ifconfigspäteste Erscheinungsdatum an. Schauen Sie sich jetzt die ìproute2neueste Version an. Eine Quelle finden Sie unter lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.