Как получить * правильное * имя компьютера в кросс-платформе .NET / Mono

Я использую OS X, мой компьютер зовут «systemg»

Другие ответы на SO говорят, что я должен проверить System.Environment.MachineName , но это НЕ РАБОТАЕТ .

  Console.WriteLine (System.Environment.MachineName);  

выводит

  systemg.local   

Это неправильное имя компьютера.

Другой ответ сказал: System.Net.Dns.GetHostName () so

  Console.WriteLine ("[" + System.Net.Dns.GetHostName () + "]");  

выводит

  [176.230.18.213.client.dyn.somemain.com:]  

Также не имя моего компьютера

Есть ли способ получить правильное имя компьютера на разных платформах в .NET/Mono


0

Согласно описанию Microsoft MachineName ode> свойство:

System.Environment.MachineName

Получает NetBIOS-имя этого локального компьютера.

Согласно справочному источнику Microsoft:

В случае справочного источника .Net, gethostname (Win32 ), который вызывается кодом C # для возврата этого свойства.

Форма имени хоста зависит от поставщика сокетов Windows — это может быть простое имя хоста или может быть полностью определенным доменным именем . Однако гарантируется, что возвращенное имя будет успешно проанализировано gethostbyname и WSAAsyncGetHostByName.

Mono:

Mono использует gethostname тем же способом , что и справочный источник MS, поэтому значение, которое вы видите, НЕ контролируется кодом corlib системы, а Реализация собственного сетевого стека ОС, и она настолько «правильная», насколько это возможно …

Для Linux (через Posix, OpenGroup, 4.2BSD), кроме длины символа и проверки доступа, фактическое определение достаточно общий:

Функция gethostname () должна возвращать стандартное имя хоста для текущего компьютера

Для OS-X , они следуют за Posix std, и

Имя хоста, возвращаемое командой hostname или функцией gethostname, определяется именем, заданным на панели «Sharing Preference». Если это имя содержит пробел, вы можете получить только начальную часть имени до первого пробела, но не включая его.

Также помните, что OS-X имеет, помимо Bonjour на основе имени общего доступа, LocalHostName , HostName и ComputerName ;-), но возвращается только имя на основе Bonjour автор gethostname .

Поделиться
Улучшите это ответ
изменён 20 июня ’20 в 09:12
Сообщество ♦
111 серебряных значков
ответил 28 января ’16 в 11:31
добавить комментарий |

Согласно описанию Microsoft свойства MachineName :

System.Environment.MachineName

Получает NetBIOS-имя этого локального компьютера.

По Microsoft источник ссылки:

В случае источника ссылки .Net — gethostname (Win32), который вызывается кодом C # для возврата этого свойства.

Форма имени хоста зависит от поставщика сокетов Windows — это может быть простое имя хоста или полное доменное имя . Однако гарантируется, что возвращенное имя будет успешно проанализировано gethostbyname и WSAAsyncGetHostByName.

Mono:

Mono использует gethostname тем же способом , что и справочный источник MS, поэтому значение, которое вы видите, НЕ контролируется кодом corlib системы, а Реализация собственного сетевого стека ОС, и она настолько «правильная», насколько это возможно …

Для Linux (через Posix, OpenGroup, 4.2BSD), кроме длины символа и проверки доступа, фактическое определение достаточно общий:

Функция gethostname () должна возвращать стандартное имя хоста для текущего компьютера

Для OS-X , они следуют за Posix std, и

Имя хоста, возвращаемое командой hostname или функцией gethostname, определяется именем, заданным на панели «Sharing Preference». Если это имя содержит пробел, вы можете получить только начальную часть имени до первого пробела, но не включая его.

Также помните, что OS-X имеет, помимо Bonjour на основе имени общего доступа, LocalHostName , HostName и ComputerName ;-), но возвращается только имя на основе Bonjour автор: gethostname .

Оцените статью
Botgadget.ru
Добавить комментарий