Займемся поиском DNS имени по IP адресу средствами Powershell. Не путайте со статьей как найти NETBIOS имя хоста по IP адресу с помощью Powershell. НЕТБИОС имя действует в локальной сети, а DNS-именем можно адресовать хосты по всему интернету.
Во всех скриптах переменная $IP содержит IP-адрес хоста которому надо узнать DNS-имя.
Я нашел три способа решить этот вопрос.
"[System.Net.Dns]::GetHostbyAddress($IP)"
Если надо только DNS имя без лишних надписей, то в конце добавляем:
"[System.Net.Dns]::GetHostbyAddress($IP).HostName"
"Resolve-DnsName -Name $IP"
Узнать только DNS имя можно так:
"(Resolve-DnsName -Name $IP).NameHost"
Если командлет не может разрешить имя хоста, то он возвращает большое описание ошибки. Чтобы убрать эти лишние строки можно добавил параметр "-ErrorAction SilentlyContinue". Тогда при ошибке возвращается пустая строка.
Итоговая команда выглядит так:
"(Resolve-DnsName -Name $IP -ErrorAction SilentlyContinue).NameHost"
Я реализовал это так:
$Cmd_Ping_Out=ping -a -4 -n 1 $IP | Where-Object {$_.Contains("[$IP]")}
if ($Cmd_Ping_Out -ne $NULL) {
$DNS_Name=$Cmd_Ping_Out.Split(" ")[3]
}
Во всех скриптах переменная $IP содержит IP-адрес хоста которому надо узнать DNS-имя.
Я нашел три способа решить этот вопрос.
Командлет System.Net.Dns
Эта возвращает небольшую таблицу, где можно посмотреть DNS имя:"[System.Net.Dns]::GetHostbyAddress($IP)"
Если надо только DNS имя без лишних надписей, то в конце добавляем:
"[System.Net.Dns]::GetHostbyAddress($IP).HostName"
Командлет Resolve-DnsName
Этот командлет показывает таблицу с DNS параметров этого IP."Resolve-DnsName -Name $IP"
Узнать только DNS имя можно так:
"(Resolve-DnsName -Name $IP).NameHost"
Если командлет не может разрешить имя хоста, то он возвращает большое описание ошибки. Чтобы убрать эти лишние строки можно добавил параметр "-ErrorAction SilentlyContinue". Тогда при ошибке возвращается пустая строка.
Итоговая команда выглядит так:
"(Resolve-DnsName -Name $IP -ErrorAction SilentlyContinue).NameHost"
Анализ команды Ping
Команда "Ping -a" пытается найти DNS имя узла. Нам остается потом проанализировать вывод этой команды и вычленить имя хоста.Я реализовал это так:
$Cmd_Ping_Out=ping -a -4 -n 1 $IP | Where-Object {$_.Contains("[$IP]")}
if ($Cmd_Ping_Out -ne $NULL) {
$DNS_Name=$Cmd_Ping_Out.Split(" ")[3]
}
Комментариев нет:
Отправить комментарий