Jika saya cek dengan google, aku bisa melihat IP publik. Apakah ada sesuatu di Ubuntu command-line yang akan menghasilkan saya jawaban yang sama?
Jika anda tidak berada di belakang router, anda dapat menemukannya dengan menggunakan ifconfig
.
Jika anda berada di belakang router, maka komputer anda tidak akan tahu tentang alamat IP publik sebagai router melakukan network address translation. Anda bisa meminta beberapa website apa yang anda alamat IP publik adalah menggunakan keriting
atau wget
dan mengekstrak informasi yang anda butuhkan dari itu:
curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
atau lebih singkat
curl https://ipinfo.io/ip
Untuk mencari ip eksternal, anda bisa menggunakan eksternal layanan berbasis web, atau menggunakan sistem berbasis metode. Yang lebih mudah adalah dengan menggunakan layanan eksternal, juga ifconfig
berdasarkan solusi yang akan bekerja di sistem anda hanya jika anda're tidak balik NAT
. dua metode yang telah dibahas secara rinci di bawah ini.
Cara termudah adalah dengan menggunakan layanan eksternal melalui commandline browser atau men-download alat. Sejak wget
tersedia secara default di Ubuntu, kita bisa menggunakan itu.
Untuk menemukan ip anda, gunakan-
$ wget -qO- https://ipecho.net/plain ; echo
Kesopanan:
Anda juga bisa menggunakan lynx
(browser) atau keriting
di tempat wget
dengan variasi kecil untuk perintah di atas, untuk menemukan ip eksternal anda.
Menggunakan keriting
untuk menemukan ip:
$ curl https://ipecho.net/plain
Untuk yang lebih baik diformat output menggunakan:
$ curl https://ipecho.net/plain ; echo
menggali
dengan OpenDNS
sebagai penyelesai:jawaban lainnya di sini semua pergi melalui HTTP ke server remote. Beberapa mereka membutuhkan parsing output, atau bergantung pada User-Agent header untuk membuat server merespon dalam bentuk teks biasa. Mereka juga berubah cukup sering (turun, mengubah nama mereka, memasang iklan, mungkin berubah output format dll.).
- DNS respon protokol standar (format akan tetap kompatibel).
- Secara historis layanan DNS (OpenDNS, Google Public DNS, ..) cenderung bertahan lebih lama dan lebih stabil, terukur dan umumnya tampak setelah dari apapun new hip whatismyip.com layanan HTTP panas hari ini.
- (bagi mereka geeks yang peduli tentang micro-optimisation), metode ini harus inheren lebih cepat (baik itu hanya dengan beberapa mikro detik).
Menggunakan menggali dengan OpenDNS sebagai penyelesai:
$ dig +short myip.opendns.com @resolver1.opendns.com
111.222.333.444
Disalin dari: https://unix.stackexchange.com/a/81699/14497
Ketik perintah berikut di terminal anda:
$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
Pada kode di atas, ganti <interface_name>
dengan nama anda yang sebenarnya antarmuka, e.g: eth0
, eth1
, pp0
, dll...
Contoh Penggunaan:
$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
Ketik perintah berikut di terminal anda (ini mendapat nama dan alamat ip dari setiap antarmuka jaringan dalam 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.1
ppp0: 111.222.333.444
N. B: Output adalah indikatif dan tidak nyata.
Courtesy: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/
UPDATE
LANG=c
telah ditambahkan ke ifconfig
berdasarkan penggunaan, sehingga selalu memberikan english output, terlepas dari pengaturan lokal.Favorit saya selalu :
curl ifconfig.me
sederhana, mudah untuk mengetik.
Anda akan harus menginstal curl pertama ;)
Jika ifconfig.saya turun cobalah 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 don't memiliki keriting
anda dapat menggunakan wget
sebagai gantinya:
wget -qO- icanhazip.com
I've menemukan segala sesuatu yang dapat mengganggu dan lambat, jadi saya menulis saya sendiri. It's sederhana dan cepat.
API di http://api.ident.me/
Contoh:
curl ident.me
curl v4.ident.me
curl v6.ident.me
Anda bisa menggunakan DNS permintaan bukan dari permintaan HTTP untuk mengetahui IP publik anda:
$ dig +short myip.opendns.com @resolver1.opendns.com
Menggunakan resolver1.opendns.com
server dns untuk menyelesaikan ajaib myip.opendns.com
hostname untuk anda * alamat ip.
Amazon AWS
curl http://checkip.amazonaws.com
Contoh output:
123.123.123.123
Aku seperti itu karena:
Jenis ini sebenarnya, tekan Enter di mana ditunjukkan:
telnet ipecho.net 80
Enter
DAPATKAN /polos HTTP/1.1
Enter
HOST: ipecho.net
Enter
BROWSER: web-kit
Enter
Enter
Ini secara manual mengirimkan permintaan HTTP, yang akan mengembalikan IP anda di bawah HTTP/1.1 200 OK balasan
Contoh output:
$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit
HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html
f
111.222.333.444
0
Untuk ini, STUN diciptakan. Sebagai klien, anda dapat mengirim permintaan ke publik yang tersedia STUN server dan telah memberikan kembali alamat IP yang dilihatnya. Urutkan dari yang tingkat rendah whatismyip.com karena tidak menggunakan HTTP dan tidak rapi dibuat DNS server tapi blazingly cepat SETRUM protokol.
stunclient
Jika anda memiliki stunclient
diinstal (apt-get install stuntman-klien
pada debian/ubuntu), anda hanya dapat melakukan:
$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
di mana A. B. C. D
adalah alamat IP mesin anda di lokal net dan W. X. Y. Z
adalah alamat IP server seperti website yang melihat dari luar (dan salah satu yang anda cari). Menggunakan sed
anda dapat mengurangi output di atas hanya sebuah alamat IP:
stunclient stun.services.mozilla.com |
sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"
Namun, pertanyaan anda adalah bagaimana cara menemukannya dengan menggunakan baris perintah, yang dapat mengecualikan menggunakan SETRUM klien. Jadi saya bertanya-tanya...
bash
SETRUM permintaan dapat buatan tangan, dikirim ke eksternal STUN server menggunakan netcat
dan pasca-diproses menggunakan dd
, hexdump
dan sed
seperti:
$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 binary SETRUM permintaan (0x0001 menunjukkan Mengikat Permintaan) memiliki panjang 8 (0x0008) dengan cookie 0xc00cee dan beberapa disisipkan hal-hal dari wireshark. Hanya empat byte mewakili IP eksternal yang diambil dari jawabannya, dibersihkan dan dicetak.
Bekerja, tapi tidak dianjurkan untuk penggunaan produksi :-)
P. S. Banyak STUN server yang tersedia saat ini adalah teknologi inti untuk SIP dan WebRTC. Menggunakan salah satu dari Mozilla harus aman privasi-bijak tapi anda juga bisa menggunakan yang lain: STUN server list
Anda dapat membaca halaman web hanya menggunakan bash, tanpa keriting
, wget
:
$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
echo 'GET /' >&3 && # send http 0.9 request
read -u 3 && echo $REPLY && # read response
exec 3>&- # close fd
Bagi kita yang memiliki akses masuk ke router, menggunakan script untuk meminta router apa' WAN IP address ini adalah cara yang paling efisien untuk menentukan alamat IP eksternal. Untuk contoh berikut script python print IP eksternal untuk saya Medialink MWN-WAPR300N router:
import urllib, urllib2, cookielib
import re
from subprocess import check_output as co
cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)
def get(url, values=None):
data = None
if values: data = urllib.urlencode(values)
req = urllib2.Request(url, data)
rsp = urllib2.urlopen(req)
return rsp.read()
router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router
get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")
for line in page.split("\n"):
if line.startswith("wanIP = "):
print line.split('"')[1]
exit(1)
Catatan bahwa ini sangat tidak aman (seperti halnya dengan plaintext kredensial & log in untuk sebagian besar router), dan tentu saja tidak portabel (perlu diubah untuk masing-masing router). Namun itu adalah sangat cepat dan sangat wajar solusi aman secara fisik jaringan rumah.
Untuk menyesuaikan script untuk router lain, saya sarankan menggunakan tamperdata addon di firefox untuk menentukan apa permintaan HTTP untuk membuat.
ifconfig
atau untuk yang lebih pendek output:
ifconfig | grep inet
juga
ip addr show
dan mungkin:
hostname -I
wget http://smart-ip.net/myip -O - -q ; echo
N. B. Jika anda don't pikiran untuk menginstal keriting
, ini juga:
curl http://smart-ip.net/myip
Banyak home router dapat dilihat dengan UPnP:
curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s
Kemudian, grep alamat ip dari jawabannya.
grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
Jika anda menggunakan DD-WRT ini bekerja untuk saya:
curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
atau
curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
Di mana 192.168.1.1 Gateway/Router LAN Alamat IP dari DD-WRT router.
The -s komponen berarti diam (yaitu don't menunjukkan curl kemajuan informasi).
Oh, saya harus menyebutkan bahwa aku gunakan di atas dengan "DD-WRT v24 sp2 (01/04/15) std".
Mungkin saya sedikit terlambat, tapi inxi dapat melakukannya cukup mudah.
Install inxi
sudo apt install inxi
Kemudian jalankan perintah berikut
inxi -i
Misalnya dengan informasi saya diblokir menggunakan z
pilihan untuk copy dan paste ke situs-situs seperti ini:
~$ inxi -iz
Network: Card: NVIDIA MCP77 Ethernet driver: forcedeth
IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
WAN IP: <filter>
IF: eth0 ip-v4: <filter> ip-v6-link: N/A
Di mana dikatakan <filter>
adalah di mana anda IP WAN, IPv4, alamat MAC dll akan muncul