Как получить доменное имя сервера - PullRequest
8 голосов
/ 21 октября 2009

Может кто-нибудь сказать мне, как получить доменное имя сервера в asp.net? (Environment.UserDomainName возвращает строку "IIS APPPOOL")

Спасибо за повторы, но в основном они касаются DNS-имени сервера, мне нужно только доменное имя. Например, когда я вхожу через аутентификацию Windows, я набираю домен \ пользователь, и мне нужен этот «домен»

Ответы [ 8 ]

9 голосов
/ 21 октября 2009

Вам необходимо извлечь его из объекта запроса:

HttpContext.Current.Request.Url.Host
4 голосов
/ 14 декабря 2015

Немного опоздал .. Но недостающий и лучший ответ, который я нашел, после того, как возникла точно такая же проблема:

private static string getComputerDomain()
        {
            try
            {
                return Domain.GetComputerDomain().Name;
            }
            catch (ActiveDirectoryObjectNotFoundException)
            {
                return "Local (No domain)";
            }
        }

Как указано на сайте MSDN :

Это возвращаемое значение не зависит от учетных данных домена, под которым приложение запущено. Этот метод будет извлекать компьютер домен независимо от учетных данных домена доверенной учетной записи, он запускается под.

Проверено на моем персональном компьютере (без AD-домена) и на работе (с AD-доменом) под IIS (анонимный доступ).

4 голосов
/ 15 декабря 2013

Если кто-то здесь на самом деле ищет доменное имя сервера, вот хак, который я использовал с начала .Net:

    [DllImport("netapi32.dll", CharSet = CharSet.Auto)]
    static extern int NetWkstaGetInfo(string server, int level, out IntPtr info);

    [DllImport("netapi32.dll")]
    static extern int NetApiBufferFree(IntPtr pBuf);

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    class WKSTA_INFO_100
    {
        public int wki100_platform_id;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string wki100_computername;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string wki100_langroup;
        public int wki100_ver_major;
        public int wki100_ver_minor;
    }

    public static string GetMachineNetBiosDomain()
    {
        IntPtr pBuffer = IntPtr.Zero;

        WKSTA_INFO_100 info;
        int retval = NetWkstaGetInfo(null, 100, out pBuffer);
        if (retval != 0)
            throw new Win32Exception(retval);

        info = (WKSTA_INFO_100)Marshal.PtrToStructure(pBuffer, typeof(WKSTA_INFO_100));
        string domainName = info.wki100_langroup;
        NetApiBufferFree(pBuffer);
        return domainName;
    }

Вы можете получить немного информации оттуда. Обновление: теперь работает с 64 бит.

Спасибо Дункан за 64-битную версию.

3 голосов
/ 21 октября 2009

Мне кажется, вы пытаетесь найти доменное имя пользователя. Поскольку вы запрашиваете Environment.UserDomainName. Поскольку ваш сайт, скорее всего, работает с «Разрешить анонимный доступ» - пользователь не передает информацию о своем домене на сервер, а IIS предоставляет вам информацию об учетной записи, которая у него есть, а именно учетную запись пула приложений.

2 голосов
/ 21 октября 2009

Существует конкретная проблема для вашего вопроса, может быть несколько доменных имен для определенного IP-адреса.

Как сказал Тинистер, вы можете использовать

HttpContext.Current.Request.Url.Host

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

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

1 голос
/ 15 сентября 2013

Согласно ответу Чернокнижника: Как я могу получить baseurl сайта?

Элегантный:)

string baseUrl = Request.Url.GetLeftPart (UriPartial.Authority);

1 голос
/ 21 октября 2009

Попробуйте класс System.Net.Dns, у него есть много полезных методов, таких как GetHostEntry, т.е.

var entry = System.Net.Dns.GetHostEntry("google.com"); // or vice-versa...
var name = System.Net.Dns.GetHostEntry("127.0.0.1"); // localhost ;)
0 голосов
/ 25 марта 2015

в web.config вам нужно добавить кусок кода

<authentication mode="Windows"/>
    <authorization>
      <deny users="?"/>
    </authorization>

    <identity impersonate="true"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...