Saya dapat menemukan alamat IP saya menggunakan perintah ifconfig atau hostname -i.
Tetapi bagaimana cara menemukan IP Publik saya?
(Saya memiliki IP publik statis tapi saya ingin mengetahuinya menggunakan perintah unix)
Saya dapat menemukan alamat IP saya menggunakan perintah ifconfig atau hostname -i.
Tetapi bagaimana cara menemukan IP Publik saya?
(Saya memiliki IP publik statis tapi saya ingin mengetahuinya menggunakan perintah unix)
Jawaban:
curl ifconfig.me
curl ifconfig.me/ip
(hanya untuk ip)
curl ifconfig.me/all
(untuk info lebih lanjut, perlu waktu)
Untuk perintah lebih lanjut, kunjungi: http://ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
Anda bisa meminta myip.opendns.com
. dari OpenDNS. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. Atau pada Windows: nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
untuk mendapatkan ip secara langsung tanpa harus melalui seluruh jawaban.
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Perhatikan bahwa di atas hanya berfungsi untuk IPv4 saat ini (tidak ada satupun dari resolver ini yang tampaknya memiliki IPv6 saat ini, tetapi jika Anda menghilangkan -4
dan eksplisit -t a
, maka Anda berisiko menerobosnya di masa depan (dengan pengecualian Google txt
, yang mungkin sebenarnya berfungsi untuk IPv6). IPv6 suatu hari, jika diaktifkan dengan benar oleh Google)).
Catatan yang myip.opendns.com
hanya dapat diselesaikan melalui resolver1.opendns.com
, dan tidak dengan auth1.opendns.com
- jadi, mereka tampaknya melakukan beberapa pembajakan DNS dan man-in-the-middle dari nama domain mereka sendiri! Dengan demikian, Anda tidak dapat menggunakannya untuk menemukan IP dari resolver acak, karena resolver1.opendns.com
tidak otoritatif untuk myip.opendns.com
.
Catatan yang o-o.myaddr.l.google.com
terlihat seperti pendekatan yang paling fleksibel dan tahan masa depan; itu bahkan bagus untuk menguji apakah resolver DNS Anda mendukung ekstensi EDNS0 eksperimental untuk subnet klien (yang sangat sedikit resolver yang memiliki dukungan untuk):
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
atau -6
jika Anda memerlukan versi IP tertentu.
Anwser yang sangat sederhana jika Anda memiliki akses internet adalah:
curl icanhazip.com
Ingatlah, mempercayai sumber pihak ketiga untuk IP Anda mungkin bermasalah terutama jika apa yang Anda lakukan dengan data itu memiliki makna khusus.
Cara yang lebih dapat dipercaya adalah dengan memilih server DNS yang dikenal dan dapat dipercaya (idealnya menjalankan DNSSEC) dan menanyakan nama host kotak itu, asalkan server DNS Anda berisi entri tersebut;
dig @trustworthysource.com +short `hostname`
Saya menulis layanan web yang sederhana dan cepat untuk ini.
curl ident.me
Anda dapat meminta IPv4 Anda:
curl v4.ident.me
Atau IPv6:
curl v6.ident.me
Dan API didokumentasikan di http://api.ident.me/
Satu cara: http://www.whatismyip.com/
Jika
maka Anda bisa mem-parsing output dari ifconfig untuk alamat IP antarmuka (bagian "inet addr:") untuk mendapatkan daftar alamat IP semua antarmuka Anda. Satu alamat IP yang tidak dalam jangkauan pribadi (lihat http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ) adalah alamat IP publik Anda.
Daftar yang sama juga dapat diperoleh melalui
ip addr show
yang mungkin lebih mudah diurai.
Jika Anda tidak memiliki koneksi internet langsung (NAT dll.), Tidak ada cara untuk menemukan alamat IP publik Anda tanpa bantuan eksternal (karena komputer Anda tidak mengetahuinya). Maka Anda harus melakukannya seperti pada jawaban lainnya.
Saya mengambil pendekatan yang sedikit berbeda dengan menggunakan protokol STUN yang dirancang untuk NAT Traversal. Jika Anda menggunakan Ubuntu, Anda cukup menginstal paket "setrum" dengan mengetik:
sudo apt-get install stun
Paket menginstal server STUN yang mungkin tidak Anda perlukan, tetapi juga dilengkapi dengan klien uji STUN yang saya gunakan untuk menyelesaikan masalah ini. Sekarang Anda dapat mengambil IP publik Anda dengan satu (tidak begitu sederhana) perintah:
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
Sekarang, apa yang dilakukannya adalah: stun menghubungi server STUN publik "stunserver.org" dan mendapatkan jawaban kembali dengan IP publik Anda, sisanya dari perintah ini hanya untuk menyaring IP dari output.
Salah satu caranya adalah, Anda dapat membuat permintaan ke halaman di
http://www.biranchi.com/ip.php
ia mengembalikan alamat IP sistem Anda
text/html
baik untuk apa yang dikembalikan API semu - itu pasti bukan XML atau JSON. text/plain
mungkin, tetapi sepenuhnya dapat digunakan sebagai text/html
.
wget -q -O - http://wgetip.com/
Google sekarang menampilkan alamat IP publik Anda: http://www.google.com/search?q=ip
User-Agent
string yang disediakan untuk halaman tersebut. Dengan Firefox, ini berfungsi; tetapi SeaMonkey dengan string "Firefox" dinonaktifkan (melalui "general.useragent.compatMode.firefox" disetel ke false), tiba-tiba tidak. Sama sekali tidak tahu mengapa Google secara eksplisit mengaktifkan hal-hal seperti ini hanya untuk Firefox dan bukan sembarang Tokek, karena ada banyak peramban desktop lain yang berbasis pada Tokek yang sama-sama kompatibel, termasuk SeaMonkey.
Oke ... Saya tahu bahwa ini adalah WAY setelah fakta dan mungkin bahkan tidak layak untuk diposkan, tetapi inilah solusi kerja saya.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Bagus dan sederhana.
hostname -I
(huruf 'i').
Cara paling sederhana adalah dengan menggunakan http://ifconfig.me/ , seperti yang disarankan.
Pada halaman ini, Anda akan tahu perintah apa yang digunakan untuk informasi apa yang ingin Anda ambil.
Untuk IP:
ikal ifconfig.meatau
ikal ifconfig.me/ip
Untuk Nama Inang publik:
ikal ifconfig.me/host
Untuk semua informasi dalam file XML:
ikal ifconfig.me/all.xml
dll ... cukup periksa http://ifconfig.me
Saya sering melakukan ini, dan dari banyak perangkat, jadi saya membuat dua layanan saya sendiri di server:
file php di root server web:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Penggunaan pada shell:
$ curl -4 mydomain.com
79.22.192.12
juga bekerja dengan ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Dengan netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Pada router Cisco:
router#more http://myserver.com/index.php
79.22.192.12
peretasan cepat dengan server telnet khusus: xinetd spawning / usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
dan kemudian telnet ke sana:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
bekerja sama dengan router:
router#telnet myserver.com
79.22.192.12
Dengan cara ini Anda dapat membuatnya berfungsi di jaringan internal Anda, jika beberapa nat atau proksi terlibat dalam komunikasi dan Anda ingin tahu dari IP apa Anda muncul.
Itu tidak memerlukan layanan pihak ketiga.
Untuk menghindari mengandalkan sumber-sumber eksternal, saya menggunakan harapkan, untuk melakukan telnet ke router saya dan mendapatkan alamat ip dari antarmuka publiknya. Berikut ini contoh skrip harapan:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
Saya kemudian menjalankan skrip di atas seperti ini untuk mendapatkan ip publik:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Tentu saja, ini didasarkan pada asumsi bahwa saya memiliki akses admin ke router, dan itu adalah router berbasis linux, dengan perintah ifconfig tersedia.
Gandakan banyak pertanyaan lain (maka -1 suara saya).
Solusi skrip shell sederhana dapat ditemukan di sini:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Bekerja di Linux, FreeBSD, SunOS dan Apple Darwin (dengan sedikit modifikasi).
Jika yang Anda inginkan adalah menemukan alamat ip eksternal pada router Anda, Anda bisa bertanya pada router itu sendiri untuk alamatnya, atau meminta seseorang di luar untuk mendapatkannya untuk Anda ..
untuk cara manual, Anda dapat menelusuri situs-situs yang diberikan di atas yang akan mengembalikan ip permintaan incomming.
Untuk cara otomatis, Anda dapat mencoba:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
yang akan memberi Anda baris yang berisi alamat ip pada respons http, lalu uraikan dengan sed, awk, dll.
Anda dapat menggunakan hanya shell untuk memeriksa ip eksternal Anda, juga menggunakan penyedia eksternal
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
keluaran
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -m1
Saya melakukan ini. Itu hanya memberi saya IP tanpa keterlibatan pihak ketiga ..
ip addr show | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | cut -f1 -d "/"
Berikut adalah alternatif lain yang bergantung pada host yang bisnisnya memutuskan untuk mengelola IP dinamis daripada situs "layanan publik" yang mungkin hilang atau mengubah format.
1) Daftarkan server Anda di salah satu dari banyak layanan dns dinamis gratis (mis. No-ip.com) Ini akan memberi Anda entri DNS seperti xxx.no-ip.org.
2) Instal alat pembaruan dinamis layanan (melaporkan perubahan IP ke layanan).
Untuk mendapatkan alamat IP dalam skrip, cukup lakukan:
$external_ip = `dig +short xxx.no-ip.org`
Sangat bagus untuk digunakan dalam pekerjaan cron untuk memeriksa apakah IP dinamis telah berubah dan beberapa entri konfigurasi perlu diubah.
Pada OS X berikut adalah dua solusi sederhana untuk mendapatkan IP privat dan publik (dengan kode bonus jika Anda menggunakan LaunchBar).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"