Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public static List<string> ParseNameServers(string whoisData){
if (string.IsNullOrEmpty(whoisData)) return null;
List<string> result = new List<string>();
whoisData = whoisData.ToLower().Replace("\r\n", "\n").Replace("\r", "\n");
foreach (string line in whoisData.Split('\n'))
if (line.Length > 0){
int sep = line.IndexOf(":");
if (sep > 0){
string param = line.Substring(0, sep).ToLower();
if (param.Contains("n") && param.Contains("server")){
string nameServer = line.Substring(sep + 1, line.Length - sep - 1).Trim().ToLower();
while (nameServer.Length > 0 && nameServer.Substring(nameServer.Length - 1, 1) == ".")
nameServer = nameServer.Substring(0, nameServer.Length - 1);
if (nameServer.Length > 0 && nameServer.Contains(".") && !result.Contains(nameServer))
result.Add(nameServer);
}
}
}
if (result.Count == 0 && whoisData.Contains("ns server")) {
bool startFound = false;
foreach (string line in whoisData.Split('\n'))
if (line.Contains("ns server")) startFound = true;
else if (startFound){
string nameServer = FormatDomainName(line);
if (!ValidateDomainName(nameServer, false)) break;
if (nameServer.Length > 0 && nameServer.Contains(".") && !result.Contains(nameServer))
result.Add(nameServer);
}
}
return result;
}
public static string FormatDomainName(string value){
if (string.IsNullOrEmpty(value)) return value;
value = value.Trim().ToLower().Replace(",", ".");
while (value.Contains("..")) value = value.Replace("..", ".");
while (value.Length > 0 && value.Substring(0, 1) == ".") value = value.Substring(1, value.Length - 1).Trim();
while (value.Length > 0 && value.Substring(value.Length - 1,1) == ".") value = value.Substring(0, value.Length - 1).Trim();
return value;
}
private static string _symbols = "abcdefghijklmnopqrstuvwxyz0123456789-.";
public static bool ValidateDomainName(string value, bool onlySecondLevelDomains){
if (string.IsNullOrEmpty(value)) return false;
value = value.Trim().ToLower();
int dotCount = 0;
for (var a = 0; a < value.Length; a++){
if (value.Substring(a, 1) == ".")
dotCount++;
if (!_symbols.Contains(value.Substring(a, 1)))
return false;
}
return onlySecondLevelDomains ? dotCount == 1 : dotCount > 0;
}
Очевидно, что у них есть бот, который все время проверяет WHOIS по списку доменов.
Делаем собственный сервис по определению WHOIS любого домена