Як я можу отримати свою загальнодоступну IP-адресу з командного рядка, якщо я за маршрутизатором?


37

Чи є спосіб отримати мою публічну (WAN) IP-адресу в командному рядку? Я за маршрутизатором (мережа LAN) з динамічною IP-адресою, призначеною моїм провайдером.

Я бачив рішення за допомогою зовнішньої веб-служби (наприклад, ifconfig.me), але хочу знати, чи можу я це зробити без зовнішньої служби.


Чи можете ви додати більше деталей щодо налаштування вашої мережі? Ви за маршрутизатором / комутатором , який робить доступ до Інтернету , і ви намагаєтеся встановити WAN IP - адреса, маршрутизатор / комутатор , отримуючи від провайдера?
slm

@slm Я за маршрутизатором і мурашкою, щоб дізнатися про ip, призначений маршрутизатору ISP
user61954

Дивіться 3-й спосіб, який я щойно додав до своєї відповіді. Ви хочете дізнатися, чи є спосіб отримати ваш WAN IP від ​​маршрутизатора. Який маркою / моделлю є роутер?
slm

Ви повинні запитувати якусь зовнішню службу. Взагалі кажучи, комп'ютер не має уявлення, з якої IP-адреси інші комп’ютери будуть бачити його з'єднання.
Девід Шварц

Відповіді:


27

Якщо припустити , що система має 2 локальних мереж пристроїв, eth0а eth1й eth0підключений до локальної мережі, скажімо , IP - адреси 192.168.1.X і ваше eth1пристрій підключено до провайдера (WAN) , який ви збираєтеся хочете використовувати наступну ifconfigкоманду , щоб отримати IP - адреса для WAN сторона.

ПРИМІТКА. Перші два способи передбачають, що ви керуєте ними на комп’ютері, який має 2 пристрої Ethernet і один з них підключений до вашого провайдера (кабельний модем та / або DSL-модем). У цьому випадку пристрій Ethernet (eth1) буде налаштовано з вашою IP-адресою в Інтернеті (WAN IP).

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

Ви також можете використовувати ipкоманду.

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

2-й спосіб

Якщо вам потрібно це дізнатись із системи, яка сидить лише в локальній мережі, ви можете встановити ключ ssh без паролів і додати його до облікового запису на вашій локальній мережі, щоб він міг віддалено отримувати доступ до системи з таким WAN-доступом.

                                                            +----------------+
  +--------+    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

3-й спосіб

Якщо ви не в змозі ввімкнути скриньку у вікно, у якому є доступ до WAN, і ви використовуєте домашній маршрутизатор / комутатор, наприклад, вікно Linksys або Netgear. Ви можете отримати IP-адресу з цього пристрою через сторінку статусу HTTP. Я це робив і в минулому, щось подібне до того, що описано в цій публікації на форумі whatismyip.com .

                                                               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

ПРИМІТКА. Цей підхід сильно залежить від того, який маршрутизатор / комутатор у вас є, будь то марка Linksys, Netgear тощо. У кожного буде своя унікальна сторінка з WAN IP на ній.

4-й спосіб

Надсилання запиту на зовнішній веб-сайт, який повідомить про вашу IP-адресу WAN.

ПРИМІТКА. Я знаю, що в первинному питанні було зазначено, що вони шукають альтернативи цьому підходу, але я вкладаю його сюди, щоб ця відповідь охоплювала всі підстави.

                                                        +---------------+
  +-------------+   +--------+   +------+     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

Додаткову інформацію можна отримати тут: ЯК: Перевірте зовнішню IP-адресу з командного рядка


У мене щось на кшталт моєї системи підключається до маршрутизатора, і він підключений до внутрішньої мережі
user61954

5
Оскільки він заявив, що він не підключений безпосередньо, то жоден з eth*пристроїв не матиме WAN IP. Якщо його маршрутизатор не підтримує ssh, він має доступ, і якщоconfig, це не спрацює. Не зволікаючи, але просто так усвідомлює кожен, хто намагається це зробити.
AaronLS

Перечитайте його запитання. Він каже, що має доступ до локальної мережі, просто не доступ до Інтернету, пункт №1. Пункт №2 говорить, що він отримує динамічний IP від ​​свого Інтернет-провайдера, я припускаю, що у нього є інша система в / ч з його LAN-з'єднанням та Інтернетом АБО він має домашній маршрутизатор / комутатор з ним / Інтернетом.
slm

