如何获取服务器域名

时间:2009-10-21 14:23:40

标签: c# .net asp.net dns

有谁能告诉我如何在asp.net中获取服务器域名? (Environment.UserDomainName返回“IIS APPPOOL”字符串)

感谢您的重播,但主要是关于服务器的DNS名称,我需要的是域名。例如,当我通过Windows身份验证登录时,我键入domain \ user,我需要这个“域”

8 个答案:

答案 0 :(得分:9)

您需要从请求对象中提取它:

HttpContext.Current.Request.Url.Host

答案 1 :(得分:4)

如果这里的任何人实际上正在搜索服务器的域名,那么这是我自.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位。

Thanks Duncan for the 64bit version.

答案 2 :(得分:4)

有点晚..但是在我遇到完全相同的问题之后,我找到了缺失和最佳答案:

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

如msdn site所述:

  

此返回值独立于域凭据   应用程序运行。此方法将检索计算机的   域,无论其运行的受信任帐户域凭据如何   下。

在我的个人电脑(无AD域)和IIS(匿名访问)下的工作(使用AD域)中进行测试。

答案 3 :(得分:3)

在我看来,您正在尝试查找用户的域名。因为您要求使用Environment.UserDomainName。由于您的站点可能正在运行“允许匿名访问” - 用户未将其域信息传递给服务器,并且IIS正在为您提供其拥有的帐户信息,即应用程序池帐户。

答案 4 :(得分:2)

您的问题存在特定问题,特定IP地址可能有多个域名。

正如Tinister所说,你可以使用

HttpContext.Current.Request.Url.Host

但这只会告诉您用户在浏览器的地址栏中写了什么。如果用户在您的站点的主机文件中添加了一个条目,然后使用该主机名,那么您将看到该名称。 (我不知道他们为什么会这样做)。

如果您的网站有多个域名,您可以使用它来确定用户请求的域名。

答案 5 :(得分:1)

尝试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 ;)

答案 6 :(得分:1)

按照术士的回答: How can I get the baseurl of site?

优雅:)

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

答案 7 :(得分:0)

在web.config中

你需要添加一段代码

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

    <identity impersonate="true"/>