Командная консоль для получения IP-адреса?

Ответы:

32

/sbin/ifconfig -a

mpbloch
источник
Да, и если вы планируете удаленное администрирование сервера vi /etc/network/interfacesи установите интерфейс static(см. Help.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface
Запуск этой команды показывает полный список чисел. Какой из них мы должны использовать? inet addr?
ComputerScientist
25

Вы можете использовать:

/bin/ip addr
Роберт Суишер
источник
3
@opierce Вы отметили ответ mpbloch как правильный, но, как к вашему сведению, вы должны использовать этот ответ, так как он является частью пакета iproute2. ifconfigв настоящее время находится в стадии разработки.
Jwbensley
3
Вы можете сделать это короче, просто запустив ip a.
Гак
19

Если у вас есть внутренний адрес, проверьте

curl http://myip.dnsomatic.com

может быть хорошей идеей для оболочек Unix.
Или просто вставьте этот URL в ваш браузер.


Если вы получите другой ответ от « ifconfig -aрезультата», дал свой внутренний адрес - который, вероятно , не работает из - за пределов.
ifconfig


Даже если все выглядит нормально, у вас может быть установлен брандмауэр, который запрещает входящие ssh- соединения.
В это время вы должны попробовать порт интереса из браузера на машине по адресу,

http://www.canyouseeme.org/

Это подтвердит подключение через,

  • внешний IP-адрес (показывает его вам на этой странице)
  • NAT, портовые форварды
  • Брандмауэры
Nik
источник
Верно, но в этом случае, вероятно, не существует правил 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}'
Johan
источник
+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
сорин
3

Если вам необходимо выяснить, какой IP-адрес у вашего роутера, вы можете запустить эту команду.

dig + short 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
Lorello
источник
3

Просто сверните эту страницу :

$ curl wtfismyip.com/text

манси
источник
И как именно это превосходит аналогичные услуги, уже упомянутые в эти годы?
Эса Йокинен
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

Сорин
источник
2
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`
Мохаммед Сакиб Раджпут
источник
1

Самый простой способ сделать это, вероятно,

ifconfig eth0

при условии, что у машины есть один IP-адрес в проводном интерфейсе по умолчанию - вам может понадобиться

ifconfig wlan0

если это по WiFi.

Дэвид Норт
источник
1
ip address show scope link

Он покажет вам IP-адрес живых - имеет ссылки - интерфейсы. Но это не команда bash. Bash вообще не может знать об IP и сети.

Saabi
источник
1

Я понимаю, что вы хотите подключить удаленную машину с Ubuntu, которая имеет динамический IP-адрес. Зайдите на сайт dyndns.org и откройте бесплатный аккаунт. Затем на удаленной машине вам необходимо установить динамический инструмент IP.

sudo aptitude install dyndns-client

так что вы можете SSH удаленного компьютера через

ssh username@yourdynamicnamealias.dyndns.org

Поэтому после настройки вам никогда не понадобится IP-адрес удаленной машины.

человек дождя
источник
Это мой предпочтительный метод для работы с динамическими 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 };
    }'
jlliagre
источник
1

если вам нужен только один IP-адрес данного интерфейса, вы можете сделать:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 
DmitrySemenov
источник
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посмотреть, что происходит.

CNST
источник