С# Получить имя компьютера по IP

Я использую Xamarin Studio для разработки на iOS, и мне нужна пара функций, чтобы получить имя компьютера из IP-адреса и наоборот.

Я пробовал этот код, чтобы получить имя машины по IP

string machineName = string.Empty;
try
{
    IPHostEntry hostEntry = Dns.GetHostEntry(ipAdress);

    machineName = hostEntry.HostName;
}
catch (Exception ex)
{
    // Machine not found...
}
return machineName;

Но я продолжаю получать IP-адрес машины, так что это бесполезно, потому что я ввожу IP-адрес и получаю IP-адрес.

Я пробовал что-то подобное, чтобы получить IP-адрес из имени хоста. Я всегда получаю исключение «Невозможно разрешить имя хоста HITMAN-DESKTOP», являющееся HITMAN-DESKTOP моей удаленной машиной. который доступен из любой точки сети и онлайн во время испытаний.

Любые идеи?


person Pedro Cavaleiro    schedule 05.07.2016    source источник
comment
Разве [System.Net.Dns]::GetHostByAddress(.hostname) не подходит для этой цели?   -  person gravity    schedule 05.07.2016
comment
Это то, что он использует в настоящее время.   -  person Gaspa79    schedule 05.07.2016
comment
Как указывает отмеченный дубликат, не у каждого IP-адреса есть имя. Повторный вопрос этого не изменит. Если у вас есть более конкретный сценарий, выходящий за рамки вопроса, который уже был задан и на который уже был дан ответ, предоставьте эту конкретную информацию. Объясните, почему вы считаете, что имя целевого компьютера должно быть извлекаемым, и приведите хороший минимально воспроизводимый пример это ясно показывает, почему должно быть и как вы не получаете имя в этом конкретном сценарии.   -  person Peter Duniho    schedule 05.07.2016


Ответы (1)


Проблема с этим подходом, Педро, заключается в том, что вы не получите имя компьютера с помощью этой функции, если в DNS не установлено имя компьютера в качестве имени хоста, которое может быть или не быть (подсказка: вероятно, нет).

Имя компьютера — это просто локальная строка. Имя хоста — это сетевое соглашение, привязанное к IP-адресу, и вы должны установить его вручную. Большинство сетевых администраторов задают имя хоста таким же, как имя компьютера, но это не гарантируется. Вы получаете IP-адрес из-за этого. «HITMAN-DESKTOP» — это не ваше имя хоста (сетевой идентификатор), это имя компьютера (локальный идентификатор), и его нет в DNS.

Короче говоря, я не думаю, что есть надежный способ сделать это с чистым .NET, если вы не уверены на 100%, что все имена хостов, которые вы хотите проверить, равны именам компьютеров.

person Gaspa79    schedule 05.07.2016