Perintah untuk menentukan IP publik saya?

Jika saya cek dengan google, Saya dapat melihat IP publik saya. Apakah ada sesuatu di baris perintah Ubuntu yang akan memberi saya jawaban yang sama?

Jika Anda tidak berada di belakang router, Anda dapat menemukannya menggunakan ifconfig.

Jika Anda berada di belakang router, maka komputer Anda tidak akan tahu tentang alamat IP publik karena router melakukan terjemahan alamat jaringan. Anda dapat menanyakan beberapa situs web apa yang digunakan alamat IP publik Anda curl atau wget dan ekstrak informasi yang Anda butuhkan darinya:

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

atau lebih pendek

curl https://ipinfo.io/ip

Untuk menemukan ip eksternal, Anda dapat menggunakan layanan berbasis web eksternal, atau menggunakan metode berbasis sistem. Yang lebih mudah adalah menggunakan layanan eksternal, juga ifconfig solusi berbasis akan bekerja di sistem Anda hanya jika Anda tidak berada di belakang NAT. kedua metode telah dibahas di bawah ini secara rinci.

Menemukan IP eksternal Menggunakan layanan eksternal

Cara termudah adalah dengan menggunakan layanan eksternal melalui browser baris perintah atau alat unduh. Sejak wget tersedia secara default di Ubuntu, kita bisa menggunakannya.
Untuk menemukan ip Anda, gunakan-

$ wget -qO- https://ipecho.net/plain ; echo

Courtesy:

Anda juga bisa menggunakan lynx(browser) atau curl di tempat wget dengan variasi kecil untuk perintah di atas, untuk menemukan IP eksternal Anda.

Menggunakan curl untuk menemukan ip:

$ curl https://ipecho.net/plain

Untuk penggunaan output yang diformat lebih baik:

$ curl https://ipecho.net/plain ; echo

Metode yang lebih cepat (bisa dibilang tercepat) menggunakan dig dengan OpenDNS sebagai resolver:

Jawaban lain di sini semua pergi melalui HTTP ke server jauh. Beberapa dari mereka memerlukan parsing output, atau bergantung pada header User-Agent untuk membuat server merespon dalam teks biasa. Mereka juga berubah cukup sering (turun, mengubah nama mereka, memasang iklan, mungkin mengubah format output dll.).

  1. Protokol respons DNS distandarisasi (formatnya akan tetap kompatibel).
  2. Secara historis layanan DNS (OpenDNS, Google Public DNS,..) cenderung bertahan lebih lama dan lebih stabil, terukur dan umumnya dirawat daripada pinggul baru apa pun whatismyip.com layanan HTTP panas hari ini.
  3. (bagi mereka geeks yang peduli tentang mikro-optimasi), metode ini harus inheren lebih cepat (baik itu hanya dengan beberapa detik mikro).

Menggunakan dig dengan OpenDNS sebagai resolver:

$ dig +short myip.opendns.com @resolver1.opendns.com111.222.333.444

Disalin dari: https://unix.stackexchange.com/a/81699/14497

Menemukan IP eksternal tanpa bergantung pada layanan eksternal

  • Jika Anda tahu nama antarmuka jaringan Anda

Ketik berikut ini di terminal Anda:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

Di atas, ganti <interface_name> dengan nama antarmuka Anda yang sebenarnya, misalnya: eth0, eth1, pp0, dll...

Contoh Penggunaan:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'111.222.333.444
  • Jika Anda tidak tahu nama antarmuka jaringan Anda

Ketik yang berikut ini di terminal Anda (ini mendapatkan nama dan alamat ip dari setiap antarmuka jaringan di sistem Anda):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

Contoh Penggunaan:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'lo: 127.0.0.1ppp0: 111.222.333.444

N. B: Output bersifat indikatif dan tidak nyata.

Courtesy: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

Pembaruan

  1. LANG=c telah ditambahkan ke ifconfig penggunaan berbasis, sehingga selalu memberikan output bahasa Inggris, terlepas dari pengaturan lokal.

Favorit saya selalu :

curl ifconfig.me

sederhana, mudah untuk mengetik.

Anda harus menginstal curl terlebih dahulu ;)

Jika ifconfig.me sedang down coba icanhazip.com dan atau ipecho.net

curl icanhazip.com

atau

curl ipecho.net

icanhazip.com adalah favorit saya.

curl icanhazip.com

Anda dapat meminta IPv4 secara eksplisit:

curl ipv4.icanhazip.com

Jika Anda tidak memiliki curl Anda dapat menggunakan wget sebaliknya:

wget -qO- icanhazip.com

Saya telah menemukan segala sesuatu untuk menjadi menjengkelkan dan lambat, jadi saya menulis saya sendiri. Ini sederhana dan cepat.

API adalah pada http://api.ident.me/

Contoh:

curl ident.mecurl v4.ident.mecurl v6.ident.me

Desain teknis: dalam DNS, ident.me memiliki catatan A dan AAAA, v4.ident.me hanya memiliki catatan A, dan v6.ident.me hanya memiliki catatan AAAA. Port 443 dan 80 pada IP tersebut dilayani oleh nginx, dengan SSL menggunakan sertifikat yang disediakan oleh letsencrypt.org melalui certbot, dan dengan konfigurasi berikut (kutipan):

server {  […]  server_name .ident.me;  location / {    default_type text/plain;    return 200 $remote_addr;    add_header Access-Control-Allow-Origin "*";    add_header Cache-Control "no-cache, no-store, must-revalidate";  }}

Anda dapat menggunakan permintaan DNS alih-alih permintaan HTTP untuk mengetahui IP publik Anda:

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

