GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mendapatkan alamat IP eksternal saya dalam skrip shell?

Saya sarankan mendapatkannya langsung dari server DNS.

Sebagian besar jawaban lain di bawah ini semuanya melibatkan HTTP ke server jarak jauh. Beberapa dari mereka membutuhkan penguraian output, atau mengandalkan header User-Agent untuk membuat server merespons dalam teks biasa. Itu cukup sering berubah (turun, ganti nama, memasang iklan, mungkin mengubah format keluaran, 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 secara umum lebih terpelihara daripada layanan HTTP whatismyip dot-com baru apa pun yang populer hari ini.
  3. Metode ini pada dasarnya lebih cepat (meskipun hanya beberapa milidetik!).

Menggunakan dig dengan penyelesai 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'

Menanggapi 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 opsi yang sesuai.

Untuk meminta tanggapan berupa alamat IPv4, ganti ANY dengan A; untuk IPv6, ganti dengan AAAA . Perhatikan bahwa itu hanya dapat mengembalikan alamat yang digunakan untuk koneksi. Misalnya, saat menghubungkan melalui IPv6, tidak dapat mengembalikan alamat A.

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 suatu alasan, mungkin ada masalah jaringan. Coba salah satu alternatif di atas terlebih dahulu.

Jika Anda mencurigai adanya masalah lain (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

CATATAN:Ini tentang eksternal Alamat IP (salah satu yang dilihat oleh server di Internet saat Anda terhubung dengannya) - jika Anda ingin internal Alamat IP (yang digunakan komputer Anda sendiri untuk koneksi, yang mungkin berbeda) lihat jawaban ini .

TL;DR - Metode tercepat di tahun 2015

Metode tercepat menggunakan DNS:

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

atau menggunakan externalip:

externalip dns

Tercepat menggunakan HTTP:

curl -s http://whatismyip.akamai.com/

atau menggunakan externalip:

externalip http

Penggunaan HTTPS tercepat dengan sertifikat yang valid:

curl -s https://4.ifcfg.me/

atau menggunakan externalip:

externalip https

Menggunakan telnet:

Dengan nc perintah:

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

atau menggunakan externalip:

externalip telnet

Dengan telnet perintah:

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

Menggunakan FTP:

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

atau menggunakan externalip:

externalip ftp

Semua hal di atas dapat dijalankan menggunakan skrip externalip saya sebagai:

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

Sekarang ceritanya panjang...

Ada banyak opsi dari berbagai server yang menyediakan IP eksternal terutama melalui HTTP yang diposting di sini atau di tempat lain.

Saya membuat patokan untuk melihat apakah ada yang lebih baik dari yang lain dan saya terkejut dengan hasilnya. Misalnya. salah satu ifconfig.me yang paling banyak direkomendasikan hampir selalu yang paling lambat bagi saya, terkadang butuh beberapa detik untuk merespons. Banyak yang tidak berfungsi melalui HTTPS, atau berfungsi tetapi memiliki sertifikat yang tidak valid. Beberapa memiliki waktu respons yang sangat tidak konsisten.

Tolok ukur

HTTP dan HTTPS

Ini adalah sumber skrip tolok ukur eksternal yang saya gunakan:

  • https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark

Anda dapat menjalankannya sendiri untuk melihat layanan mana yang disebutkan di sini yang layak digunakan:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

Hasil saya yang saya dapatkan pada 03-04-2015 dari Warsawa - alamat telah diubah untuk melindungi yang tidak bersalah:

Waktu respons http terbaik:

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

Waktu respons https terbaik:

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(Catatan:ada beberapa respons cepat dengan konten kosong - itu tidak valid.)

Waktu ping rata-rata terbaik:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

Inilah hasil yang saya dapatkan pada 03-04-2015 dari Amsterdam:

Waktu respons http terbaik:

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

Waktu respons https terbaik:

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

Waktu ping rata-rata terbaik:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(Ping 999999 berarti 100% kehilangan paket.)

DNS

Sebagai perbandingan, inilah waktu yang digunakan metode lain - diuji pada 16-06-2015 dari Warsawa dan Amsterdam.

Menggunakan:

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

biasanya membutuhkan waktu (waktu jam dinding sebenarnya) sekitar:

  • 0,035 detik dari Warsawa
  • 0,015 detik dari Amsterdam

Sebenarnya ada empat resolver yang dapat digunakan dengan cara ini:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

Semuanya memberikan waktu respons yang sama di Warsawa dan Amsterdam, tetapi mungkin tidak demikian di lokasi lain.

Menggunakan 208.67.222.222 - IP dari resolver1.opendns.com daripada nama domainnya lebih cepat:

  • 0,023 detik dari Warsawa
  • 0,009 detik dari Amsterdam

tetapi mungkin tidak berfungsi di masa mendatang jika IP pernah berubah (meskipun mungkin tidak mungkin untuk penyelesai DNS yang terkenal - mungkin saya harus menggunakan IP dalam skrip externalip saya - beri komentar).

Telnet

Telnet dengan nc atau telnet perintah (lihat di atas) biasanya memerlukan:

  • 0,103 detik dari Warsawa
  • 0,035 detik dari Amsterdam

(Tidak ada perbedaan mencolok antara nc dan telnet perintah.)

FTP

  • 0,104 detik dari Warsawa
  • 0,036 detik dari Amsterdam

Nama domain

Semua metode akan lebih cepat (terutama saat dijalankan untuk pertama kali) ketika alamat IP akan digunakan alih-alih nama domain dari layanan yang diberikan (kecuali dengan HTTP yang dapat menggunakan server virtual berbasis host dan tidak bekerja dengan IP telanjang - belum diuji) tetapi akan berhenti berfungsi saat layanan mengubah alamat IP sehingga mungkin lebih cepat tetapi kurang tahan terhadap masa depan.

Komentar

Jika Anda melihat beberapa hasil yang menarik dari lokasi Anda, atau jika menurut Anda beberapa host lain harus direkomendasikan daripada yang saya pilih, silakan kirimkan komentar. Jika ada layanan penting yang hilang, beri komentar atau posting masalah di GitHub. Saya ingin terus memperbarui postingan ini dengan pilihan layanan berperforma terbaik saat ini.


 curl -s http://whatismijnip.nl |cut -d " " -f 5

Situs yang diganti dengan situs Belanda yang berfungsi.


Linux
  1. Bagaimana Membuat File Sementara Di Shell Script?

  2. Cara mendapatkan PID dari proses anak bercabang di skrip Shell

  3. Bisakah file .sh menjadi malware?

  1. Bagaimana Cara Mendapatkan Nama Distribusi Dan Nomor Versi Dalam Script Shell Sederhana?

  2. Bagaimana Cara Mendapatkan Alamat Ip Eksternal Dalam Script Shell?

  3. Bagaimana saya bisa mendapatkan nama distribusi dan nomor versi dalam skrip shell sederhana?

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

  2. Bagaimana Menangani Switch Dalam Script Shell?

  3. Bagaimana Cara Mengatur Alamat Proxy Seluruh Sistem Menggunakan Shell Script?