Какую команду * 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.