Ber*_*nDK 12 c# asp.net string dns tld
我正在使用C#和ASP.NET.
我们在IIS 6.0服务器上收到很多"奇怪"的请求,我想按域记录和编目.
例如.我们收到一些奇怪的请求,比如:
http://www.poker.winner4ever.example.com/
http://www.hotgirls.example.com/
http://santaclaus.example.com/
后三者有点显而易见,但我想把它们整理成一个,因为我们的服务器上托管了"example.com".其余的不是,对不起:-)
所以我正在寻找一些如何从上面检索example.com的好主意.其次,我想将m.,wap.,iphone等匹配到一个组中,但这可能只是在移动快捷键列表中快速查找.我可以手动编码此列表作为开始.
但是regexp这里的答案还是纯粹的字符串操作最简单的方法?我在考虑将URL字符串"拆分"为"." 以及项目[0]和项目[1]的查找...
有任何想法吗?
以下代码使用Uri该类获取主机名,然后通过Uri.Host在句点上拆分主机名来获取第二级主机(examplecompany.com).
var uri = new Uri("http://www.poker.winner4ever.examplecompany.com/");
var splitHostName = uri.Host.Split('.');
if (splitHostName.Length >= 2)
{
var secondLevelHostName = splitHostName[splitHostName.Length - 2] + "." +
splitHostName[splitHostName.Length - 1];
}
Run Code Online (Sandbox Code Playgroud)
可能存在一些示例,其返回除所需内容之外的内容,但国家代码是唯一的2个字符,并且它们可能具有或不具有通常使用的短二级(2或3个字符).因此,在大多数情况下,这将为您提供所需的内容:
string GetRootDomain(string host)
{
string[] domains = host.Split('.');
if (domains.Length >= 3)
{
int c = domains.Length;
// handle international country code TLDs
// www.amazon.co.uk => amazon.co.uk
if (domains[c - 1].Length < 3 && domains[c - 2].Length <= 3)
return string.Join(".", domains, c - 3, 3);
else
return string.Join(".", domains, c - 2, 2);
}
else
return host;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下nuget Nager.PublicSuffix软件包。
裸体
PM> Install-Package Nager.PublicSuffix
Run Code Online (Sandbox Code Playgroud)
例
var domainParser = new DomainParser(new WebTldRuleProvider());
var domainName = domainParser.Get("sub.test.co.uk");
//domainName.Domain = "test";
//domainName.Hostname = "sub.test.co.uk";
//domainName.RegistrableDomain = "test.co.uk";
//domainName.SubDomain = "sub";
//domainName.TLD = "co.uk";
Run Code Online (Sandbox Code Playgroud)