Какую команду * nix я могу использовать, чтобы найти свой внешний IP?


Ответы:



8
копать + коротко myip.opendns.com

Это работает, только если вы используете OpenDNS в качестве вашего DNS-сервера.

Если нет, один из них должен работать:

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

1
Не работает на моем MacOS 10.5, Ubuntu 8.04 или Ubuntu 9.04.
Дрю Стивенс

Интересно, что это делает на моей Ubuntu 8.10.
Брэд Гилберт

Вероятно, потому, что я использую opendns.
Брэд Гилберт

+1 за использование DNS, чтобы узнать IP (вместо http). Вы также можете указать сервер DNS, используя его имя, например, @resolver1.opendns.com(для удобства чтения)
jfs



2

Для этого нужно использовать серверы OpenDNS ... Вы можете запросить определенный DNS-сервер с помощью dig:

dig + short myip.opendns.com @ 208.67.222.222

2

Вы можете использовать curl, чтобы получить страницу с чем-то вроде whatismyip, а затем получить кусочки. Я использовал whatismyipaddress.com в этом примере ... очевидно, поля будут отличаться для разных сервисов.

curl -s http://whatismyipaddress.com/ | grep LOOKUPADDRESS | awk '{ print $4 }'

1

я просто запускаю traceroute куда-нибудь в интернете и ищу выход из нашей локальной сети.

может быть, есть лучший способ?




0

Вы можете использовать команду ifconfig для вывода списка всех интерфейсов и связанных с ними IP-адресов.

Итак, если вы знаете, что ваш интернет-интерфейс ppp0, вы можете запустить

$ ifconfig ppp0
ppp0 Link encap: двухточечный протокол
          адрес в сети: XXXX.X PtP: ГГГГ Маска: 255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST MTU: 1444 Метрика: 1
          Пакеты RX: 198986 ошибок: 0 отброшено: 0 переполнений: 0 кадр: 0
          Пакеты TX: 122929 ошибок: 0 отброшено: 0 переполнений: 0 несущая: 0
          столкновений: 0 txqueuelen: 3
          RX байтов: 134195571 (127,9 МиБ) TX байтов: 17101701 (16,3 МиБ)

XXXX будет вашим IP-адресом. YYYY - это IP-адрес следующего перехода.

Затем вы можете постобработать вывод ifconfig с помощью grep / awk / sed / cut / perl / что угодно, чтобы извлечь только IP.

Другой вариант, если у вас установлены инструменты iproute, это использовать команду ip. например

$ ip addr list ppp0
21842: ppp0: mtu 1444 qdisc htb state НЕИЗВЕСТНО qlen 3
    ссылка / ррр
    inet XXXX peer YYYY / 32 область действия глобальная ppp0

это, вероятно, легче читать и, конечно, легче анализировать:

$ ip addr list ppp0 | awk '/ inet / {print $ 2}'
XXXX

- Существует вероятность того, что любой IP-адрес в ifconfig не будет совпадать с реальным Интернет-IP-адресом (в случае biNAT) - Во FreeBSD нет пакета iproute2, поэтому команда ip не применима
SaveTheRbtz

правда, я не использую NAT, поэтому мне никогда не приходило в голову ... мне просто показалось "неправильным" использовать внешний сервис для информации, о которой вы можете запросить вашу собственную систему. даже с NAT, я все же предпочел бы выяснить, как запросить маршрутизатор, выполняющий NAT (возможно, через запрос SNMP), чем полагаться на внешнюю службу, которая может или не может быть доступна, когда мне это нужно.
КАС

@Craig, ваш подход в порядке. Однако это не внешний IP-адрес, если вы не можете получить его по этому значению извне. Вы действительно должны полагаться на внешнюю точку для этого ответа. Идея состоит в том, чтобы найти надежную (по крайней мере, больше, чем ваша точка периметра) внешнюю точку для запроса. OpenDNS - это хороший момент.
Nik

@nik: единственный вероятный случай, когда IP-адрес вашего пограничного маршрутизатора не является внешним IP-адресом, - это когда вы находитесь за несколькими уровнями NAT ... в этом случае правильное решение состоит в том, чтобы переключиться на не поврежденный мозг как можно скорее. , Кроме того, проблема с получением URL-адреса для определения вашего IP-адреса заключается в том, что он сообщает вам только IP-адрес хоста, который фактически его выбирает, - это может быть прокси, который удаляет заголовки Via.
КАС
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.