/ / Öffentliche IP programmatisch in bash unter Linux entdecken - bash, network, ip

Öffentliches IP programmatisch in bash auf Linux entdecken - bash, networking, ip

Ich habe einen Beitrag gefunden, der das tut, was ich brauche, aber unter Windows:

Öffentliche IP programmgesteuert entdecken

> tracert -d www.yahoo.com

`Tracing route to www-real.wa1.b.yahoo.com [69.147.76.15]
over a maximum of 30 hops:`

1    <1 ms    <1 ms    <1 ms  192.168.14.203
2     *        *        *     Request timed out.
3     8 ms     8 ms     9 ms  68.85.228.121
4     8 ms     8 ms     9 ms  68.86.165.234
5    10 ms     9 ms     9 ms  68.86.165.237
6    11 ms    10 ms    10 ms  68.86.165.242

The 68.85.228.121 is a Comcast (my provider) router. We can ping that:

ping -r 9 68,85,228,121 -n 1

Pinging 68.85.228.121 with 32 bytes of data:

Reply from 68.85.228.121: bytes=32 time=10ms TTL=253 Route: 66.176.38.51 ->

68.85.228.121 ->

68.85.228.121 ->

192.168.14.203

Voila! The 66.176.38.51 is my public IP.

Diese (dritte) Antwort zeigt eine Möglichkeit, die IP-Adresse meines ISPs zu erhalten und anschließend die IP-Adresse per Ping zu erhalten.

Es funktioniert nicht unverändert unter Linux. Traceroute funktioniert anstelle von Tracert, aber da seine Ausgabe unvorhersehbar ist, bin ich nicht sicher, wie ich es analysieren soll.

Ich bin soweit gekommen

IP="$(traceroute -d www.yahoo.com | grep " 2 " | sed -e "s/.*((.*)).*/1/")"

aber der grep ist (schlecht) hart codiert. Ich habe nicht gesehen, wie man Ping wie im Beispiel zum Laufen bringt.

Jede Eingabe wäre dankbar.

Antworten:

4 für die Antwort № 1

Ich persönlich würde diesen Befehl ausführen:

wget -qO- whatismyip.org


0 für die Antwort № 2

Dies ist keine zuverlässige Lösung, sondern ein passiver WegTun Sie dies, indem Sie ein Skript schreiben, um die eigene WAN-Statusseite Ihres Routers aufzurufen. Sie können dies so oft tun, wie Sie möchten, und niemand wird sich über übermäßiges Testen beschweren.


0 für die Antwort № 3

OK, ich weiß, dass dies ein alter Thread ist, aber dieses Posting hat mir einige Dinge gezeigt, und es wurde mit dem kombiniert, was ich bereits gelernt habe.

Das Grep, das Sie wollen, ist:

grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"

Meine persönliche Lösung, meine externe IP-Adresse zu finden, war:

curl icanhazip.com

Jetzt ist es:

ISP=`traceroute -M 2 -m 2 8.8.8.8 | grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"` | ping -R -c 1 -t 1 -s 1 $ISP | grep RR | grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" > .extIP

und dann

cat .extIP

Habe Spaß!


0 für die Antwort № 4

Ich habe einfach das kombiniert, was @pizza mit sagte Dies antworten und produzierte das folgende Arbeitsskript. Es ist nicht so schön wie etwas wie traceroute, aber es ist viel weniger kompliziert.

   #!/bin/bash
content="$(wget http://checkip.dyndns.org/ -q -O -)"
myip="$(<<< "$content" sed -e "s/.*Current IP Address: //" -e "s/<.*//")"
echo "myip = [${myip}]"

Das wget Befehl ruft das Ergebnis der Abfrage von dyndns nach meiner IP-Adresse ab. Dann, sed schneidet alles ab, bevor und nachdem die IP-Adresse zurückgegeben wurde

Wie an anderer Stelle erwähnt, können Websites wie dyndnsSperren Sie solche Anfragen, wenn sie zu häufig gestellt werden. Da Ihre IP-Adresse jedoch in den meisten Situationen mindestens für die Dauer Ihrer Sitzung konstant bleiben sollte, sollten Sie dieses Skript nicht sehr oft ausführen.


0 für die Antwort № 5

WENN Sie sich Einfachheit wünschen, UND Sie sich nicht auf andere Server (oder Dienste) verlassen, versuchen Sie Folgendes:

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

Das wird nur Ihre Adresse ausspucken

oder,

#!/bin/bash
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "myip = [${myip}]"