도메인 이름이 "호스트"파일에서 유효한 지 확인하는 가장 좋은 방법?
-
12-09-2019 - |
문제
창문 파일을 호스트합니다 IP를 a에 연결할 수 있습니다 호스트 이름 그것은 일반적인 인터넷 도메인 이름보다 훨씬 더 큰 자유를 가지고 있습니다. 주어진 이름이 유효한 "호스트"파일 도메인 이름인지 결정하는 함수를 만들고 싶습니다.
기반 이 답변 그리고 효과가 있고 그렇지 않은 것에 대한 실험, 나는이 기능을 생각해 냈습니다.
private static bool IsValidDomainName(string domain)
{
if (String.IsNullOrEmpty(domain) || domain.Length > 255)
{
return false;
}
Uri uri;
if (!Uri.TryCreate("http://" + domain, UriKind.Absolute, out uri))
{
return false;
}
if (!String.Equals(uri.Host, domain, StringComparison.OrdinalIgnoreCase) || !uri.IsWellFormedOriginalString())
{
return false;
}
foreach (string part in uri.Host.Split('.'))
{
if (part.Length > 63)
{
return false;
}
}
return true;
}
또한 유니 코드 이름으로 작동해야한다는 이점이 있습니다 (기본 정규식이 실패하는 경우).
더 나은/더 우아한 방법이 있습니까?
업데이트: 제안한대로 계산서,, uri.checkhostname 메소드는 거의 내가 원하는 것을 수행하지만 Windows가 "호스트"파일에서 허용하는 "-test"와 같은 호스트 이름을 허용하지 않습니다. 특별한 경우 "-"부분이지만 더 많은 특별한 경우가 있다고 우려합니다.
해결책
어때 system.uri.checkhostname () 방법?
private static bool IsValidDomainName(string name)
{
return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}
왜 직접 일합니까?
다른 팁
도메인 이름이 "fasdfasdfasd.com"과 같은 가짜 인 경우에도 이러한 방법은 신뢰할 수 없습니다.
가장 좋은 방법은 Webresponse를 보내고 도메인의 응답을 기다리는 것입니다. 다음은이 프로세스의 완전한 코드와 설명입니다 (긴 코드 스 니펫은 여기에서 복사하지 않음).
http://www.dotnetfunda.com/articles/show/1072/validating-domain-name-in-aspnet
감사
제휴하지 않습니다 StackOverflow