Saya perlu menemukan alamat IP eksternal saya dari skrip shell. Saat ini saya menggunakan fungsi ini:
myip () {
lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
Tapi itu tergantung pada perl-libwww
, perl-html-format
, perl-html-tree
diinstal. Apa cara lain untuk mendapatkan IP eksternal saya?
Jawaban yang Diterima:
Saya sarankan untuk mendapatkannya langsung dari server DNS.
Sebagian besar jawaban lain di bawah semuanya melibatkan pengalihan HTTP ke server jarak jauh. Beberapa dari mereka memerlukan penguraian output, atau mengandalkan header User-Agent untuk membuat server merespons dalam teks biasa. Itu cukup sering berubah (turun, ganti nama, pasang iklan, mungkin mengubah format output, dll.).
- Protokol respons DNS distandarisasi (formatnya akan tetap kompatibel).
- Secara historis, layanan DNS (Akamai, Google Public DNS, OpenDNS, ..) cenderung bertahan lebih lama dan lebih stabil, lebih terukur, dan umumnya lebih terawat daripada apa pun layanan HTTP whatismyip dot-com baru yang populer hari ini.
- Metode ini pada dasarnya lebih cepat (baik hanya beberapa milidetik!).
Menggunakan dig
dengan resolver OpenDNS:
$ dig @resolver4.opendns.com myip.opendns.com +short
Mungkin alias di bashrc
Anda jadi mudah diingat
# 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'
Merespons dengan alamat ip biasa:
$ wanip # wanip4, or wanip6
80.100.192.168 # or, 2606:4700:4700::1111
Sintaks
(Disingkat dari 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
jenis kueri mengembalikan catatan AAAA atau A. Untuk memilih koneksi IPv4 atau IPv6 secara khusus, gunakan -4
atau -6
pilihan yang sesuai.
Untuk meminta respons berupa alamat IPv4, ganti APAPUN dengan A
; untuk IPv6, ganti dengan AAAA
. Perhatikan bahwa itu hanya dapat mengembalikan alamat yang digunakan untuk koneksi. Misalnya, saat menghubungkan melalui IPv6, alamat A tidak dapat dikembalikan.
Server alternatif
Berbagai penyedia DNS menawarkan layanan ini, termasuk OpenDNS, Akamai, dan 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"
Contoh alias yang secara khusus meminta alamat IPv4:
# https://unix.stackexchange.com/a/81699/37512
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'
$ wanip4
80.100.192.168
Dan untuk alamat IPv6 Anda:
# 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"
Pemecahan Masalah
Jika perintah tidak berfungsi karena alasan tertentu, mungkin ada masalah jaringan. Cobalah salah satu alternatif di atas terlebih dahulu.
Terkait:Mencoba memulihkan data dari drive RAID eksternal?
Jika Anda mencurigai adanya masalah yang berbeda (dengan penyedia upstream, alat baris perintah, atau yang lainnya), jalankan perintah tanpa +short
opsi untuk mengungkapkan detail kueri DNS. Misalnya:
$ 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