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

Обнаружение внешнего IP-адреса из командной строки FreeNAS

Есть ли какая-нибудь функция командной строки в производной FreeNAS (FreeBSD), которая может возвращать мой внешний адрес? Поскольку тот же адрес синхронизируется с DynDns (через маршрутизатор), в C # я получил его через DNS-запрос следующим образом:

var hostEntry = Dns.GetHostEntry("myexternalname.dyndns.org");
foreach (var iAddress in hostEntry.AddressList) {
    if (iAddress.AddressFamily == AddressFamily.InterNetwork) {
        MessageBox.Show(iAddress);
    }
}

Я нашел команду, которая работает на FreeNAS.

# host myexternalname.dyndns.org

Он возвращается

myexternalname.dyndns.org      A       89.172.197.320

Из этого я просто использую awk:

host myexternalname.dyndns.org | awk '{ print $3; }'

и это возвращает только IP:

89.172.197.320

P.S. Я знаю, что 89.172.197.320 не настоящий IP-адрес. Я написал это так, чтобы не передавать свой IP-адрес (или IP-адрес от кого-то еще).

P.P.S. Спасибо за помощь Кронику и Эйвери Пэйну, поскольку их идеи подтолкнули меня в правильном направлении.

вот моя любимая команда:

wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

просто. Чисто. и если у вас завиток:

curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

Предпосылки

  • копать землю
  • GNU grep
  • GNU TR
  • gnu awk
  • Сортировать
  • уникальный

Из командной строки:

dig yourserver.dyndns.org | grep "IN" | grep "[0-9]" | awk '{print $5}' | sort | uniq 

Хорошо:

  • Очень простая последовательность каналов возвращает как минимум один IP-адрес.
  • Может обрабатывать несколько IP-адресов для одного и того же имени.

Плохо:

  • в результате выкачивает текст, а это значит, что вам, вероятно, понадобится перенаправление в файл
  • Я могу придумать хотя бы один крайний случай, когда этот сценарий может дать сбой, хотя он «достаточно хорош»

Уродливый:

  • Сценарий далеко от оптимального. Я просто вырубил его за несколько минут.
  • Слишком много зависимостей командной строки.
  • Хотя команды довольно общие, цепочка инструментов специфична для GNU.
  • Лучше писать на perl или python как монолитный скрипт.