Обнаружение внешнего 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);
    }
}

3 ответа

Решение

Я нашел команду, которая работает на 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

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

PPS Спасибо за помощь Kronick и Avery Payne, так как их идеи подтолкнули меня в правильном направлении.

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

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

просто. Чисто. и если у вас есть curl:

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 как монолитный скрипт.
Другие вопросы по тегам