Назад | Перейти на главную страницу

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

Есть ли команда bash для поиска IP-адреса для коробки Ubuntu? Мне нужно найти IP-адрес, чтобы позже я мог подключиться к машине по ssh.

/sbin/ifconfig -a

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

/bin/ip addr

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

curl http://myip.dnsomatic.com

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


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


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

http://www.canyouseeme.org/

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

  • внешний IP-адрес (отображается на этой странице)
  • NAT, переадресация портов
  • Межсетевые экраны

/bin/hostname -i

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

Если вам нужен внутренний адрес, добавьте интерфейс после ifconfig, например

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

Если вы находитесь за NAT и вам нужен общедоступный IP-адрес, используйте это:

wget -q -O - checkip.dyndns.org | sed -e 's /.Текущий IP-адрес: // '-e' s / <.$ // '

взято из: http://www.go2linux.org/what-is-my-public-ip-address-with-linux

Если у вас несколько интерфейсов, может быть полезно указать, какой из них вам нужен. если вам нужен 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

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

$ curl wtfismyip.com/text

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

dig +short myip.opendns.com @208.67.222.222 @208.67.220.220

Если вы используете OpenDNS для своего DNS-сервера, вы можете сократить его до:

dig +short myip.opendns.com

Вы также можете использовать эту команду.

curl http://myip.dnsomatic.com
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`

Вот одна строка, которая работает и в Linux, и в OS X, и она вернет первый адрес, который не является локальным:

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

Отправить кредиты на https://stackoverflow.com/a/13322549/99834

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

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

Вот что я использую:

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

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

sudo aptitude install dyndns-client

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

ssh username@yourdynamicnamealias.dyndns.org

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

ip address show scope link

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

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

ifconfig eth0

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

ifconfig wlan0

если это по WiFi.

Однажды я попробовал извлечь IP-адрес в Linux:

http://www.catonmat.net/blog/golfing-the-extraction-of-ip-addresses-from-ifconfig/

Если вы ищете публичный 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 чтобы увидеть, что происходит.