Bagaimana saya bisa mendapatkan alamat IP publik saya dari baris perintah, jika saya di belakang router?

37

Apakah ada cara bagi saya untuk mendapatkan alamat IP publik (WAN) di baris perintah? Saya berada di belakang router (jaringan LAN), dengan alamat IP dinamis yang ditetapkan oleh ISP saya.

Saya telah melihat solusi menggunakan layanan web eksternal (seperti ifconfig.me), tetapi saya ingin tahu apakah saya bisa melakukannya tanpa layanan eksternal.

pengguna61954
sumber
Bisakah Anda menambahkan rincian lebih lanjut tentang pengaturan jaringan Anda? Apakah Anda di belakang router / switch yang TIDAK memiliki akses ke internet dan Anda mencoba untuk memastikan alamat IP WAN yang router / switch dapatkan dari ISP Anda?
slm
@slm Saya di belakang router dan semut untuk mencari tahu ip yang ditugaskan ke router oleh ISP
user61954
Lihat cara ke-3 yang baru saja saya tambahkan ke jawaban saya. Anda akan ingin melihat apakah ada cara untuk mendapatkan IP WAN Anda dari router Anda. Apa yang membuat / model router?
slm
Anda harus menanyakan beberapa jenis layanan eksternal. Secara umum, komputer tidak tahu dari mana alamat IP komputer lain akan melihat koneksinya berasal.
David Schwartz

Jawaban:

27

Dengan asumsi sistem Anda memiliki 2 perangkat ethernet, eth0dan eth1dan eth0terhubung ke LAN Anda, katakan IP 192.168.1.X dan eth1perangkat Anda terhubung ke ISP (WAN) Anda, Anda akan ingin menggunakan ifconfigperintah berikut untuk mendapatkan IP Anda untuk sisi WAN.

CATATAN: 2 cara pertama mengasumsikan bahwa Anda menjalankannya terhadap komputer yang memiliki 2 perangkat ethernet dan salah satunya terhubung ke ISP Anda (modem kabel dan / atau modem DSL). Dalam skenario ini, perangkat ethernet (eth1) akan dikonfigurasikan dengan alamat IP Anda di internet (WAN IP).

Cara 1

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

Anda juga dapat menggunakan ipperintah.

% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

2nd way

Jika Anda perlu mencari tahu ini dari sistem yang hanya duduk di LAN, Anda dapat mengatur kunci ssh-less ssh dan menambahkannya ke akun di mesin LAN Anda sehingga dapat mengakses sistem dari jarak jauh dengan akses WAN seperti itu.

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

Cara ke-3

Jika Anda tidak dapat ssh ke dalam kotak yang memiliki akses WAN dan Anda menggunakan router / switch rumah seperti kotak Linksys atau Netgear. Anda mungkin bisa mendapatkan IP dari perangkat itu melalui halaman status HTTP. Saya telah melakukan ini di masa lalu juga, sesuatu yang mirip dengan apa yang dijelaskan dalam posting forum whatismyip.com ini .

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

CATATAN: Pendekatan ini sangat tergantung pada router / switch yang Anda miliki, apakah itu merek Linksys, Netgear, dll. Masing-masing akan memiliki halaman unik mereka sendiri dengan IP WAN di atasnya.

Cara 4

Mengirim kueri ke situs internet eksternal yang akan melaporkan kembali alamat IP WAN Anda.

CATATAN: Saya sadar bahwa pertanyaan awal menyebutkan bahwa mereka mencari alternatif untuk pendekatan ini, tetapi saya menaruhnya di sini sehingga jawaban ini mencakup semua pangkalan.

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33

Info tambahan tersedia di sini: HOWTO: Periksa alamat IP eksternal Anda dari baris perintah

slm
sumber
Saya memiliki sesuatu seperti sistem saya terhubung ke router dan terhubung ke intrnet
user61954
5
Karena dia menyatakan dia tidak terhubung langsung, maka tidak ada eth*perangkat yang akan memiliki IP WAN. Kecuali router-nya mendukung ssh, ia memiliki akses, dan ifconfig, ini tidak akan berfungsi. Tidak downvoting, tetapi supaya siapa pun yang mencoba melakukan ini sadar.
AaronLS
Baca kembali pertanyaannya. Dia mengatakan dia memiliki akses LAN, tidak hanya akses internet, item # 1. Item # 2 mengatakan dia mendapatkan IP dinamis dari ISP-nya, saya berasumsi bahwa dia punya sistem lain dalam koneksi LAN-nya saja dan internet ATAU dia punya router rumah / switch b / w dia dan internet.
slm
Para downvoters, coba tinggalkan komentar, jawaban ini sejauh ini adalah yang paling lengkap dan orang-orang tidak memilih. @ user61954 bahkan mengatakan dalam komentarnya bahwa dia berada di belakang router sehingga salah satu metode yang saya jelaskan akan bekerja.
slm
Saya terbalik. Tetapi cara pertama dan kedua tidak berfungsi, itu hanya mengembalikan alamat localip. Terima kasih!
Jared Burrows
12