Ini menggunakan resolver1.opendns.com dns server untuk menyelesaikan magis myip.opendns.com nama host untuk Anda alamat ip.

Amazon AWS

curl https://checkip.amazonaws.com

Contoh keluaran:

123.123.123.123

Juga bekerja pada browser: http://checkip.amazonaws.com

Saya suka karena:

  • ini mengembalikan hanya IP plaintext di badan balasan, tidak ada yang lain
  • ini dari penyedia terkenal yang tidak mungkin offline dalam waktu dekat

Yang saya gunakan adalah :

wget -O - -q icanhazip.com

Ya, Anda dapat memiliki ip : -)

Ketik ini persis, tekan Enter dimana ditunjukkan:

telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
HOST: ipecho.net Enter
BROWSER: web-kitEnter
Enter

Ini secara manual mengajukan permintaan HTTP, yang akan mengembalikan IP Anda di bagian bawah HTTP/1.1 200 OK reply

Contoh keluaran:

$ telnet ipecho.net 80Trying 146.255.36.1...Connected to ipecho.net.Escape character is '^]'.GET /plain HTTP/1.1HOST: ipecho.netBROWSER: web-kitHTTP/1.1 200 OKDate: Tue, 02 Jul 2013 07:11:42 GMTServer: ApacheExpires: Mon, 26 Jul 1997 05:00:00 GMTCache-Control: no-cachePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/htmlf111.222.333.4440

Untuk ini, STUN diciptakan. Sebagai klien, Anda dapat mengirim permintaan ke server STUN yang tersedia untuk umum dan mengembalikannya ke alamat IP yang dilihatnya. Semacam tingkat rendah whatismyip.com karena tidak menggunakan HTTP dan tidak ada server DNS yang dibuat dengan cerdas tetapi protokol STUN yang sangat cepat.

Menggunakan stunclient

Jika Anda memiliki stunclient instalasi (apt-get install stuntman-client pada debian / ubuntu) Anda hanya dapat melakukan:

$stunclient stun.services.mozilla.comBinding test: successLocal address: A.B.C.D:42541Mapped address: W.X.Y.Z:42541

dimana A.B.C.D adalah alamat IP mesin Anda di internet lokal dan W.X.Y.Z adalah Server alamat IP seperti situs web lihat dari luar (dan yang Anda cari). Menggunakan sed Anda dapat mengurangi output di atas hanya alamat IP:

stunclient stun.services.mozilla.com |    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

Namun, pertanyaan anda adalah bagaimana menemukannya menggunakan baris perintah, yang mungkin mengecualikan menggunakan klien STUN. Jadi saya bertanya-tanya...

Menggunakan bash

Permintaan STUN dapat dibuat dengan tangan, dikirim ke server STUN eksternal menggunakan netcat dan menjadi pasca-diproses menggunakan dd, hexdump dan sed seperti begitu:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |    nc -u -w 2 stun.services.mozilla.com 3478 |    dd bs=1 count=4 skip=28 2>/dev/null |    hexdump -e '1/1 "%u."' |    sed 's/\.$/\n/'

Echo mendefinisikan permintaan setrum biner (0x0001 menunjukkan permintaan pengikatan) memiliki panjang 8 (0x0008) dengan cookie 0xc00cee dan beberapa barang yang ditempel dari wireshark. Hanya empat byte yang mewakili IP eksternal yang diambil dari jawaban, dibersihkan dan dicetak.

Bekerja, tetapi tidak direkomendasikan untuk penggunaan produksi :-)

PS banyak server STUN tersedia karena merupakan teknologi inti untuk SIP dan WebRTC. Menggunakan satu dari Mozilla harus aman dari segi privasi tetapi Anda juga bisa menggunakan yang lain: Daftar server STUN

“memiliki IP dinamis”, “SSH menggunakan beberapa sistem lain di internet”, “perintah yang akan menampilkan IP publik saat ini”. Anda melihat masalah ayam / telur di sini? Bagaimana Anda dapat menjalankan perintah di server jarak jauh tanpa mengetahui alamatnya? Anda mungkin lebih tertarik pada layanan seperti no-ip.com / DynDNS.org.

PS ip at DuckDuckGo (tidak ada baris perintah, tapi tidak ada kakak G Tidak)

Mungkin ini harus menjadi pertanyaan terpisah, tetapi saya ingin melihat peringatan ketika alamat IP publik saya berubah. Untuk saat ini, saya hanya menggunakan jawaban berikut di crontab dengan notify-send.

seseorang tidak dapat SSH tanpa mengetahui IP Publik Teman saya… dynDNS biaya banyak dan No-ip bekerja keras tetapi situasi tidak memungkinkan itu… pokoknya pertanyaannya sudah dijawab… terima kasih atas saran Anda

solusi hebat di bawah ini. Untuk Centos gunakan: ‘ifconfig eth1 / sed-nre’ / ^ [ ^ ] +/ {N;s / ^ ([^]+).* inet * ([ ^ ]+).*/ \ 2 / p}" di mana eth1 adalah perangkat jaringan O bunga, Anda dapat menghilangkan string ‘et1’ untuk menampilkan semua IP dari semua adapter. Alih-alih\2Anda dapat menulis` \1 \2 ’ untuk menunjukkan nama masing-masing adaptor juga.

Tak satu pun dari jawaban menunjukkan pendekatan yang benar. Karena saya tidak memiliki reputasi yang cukup untuk memposting jawaban, saya akan memposting komentar tentang cara mendapatkannya tanpa bergantung pada layanan eksternal. Jalankan saja di terminal ’ $ hostname – ip-address`