Команда оболонки для отримання IP-адреси?


Відповіді:



25

Ви можете використовувати:

/bin/ip addr

3
@opierce Ви вказали відповідь mpbloch як правильну, але як FYI ви повинні використовувати цю відповідь, оскільки це частина пакета iproute2. ifconfigнаразі відбувається поетапність.
jwbensley

3
Ви можете зробити це коротше, просто запустившись ip a.
gak

19

Якщо у вас є внутрішня адреса, що використовується, перевірте

curl http://myip.dnsomatic.com

може бути хорошою ідеєю для оболонок Unix.
Або просто введіть цю URL-адресу у свій браузер.


Якщо ви отримаєте іншу відповідь від « ifconfig -aрезультату», дав свій внутрішній адреса - який, ймовірно , не працює з - за меж.
ifconfig


Навіть якщо все здається нормальним, у вас може бути встановлений брандмауер, який заборонятиме вхідні ssh- з'єднання.
У який час слід спробувати порт, який цікавить, у веб-переглядачі на комп'ютері,

http://www.canyouseeme.org/

Це підтвердить зв’язок через,

  • зовнішня IP-адреса (показує її вам на цій сторінці)
  • NAT, Порт Форвард
  • Брандмауери

Щоправда, але якщо це так, мабуть, немає правил NAT / Port Forwarding для встановлення відповідності ssh будь-якому внутрішньому IP-адресу.
Кайл Брандт

@Kyle, що можна додати ...
nik

3
+1 дляcurl http://myip.dnsomatic.com
JatSing

Аналогічно цьому, є такожcurl ifconfig.me
jwbensley

19

/bin/hostname -i


3
У цьому випадку я б запропонував використовувати hostname --all-ip-addresses. Показати всі мережеві адреси хоста. Цей параметр перераховує всі налаштовані адреси на всіх мережевих інтерфейсах. Інтерфейс зворотного зв'язку та локальні адреси IPv6 посилань опущені. На відміну від параметра -i, ця опція не залежить від роздільної здатності імені. Не робіть жодних припущень щодо порядку виводу.
lrkwz

5
Коротша альтернатива коментарю @ lrkwz/bin/hostname -I
hanxue

Дякую @hanxue - це повинно бути власною відповіддю - найкоротшою командою з найчистішим виходом - саме те, що я шукав! На мій досвід (Ubuntu), /bin/hostname -iпросто дає 127.0.1.1, що марно.
Роджер Дуек


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Якщо вам потрібна ваша внутрішня адреса, додайте інтерфейс після ifconfig, наприклад

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1, це саме те, що мені потрібно було вирішити проблему. Ура для однокласників!
Дж. Полфер

+1 Без голови -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice

Дякую, він працює на Debian, але в OS X він не працює, повертаючи трохи сміття. Було б чудово, якби ми могли створити лінію, яка працює на обох. Ось вихід ifconfig на OS X: gist.github.com/ssbarnea/5814657
sorin


3

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

копати + короткий myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Якщо ви використовуєте OpenDNS для свого dns-сервера, ви можете скоротити його до:

копати + короткий myip.opendns.com

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

завиток http://myip.dnsomatic.com

3

Якщо у вас є кілька інтерфейсів, може бути корисно вказати, який саме IP ви хочете. якщо ви хочете IPV4-адресу інтерфейсу 'eth0':

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

якщо ви хочете IPV6-адресу інтерфейсу 'eth0':

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

якщо ви хочете шукати IP між двома загальними інтерфейсами ноутбука, wlan0 та eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done


2

Ось один рядок, який також працює на Linux та OS X, і він поверне першу адресу, яка не є локальною:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Надішліть кредити на /programming//a/13322549/99834



1

Мабуть, найпростіший шлях для цього

ifconfig eth0

якщо припустимо, що машина має єдину IP-адресу на провідному інтерфейсі за замовчуванням - можливо, вам знадобиться

ifconfig wlan0

якщо це на WiFi.


1
ip address show scope link

Він покаже вам IP-адресу живих - має посилання - інтерфейси. Але це не команда баш. Bash взагалі не має можливості знати про IP та мережу.


1

Я розумію, що ви хочете підключити віддалену машину ubuntu, яка має динамічний ip. Зайдіть на сайт dyndns.org і відкрийте безкоштовний рахунок. Потім на віддаленій машині потрібно встановити динамічний інструмент ip.

sudo aptitude install dyndns-client

тож ви можете запустити віддалений автомат через

ssh username@yourdynamicnamealias.dyndns.org

Тож після конфігурації вам ніколи не знадобиться ip-адреса віддаленої машини.


Це мій кращий метод роботи з динамічними ІС. dyndns.org - це фантастичний, безкоштовний сервіс.
Джон Барретт

1

Ось що я використовую:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'

1

якщо вам потрібен лише один IP даного інтерфейсу, ви можете зробити:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 


0

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

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Ви можете використовувати dig(1)такі параметри, як -4або -6спеціально шукати адресу IPv4 або IPv6; Google надасть відповідь у записі TXTтипу, який буде мати цитати, коли вони будуть представлені dig; якщо ви хочете згодом використовувати змінну з утилітами типу traceroute, ви повинні використовувати щось на зразок tr (1) для видалення зазначених лапок.

Інші параметри включають whoami.akamai.netі myip.opendns.com, які відповідають Aі AAAAзаписують (замість того, TXTяк у наведеному вище прикладі від Google), тому вони не вимагають видалення лапок:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Ось зразок сценарію, який використовує всі параметри вище для встановлення змінних:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Якщо ви шукаєте приватну IP-адресу або набір усіх IP-адрес, призначених у вікні, ви можете використовувати комбінацію ifconfig(у BSD та GNU / Linux), ip addr(у GNU / Linux), hostname(параметри -iта -Iввімк. GNU / Linux) і netstatподивитися, що відбувається.

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