GNU/Linux >> Znalost Linux >  >> Linux

Jak získat externí IP adresu ve skriptu Shell?

Potřebuji najít svou externí IP adresu ze skriptu shellu. V tuto chvíli používám tuto funkci:

myip () { 
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}

Ale záleží na perl-libwww , perl-html-format , perl-html-tree nainstalováno. Jaké další způsoby mohu získat svou externí IP?

Přijatá odpověď:

Doporučuji získat jej přímo ze serveru DNS.

Většina ostatních odpovědí níže zahrnuje přechod přes HTTP na vzdálený server. Některé z nich vyžadovaly analýzu výstupu nebo se spoléhaly na hlavičku User-Agent, aby server odpověděl v prostém textu. Ty se mění poměrně často (sestupte dolů, změňte jejich jméno, zobrazujte reklamy, mohou změnit výstupní formát atd.).

  1. Protokol odpovědi DNS je standardizován (formát zůstane kompatibilní).
  2. Historicky mají služby DNS (Akamai, Google Public DNS, OpenDNS, ..) tendenci přežívat mnohem déle a jsou stabilnější, škálovatelnější a obecně více opečovávané než jakákoliv nová hip whatismyip dot-com HTTP služba dnes.
  3. Tato metoda je ze své podstaty rychlejší (byť jen o několik milisekund!).

Pomocí dig s OpenDNS resolverem:

$ dig @resolver4.opendns.com myip.opendns.com +short

Možná alias ve vašem bashrc takže je snadno zapamatovatelné

# https://unix.stackexchange.com/a/81699/37512
alias wanip='dig @resolver4.opendns.com myip.opendns.com +short' 
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'
alias wanip6='dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6'

Odpoví obyčejnou IP adresou:

$ wanip # wanip4, or wanip6
80.100.192.168 # or, 2606:4700:4700::1111

Syntaxe

(Zkráceno z https://ss64.com/bash/dig.html) :

usage:  dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]

    q-type   one of (A, ANY, AAAA, TXT, MX, ...). Default: A.

    d-opt    ...
             +[no]short          (Display nothing except short form of answer)
             ...

    q-opt    one of:
             -4                  (use IPv4 query transport only)
             -6                  (use IPv6 query transport only)
             ...

ANY Typ dotazu vrátí záznam AAAA nebo A. Chcete-li konkrétně preferovat připojení IPv4 nebo IPv6, použijte -4 nebo -6 odpovídající možnosti.

Chcete-li, aby odpověď byla adresa IPv4, nahraďte ANY za A; pro IPv6 jej nahraďte AAAA . Všimněte si, že může vrátit pouze adresu použitou pro připojení. Například při připojení přes IPv6 nemůže vrátit adresu A.

Alternativní servery

Tuto službu nabízejí různí poskytovatelé DNS, včetně OpenDNS, Akamai a Google Public DNS:

# OpenDNS (since 2009)
$ dig @resolver3.opendns.com myip.opendns.com +short
$ dig @resolver4.opendns.com myip.opendns.com +short
80.100.192.168

# OpenDNS IPv6
$ dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6
2606:4700:4700::1111

# Akamai (since 2009)
$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

# Akamai approximate
# NOTE: This returns only an approximate IP from your block,
# but has the benefit of working with private DNS proxies.
$ dig +short TXT whoami.ds.akahelp.net
"ip" "80.100.192.160"

# Google (since 2010)
# Supports IPv6 + IPv4, use -4 or -6 to force one.
$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

Příklad aliasu, který konkrétně požaduje adresu IPv4:

# https://unix.stackexchange.com/a/81699/37512
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'

$ wanip4
80.100.192.168

A pro vaši adresu IPv6:

# https://unix.stackexchange.com/a/81699/37512
alias wanip6='dig @ns1.google.com TXT o-o.myaddr.l.google.com +short -6'

$ wanip6
"2606:4700:4700::1111"

Odstraňování problémů

Pokud příkaz z nějakého důvodu nefunguje, může být problém se sítí. Nejprve vyzkoušejte jednu z výše uvedených alternativ.

Související:Pokoušíte se obnovit data z externího disku RAID?

Pokud máte podezření na jiný problém (s poskytovatelem upstream, nástrojem příkazového řádku nebo něčím jiným), spusťte příkaz bez +short možnost odhalit podrobnosti dotazu DNS. Například:

$ dig @resolver4.opendns.com myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  A

;; ANSWER SECTION:
myip.opendns.com.   0   IN  A   80.100.192.168

;; Query time: 4 msec

Linux
  1. Jak získat název aktuální větve git do proměnné v shell skriptu?

  2. Jak získat obsah webové stránky v proměnné shellu?

  3. Jak získat PYTHONPATH v shellu?

  1. Jak získat PID z rozvětveného podřízeného procesu ve skriptu shellu

  2. Jak získat výstupní kód vytvořeného procesu ve skriptu očekávaného shellu?

  3. Získejte MAC adresu pomocí shell skriptu

  1. Jak získat vlastní IP adresu a uložit ji do proměnné ve skriptu Shell?

  2. Jak zašifrovat nebo vykreslit skript Shell jako nečitelný?

  3. Jak mohu získat svou externí IP adresu v shell skriptu?