Apakah Anda mencoba melakukan ini secara terprogram?
Andrew Keith
ya dalam skrip shell
shantanuo
1
Apakah Anda menggunakan Linux, MacOSX, FreeBSD, dll? Output dari 'ifconfig' berbeda untuk OS yang berbeda ini, dan perintah 'ip' tidak ada pada MacOSX. Apakah Anda mencari IP komputer Anda (Anda akan memerlukan skrip shell untuk menguraikan ifconfig, atau sesuatu), atau router Anda (Situs web di bawah ini mungkin berfungsi)?
Stefan Lasiewski
Jawaban:
49
curl ifconfig.me
curl ifconfig.me/ip (hanya untuk ip)
curl ifconfig.me/all (untuk info lebih lanjut, perlu waktu)
Itu keren. Untuk versi yang lebih mudah diingat, Anda dapat memasukkan dig @resolver1.opendns.com myip.opendns.com. Atau pada Windows: nslookup myip.opendns.com resolver1.opendns.com.
Michael Kropat
2
Apa yang paling berhasil bagi saya: dig @208.67.222.220 myip.opendns.com +shortuntuk mendapatkan ip secara langsung tanpa harus melalui seluruh jawaban.
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 -4dan 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.comhanya 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.comtidak otoritatif untuk myip.opendns.com.
Catatan yang o-o.myaddr.l.google.comterlihat 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
@ Matt3o12 <saya menemukan OpenDNS: dig +short AAAA myip.opendns.com @2620:0:ccc::2.
bufh
Saat ini metode mendapatkan catatan TXT dari Google mendukung IPv4 dan IPv6 sehingga Anda harus menentukan -4atau -6jika Anda memerlukan versi IP tertentu.
Martin
12
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;
Anda terhubung langsung ke internet (tidak ada NAT / proxy / VPN dll)
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:
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.
Ini menyajikan teks biasa dengan jenis teks / html ...
bortzmeyer
bukankah itu menampilkan IP Anda di browser Anda?
2
Namun dengan tipe yang salah.
bortzmeyer
@ Bortzmeyer Eh, apa "tipe yang tepat"? text/htmlbaik untuk apa yang dikembalikan API semu - itu pasti bukan XML atau JSON. text/plainmungkin, tetapi sepenuhnya dapat digunakan sebagai text/html.
ceejayoz
3
+1 untuk laman yang tidak perlu digenggam. Jugawget -q -O - http://wgetip.com/
Google karena alasan yang aneh hanya menunjukkan alamat IP Anda berdasarkan User-Agentstring 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.
Ini mengembalikan alamat IP internal yang tidak diminta. Tetapi, untuk informasi Anda, Anda juga dapat melakukan ini dengan perintah hostname -I(huruf 'i').
Redsandro
3
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.
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.
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:
Tentu saja, ini didasarkan pada asumsi bahwa saya memiliki akses admin ke router, dan itu adalah router berbasis linux, dengan perintah ifconfig tersedia.
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.
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
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.
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
sumber
curl http://checkip.amazonaws.com/
Anda bisa meminta
myip.opendns.com
. dari OpenDNS.dig @208.67.222.220 myip.opendns.com
sumber
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 Googletxt
, yang mungkin sebenarnya berfungsi untuk IPv6). IPv6 suatu hari, jika diaktifkan dengan benar oleh Google)).Catatan yang
myip.opendns.com
hanya dapat diselesaikan melaluiresolver1.opendns.com
, dan tidak denganauth1.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, karenaresolver1.opendns.com
tidak otoritatif untukmyip.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):sumber
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:
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;
sumber
Saya menulis layanan web yang sederhana dan cepat untuk ini.
Anda dapat meminta IPv4 Anda:
Atau IPv6:
Dan API didokumentasikan di http://api.ident.me/
sumber
Satu cara: http://www.whatismyip.com/
sumber
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
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.
sumber
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:
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:
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.
sumber
Salah satu caranya adalah, Anda dapat membuat permintaan ke halaman di
http://www.biranchi.com/ip.php
ia mengembalikan alamat IP sistem Anda
sumber
text/html
baik untuk apa yang dikembalikan API semu - itu pasti bukan XML atau JSON.text/plain
mungkin, tetapi sepenuhnya dapat digunakan sebagaitext/html
.wget -q -O - http://wgetip.com/
Google sekarang menampilkan alamat IP publik Anda: http://www.google.com/search?q=ip
sumber
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.
Bagus dan sederhana.
sumber
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:
atauUntuk Nama Inang publik:
Untuk semua informasi dalam file XML:
dll ... cukup periksa http://ifconfig.me
sumber
Saya sering melakukan ini, dan dari banyak perangkat, jadi saya membuat dua layanan saya sendiri di server:
file php di root server web:
Penggunaan pada shell:
juga bekerja dengan ipv6:
Dengan netcat:
Pada router Cisco:
peretasan cepat dengan server telnet khusus: xinetd spawning / usr / bin / env:
dan kemudian telnet ke sana:
bekerja sama dengan router:
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.
sumber
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:
Saya kemudian menjalankan skrip di atas seperti ini untuk mendapatkan ip publik:
Tentu saja, ini didasarkan pada asumsi bahwa saya memiliki akses admin ke router, dan itu adalah router berbasis linux, dengan perintah ifconfig tersedia.
sumber
Gandakan banyak pertanyaan lain (maka -1 suara saya).
sumber
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).
sumber
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:
yang akan memberi Anda baris yang berisi alamat ip pada respons http, lalu uraikan dengan sed, awk, dll.
sumber
Anda dapat menggunakan hanya shell untuk memeriksa ip eksternal Anda, juga menggunakan penyedia eksternal
keluaran
sumber
sumber
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 "/"
sumber
sumber
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.
sumber
Pada OS X berikut adalah dua solusi sederhana untuk mendapatkan IP privat dan publik (dengan kode bonus jika Anda menggunakan LaunchBar).
IP pribadi
Skrip LaunchBar
IP publik
Skrip LaunchBar
sumber