Jika sistem Anda memiliki ikal yang diinstal (sebagian besar dilakukan), Anda dapat menggunakan

curl ifconfig.me
Rory
sumber
Hei, terima kasih, ini membantu saya, hanya satu pertanyaan, Apa itu "ifconfig.me" Saya tahu fungsi ifconfig, tapi saya biasanya tidak dengan ini. Tolong bisakah Anda memberi saya tautan untuk membacanya atau menjelaskannya. --Perbarui-- tidak membaca pertanyaan. ups
Aby W
ifconfig.me adalah situs web yang memberi Anda IP Anda.
Rory
ifconfig.me tidak mendukung https, jadi mungkin ini tipuan. Bukan ide yang baik untuk menggunakannya untuk memeriksa apakah VPN Anda sudah habis.
Dan Dascalescu
9

Ketika Anda berada di belakang Router NAT dengan UPNP, Anda dapat menggunakan miniupnpc untuk mendeteksi dengan menggunakan alamat ip:

# debian/ubuntu setup: 
# sudo apt-get install miniupnpc

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

Anda dapat menggunakannya dalam skrip misalnya untuk cron seperti:

#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#

EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi
daeme
sumber
5

Kemungkinan besar, router harus menyediakan cara untuk mendapatkan IP eksternal jika tidak ada layanan eksternal yang dapat atau dapat digunakan (karena beberapa jawaban lain sudah ditunjukkan). Untuk layanan eksternal, dalam sebagian besar jawaban lain, layanan web digunakan. Jawaban ini di Unix SE menyarankan untuk menggunakan DNS sebagai gantinya.

Misalnya, menggunakan digdengan OpenDNS sebagai penyelesai:

dig +short myip.opendns.com @resolver1.opendns.com
Ulysses Percival
sumber
+1, tetapi pada akhirnya hari ini sama dengan menggunakan curl ident.mekarena kami mengandalkan layanan tertentu (dalam bahasa myip.opendns,comkhusus-server DNS)
nhed
4

Ambil info dari router Anda melalui ssh atau curl.

Saya menggunakan curl untuk meminta dyndns untuk ip publik saya tetapi perintah seperti itu tampaknya tidak berlaku untuk Anda, bukan?

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'

rhasti
sumber
2

Sayangnya tidak ada cara untuk mendeteksi mekanisme seperti NAT yang tidak melibatkan menghubungi layanan jarak jauh. NAT pada dasarnya benar-benar transparan kepada pengguna, selain layanan yang rusak, dan tidak ada protokol standar untuk penemuan NAT.

Tetapi sejauh menyangkut layanan eksternal, saya harus menyarankan yang cepat dan sederhana yang saya tulis, ident.me, yang dapat Anda gunakan untuk IPv4 dan IPv6; untuk bentuk paling sederhana yang dapat Anda gunakan curl ident.medan API lengkapnya didokumentasikan di http://api.ident.me/

Pierre Carrier
sumber
1

Jika router Anda mendukung NAT PMP (Port Mapping Protocol), Anda mungkin dapat mengambil IP publik Anda menggunakan natpmp.

Ada antarmuka baris perintah ke perpustakaan natpmp linux yang disebut natpmpc. Di ubuntu, itu ada dalam paket natpmp-utils . Router saya tampaknya tidak mendukung natpmp, jadi saya tidak yakin utilitas natpmpc akan mengembalikan IP publik Anda.

Johnny
sumber
0

Perintah linux yang Anda cari ifconfigberasumsi Anda terhubung langsung ke internet.

Jika tidak dan mengakses melalui proxy atau perutean khusus, cara termudah (seperti yang ditunjukkan orang lain) adalah dengan login / mengakses host lain dan memeriksanya dari sana.

Selain itu, Anda mungkin ingin mendiskusikan pertanyaan ini dengan administrator sistem ramah lingkungan Anda.

mdpc
sumber
ifconfigsudah ditinggalkan.
BatchyX
msgstr "perintah traceroute, tetapi ini memberikan ip lokal dari lan, 192.168.1.1". Jadi saya kira ada seorang lan. Karena itu harus ada semacam router / gateway / nat di suatu tempat. Kemudian ifconfig tidak akan memberikan alamat ip publik karena op's comp tidak terhubung langsung ke internet.
@ BatchyX. OS apa yang Anda jalankan? Setiap sistem yang saya jalankan memiliki ifconfig. Fedora, CentOS, Ubuntu, dll.
slm
2
@ Batchx: Dan dari mana Anda mendapatkan informasi itu? Saya tidak setuju dengan Anda tentang hal itu.
mdpc
1
@sim: Karena sebuah perintah hadir tidak berarti itu tidak ditinggalkan. Lihat saja ifconfigtanggal rilis terbaru. Sekarang lihat ìproute2rilis terbaru. Adapun sumbernya, lihat lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX
-1
curl checkip.dyndns.org

sed itu jika Anda perlu

William Entriken
sumber
2
curl icanhazip.com
paradroid