Покірники, спробуйте залишити коментар, ця відповідь на сьогоднішній день є найбільш повною, і все ж люди не мають права голосу. @ user61954 навіть сказав у коментарях, що він стоїть за маршрутизатором, тому один із описаних нами методів буде працювати.
slm

Я схвалив. Але перший і другий спосіб не працюють, він лише повертає адресу локаліпу. Спасибі!
Джаред Берроуз

12

Якщо у вашій системі встановлено curl (більшість), ви можете використовувати

curl ifconfig.me

Гей, дякую, допомога мені, лише одне запитання: Що таке "ifconfig.me" Я знаю функцію ifconfig, але я зазвичай не з цим. Будь ласка, можете надати мені посилання, щоб прочитати про нього чи пояснити його. - Оновити-- не читав питання. ups
Aby W

ifconfig.me - веб-сайт, який дає вам ваш IP-адресу.
Рорі

ifconfig.me не підтримує https, тому він може бути підробленим. Недоцільно використовувати його, щоб перевірити, чи працює ваш VPN.
Дан Даскалеску

9

Якщо ви стоять за NAT маршрутизатором з UPNP, ви можете використовувати miniupnpc для виявлення wan ip адреси:

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

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

Ви можете використовувати його в сценарії, наприклад, для cron типу:

#!/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

5

Швидше за все, маршрутизатор повинен забезпечити спосіб отримати зовнішній IP, якщо жодна зовнішня послуга не повинна або не може використовуватися (як уже вказано деякі інші відповіді). Для зовнішніх служб у більшості інших відповідей використовується веб-служба. Ця відповідь у Unix SE пропонує замість цього використовувати DNS.

Наприклад, при використанні digз OpenDNS як распознаватель:

dig +short myip.opendns.com @resolver1.opendns.com

+1, але наприкінці дня це те саме, curl ident.meщо ми використовуємо, оскільки ми покладаємось на конкретну послугу (у myip.opendns,comспеціальній обробці театром DNS-сервера)
nhed

4

Отримуйте інформацію з маршрутизатора за допомогою ssh або curl.

Я використовую curl, щоб запитати dyndns для свого публічного ip, але така команда, здається, не підходить для вас, правда?

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


2

На жаль, немає способу виявити такі механізми, як NAT, які не передбачають звернення до віддаленої служби. NAT за своєю суттю повністю прозорий для користувача, крім зламаних сервісів, і немає стандартного протоколу виявлення NAT.

Що ж стосується зовнішніх служб, я повинен запропонувати швидкий і простий, який я написав, ident.me, який ви можете використовувати як для IPv4, так і для IPv6; для найпростішої форми, яку ви можете використовувати, curl ident.meа повний API задокументований на http://api.ident.me/


1

Якщо ваш маршрутизатор підтримує NAT PMP (Port Mapping Protocol), можливо, ви зможете отримати свій загальнодоступний IP-код за допомогою natpmp.

Існує інтерфейс командного рядка до бібліотеки natpmp linux під назвою natpmpc. У ubuntu він знаходиться у пакунку natpmp-utils . Мій маршрутизатор не підтримує natpmp, тому я не впевнений, що утиліта natpmpc поверне ваш загальнодоступний IP-адресу.


0

Ви шукаєте команду linux ifconfig ви безпосередньо підключені до Інтернету.

Якщо ні та доступ через проксі-сервери або спеціальні маршрутизації, найпростіший спосіб (як вказують інші) - увійти / отримати доступ до іншого хоста та перевірити його звідти.

Крім того, ви можете поговорити з цим питанням з вашим доброзичливим адміністратором системи сусідства.


ifconfigзастаріло.
BatchyX

"команда traceroute, але вона дає локальний ip лан, 192.168.1.1". Тому я здогадуюсь, що є лан. Тому десь повинен бути якийсь маршрутизатор / шлюз / nat. Тоді ifconfig не надаватиме публічну IP-адресу, оскільки комп'ютер Op не підключений безпосередньо до Інтернету.

@BatchyX. Яку ОС ви працюєте? Кожна система, на якій я працюю, має ifconfig. Fedora, CentOS, Ubuntu тощо
slm

2
@batchx: А звідки ти береш цю інформацію? Я не згоден з вами з цього приводу.
mdpc

1
@sim: Оскільки команда присутня, це не означає, що вона не застаріла. Подивіться ifconfigостанню дату випуску. Тепер подивіться ìproute2останню версію. Щодо джерела, дивіться lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.