7

Я нашел следующую команду, чтобы получить ваш текущий общедоступный IP-адрес, который хорошо работает из командной строки:

nslookup myip.opendns.com resolver1.opendns.com

Я хочу иметь возможность выполнить команду, хотя это просто печатает результат IP. (Сейчас он показывает указанный DNS-сервер и его IP вместе со всей другой информационной IE:

Server:  resolver1.opendns.com
Address:  208.67.222.222

Non-authoritative answer:
Name:    myip.opendns.com
Address:  123.123.123.123

Я хочу, чтобы он просто вывел:123.123.123.123

Не уверен, является ли флаг командной строки, чтобы получить то, что я хочу, или если я могу использовать некоторые хитрости командной строки, чтобы получить только вывод, который я хочу (в конечном счете, я хочу перенаправить вывод в файл "> filename.txt"

9 ответов9

10

nslookup никогда не был предназначен для использования по сценарию. Вместо этого вы действительно хотите использовать dig , который с опцией +short производит машиночитаемый вывод в соответствии с параметрами запроса.

dig +short myip.opendns.com @resolver1.opendns.com
6

Это хороший пример использования awk.

nslookup myip.opendns.com resolver1.opendns.com | awk -F': ' 'NR==6 { print $2 } '

Здесь мы добавляем к awk, ограничивая символом «:», а затем выводим только второе поле с разделителями в строке 6.

6

Nslookup с записью IP в качестве единственного выхода

Предполагая, что вы используете Windows, это можно сделать с помощью простой однострочной команды.

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

for /f "skip=4 usebackq tokens=2" %a in (`nslookup myip.opendns.com resolver1.opendns.com`) do echo %a > ip.txt

Из пакетного файла:

for /f "skip=4 usebackq tokens=2" %%a in (`nslookup myip.opendns.com resolver1.opendns.com`) do echo %%a > ip.txt

Заметки:

  • Публичный IP-адрес хранится в файле (ip.txt).
  • Выше не требуется нестандартных команд Windows, таких как PowerShell , .Net или awk .

Дальнейшее чтение

3

Если вы работаете в Windows и у вас установлен PowerShell (версии v1 или выше) (и версия .Net), вы можете использовать (длинную) однострочную строку, например:

[System.Net.Dns]::GetHostAddresses("www.google.com")[0] | Select IPAddressToString -ExpandProperty IPAddressToString | Out-File c:\folder\filename.txt

Это позволит найти www.google.com и поместить первый возвращенный адрес IPv4 в файл.

Если вы используете PowerShell v3+ в Windows 8+ (или Server 2012+), вы можете использовать командлет Resolve-DnsName вместо вызова .Net GetHostAddress. то есть:

(Resolve-DnsName www.google.com)[0] | Select IPAddressToString -ExpandProperty IPAddressToString | Out-File c:\folder\filename.txt

Просто измените www.google.com на предпочитаемое доменное имя. Или поместите его в сценарий PowerShell и настройте его для принятия аргумента (имени домена, которое вы хотите найти).

Подробнее об этом: Как передать аргумент скрипту PowerShell?

1

Хорошо работает на моей машине с Linux. Я никогда не пробовал это на других системах, но у Google есть много статей о том, как установить dig например, в Windows

Единственное, на что следует обратить внимание, для локальных имен доменов поиск домена должен быть добавлен явно. Так что если у вас есть хост myhost в вашей локальной сети с положением поискового домена mynetwork

dig +short myhost.mynetwork

в командной строке.

Примеры:

sergeyi@sergeyi:~$ dig +short google.ru
173.194.222.94

sergeyi@sergeyi:~$ dig A +short google.ru
173.194.222.94

sergeyi@sergeyi:~$ dig AAAA +short google.ru
2a00:1450:4010:c0b::5e
0

Если вашей целью является получение внешнего IP-адреса с помощью сценария, возможно, будет использоваться очень простая функция PowerShell:

function Get-ExternalIP {
(Invoke-WebRequest ifconfig.me/ip).Content
}

Запуск этой функции вернет ваш внешний IP и никакой другой бесполезной информации.

Источник и примеры: http://jfrmilner.wordpress.com/2012/12/22/powershell-quick-tip-03-whats-my-external-ip-address-windows-command-line/

В качестве альтернативы, если вы хотите получить разрешение IP для других хостов, вам следует взглянуть на командлет Resolve-DnsName . К сожалению, ваш компьютер должен работать под управлением Windows 8.1 или Windows Server 2012 R2, чтобы использовать этот командлет. Вот пример, который я только что выполнил:

Надеюсь это поможет !

0

Просто.

В nslookup используйте:

Тип набора = A

Тогда ищите. Команда set покажет только выходные данные для записей A. Вы можете использовать это для MX, CNAME, AAA и т.д.

-1

Не идеально, но я иногда использую этот метод:

ping -c 1 myip.opendns.com | grep -ohE "\(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\)" | head -1 | sed "s/[()]//g"

-1

Используя PowerShell, вы можете запустить ниже:

(((nslookup myip.opendns.com resolver1.opendns.com 2>null| select-string -pattern "Address:") -split ":")[3]).Trim()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .