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:
- https://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html
- https://ipecho.net/plain
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.).
- Protokol respons DNS distandarisasi (formatnya akan tetap kompatibel).
- 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.
- (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
-
LANG=c
telah ditambahkan keifconfig
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 80
EnterGET /plain HTTP/1.1
EnterHOST: ipecho.net
EnterBROWSER: web-kit
Enter
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.
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\2
Anda 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`