GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mendapatkan Alamat Ip Eksternal Dalam Script Shell?

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.).

  1. Protokol respons DNS distandarisasi (formatnya akan tetap kompatibel).
  2. 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.
  3. 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

Linux
  1. Bagaimana Cara Mendapatkan Alamat Ip Sendiri Dan Menyimpannya Ke Variabel Dalam Script Shell?

  2. Bagaimana Cara Membaca Seluruh Script Shell Sebelum Mengeksekusinya?

  3. Arti dari $? Dalam Skrip Shell?

  1. Bagaimana cara mendapatkan konten halaman web dalam variabel Shell?

  2. Bagaimana cara mengeksekusi kode di shell Django dengan skrip python eksternal?

  3. Bagaimana cara mendapatkan pid dari suatu proses dan mengaktifkan kill -9 di skrip Shell?

  1. Bagaimana Cara Mengenkripsi Atau Membuat Skrip Shell Tidak Dapat Dibaca?

  2. Bagaimana Mendapatkan Deskripsi Opsi `shopt` yang Tersedia?

  3. Bagaimana cara mendapatkan alamat IP saya dari baris perintah?