PowerShell: Получить список DNS имен по списку IP адресов (и наоборот)
В повседневной работе, регулярно приходилось сталкиваться с ситуацией, когда на входе имеется список из ip адресов, по которым необходимо провести какие-то операции: обновление, удаление, перезагрузка, выключение. При этом, сами ip адреса без DNS имен не информативны. И вот встает задача, получить из списка IP адресов список, в котором для каждого IP адреса сделана попытка получить его DNS имя. И уже по имени сервера, можно понимать, что это за сервер, кто за него ответственный, какие операции с ним можно выполнять и в какое время.
На входе: есть файл, в котором в одну колонку перечислены ip адреса. Файл с названием: ip.txt
На выходе: надо получить файл, имеющий 2 колонки: IP адрес, DNS имя сервера (если оно найдено). Результат записать в файл с названием: ipdns.txt c запятой в качестве разделителя.
Один из примеров реализации для PowerShell начиная с версии Windows 8/Windows 2012
В ранних версия PowerShell вместо команды:
рекомендовалось использовать командлет:
Получаем из списка IP адресов список DNS имен
Итак, задача сводится к следующему:На входе: есть файл, в котором в одну колонку перечислены ip адреса. Файл с названием: ip.txt
На выходе: надо получить файл, имеющий 2 колонки: IP адрес, DNS имя сервера (если оно найдено). Результат записать в файл с названием: ipdns.txt c запятой в качестве разделителя.
Один из примеров реализации для PowerShell начиная с версии Windows 8/Windows 2012
$ipaddress=Get-Content -Path C:\Temp\ip.txt # Читаем содержимое файла
$results = @()
ForEach ($ip in $ipaddress)
{ # Обрабатываем построчно, для каждого IP
$obj=new-object psobject
$hostname = ""
#Выполняем разрешение IP адреса в DNS имя
$hostname = Resolve-DnsName -Name $ip -Type PTR -ErrorAction SilentlyContinue
# записываем в объект полученным результат
$obj | Add-Member -MemberType NoteProperty -Name ip -Value ($ip)
$obj | Add-Member -MemberType NoteProperty -Name hostname -Value ($hostname.NameHost)
#Формируем массив объектов
$results +=$obj
}
# Выводим результат в файл
$results | Select-Object -Property ip, hostname | Export-Csv C:\temp\ipdns.txt -Encoding UTF8 -Delimiter "," -NoTypeInformation
В ранних версия PowerShell вместо команды:
Resolve-DnsName -Name $ip -Type PTR
рекомендовалось использовать командлет:
[System.Net.Dns]::GetHostByAddress($ip)
Получаем из списка DNS имен список IP адресов
В случае, если стоит обратная задача, из списка DNS имен, получить список ip адресом, то слегка меняем исходный текст и получаем, следующий скрипт:$dnsnames=Get-Content -Path C:\Temp\dns.txt # Читаем содержимое файла
$results = @()
ForEach ($dns in $dnsnames)
{ # Обрабатываем построчно, для каждого DNS имени
$obj=new-object psobject
$ip = ""
#Выполняем разрешение DNS имени в IP адрес
$ip = Resolve-DnsName -Name $dns -Type A -ErrorAction SilentlyContinue
# записываем в объект полученным результат
$obj | Add-Member -MemberType NoteProperty -Name dns -Value ($dns)
$obj | Add-Member -MemberType NoteProperty -Name ip -Value ($ip.IPAddress)
#Формируем массив объектов
$results +=$obj
}
# Выводим результат в файл
$results | Select-Object -Property dns, ip | Export-Csv C:\temp\ip.txt -Encoding UTF8 -Delimiter "," -NoTypeInformation
В этом случае исходным файл с dns именами называется dns.txt, а целевой ip.txtПохожие статьи:
01 декабрь 2020, Вторник
PowerShell: Сгенерировать список доступных внешних (белых) IP адресов
08 апрель 2022, Пятница
SQL: Получить список всех индексов БД и процент фрагментации
25 май 2020, Понедельник
Nginx: Ограничить доступ к каталогам сайта по IP адресам
05 февраль 2020, Среда
Пустые VMDK диски виртуальной машины VMware
01 сентябрь 2018, Суббота
PowerShell: Разрешить список IP адресов в DNS имена
Комментарии: