dns.gethostentry는 빈 주소 목록으로 iphostentry를 반환 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/156585

  •  03-07-2019
  •  | 
  •  

문제

호스트 이름을 성공적으로 해결할 수 있지만 반환 된 hostentry.addresslist가 비어있는 경우가 있는지 궁금합니다.

현재 나는 다음과 같은 일을하고 있습니다.

IPHostEntry hostEntry = Dns.GetHostEntry("some.hostname.tld");
if (hostEntry.AddressList.Count() < 1)
{
  // can that ever happen?
  throw new ArgumentException("hostName has no assigned IP-Address");
}
TcpClient client = new TcpClient(hostEntry.AddressList[0], 1234);

내 가정은 dns.gethostentry가 호스트 이름을 찾지 못하거나 주소 목록이 비어 있지 않으면 예외를 던진다는 것입니다.

도움이 되었습니까?

해결책

아니요, 빈 주소 목록이 표시되지 않습니다 : 존재하는 DNS 레이블을 쿼리하더라도 A 또는 AAAA (IPv6) 레코드가 없더라도 Cocketexception ( "그러한 호스트는 알려져 있지 않음")이 던져집니다.

함수를 보면이를 확인할 수 있습니다 InternalGetHostByName(string hostName, bool includeIPv6) .NET 참조 소스 릴리스에서 DNS.CS에서. 일부 플랫폼 별 예방 조치를 제외하고 DNS 조회는 Winsock 주변의 간단한 래퍼입니다. gethostbyname 기능.

GethostbyName은 실패하거나 주소 목록을 반환합니다. 이 경우 wsano_data ( "유효한 이름, 요청 된 유형의 데이터 레코드 없음")에서 함수가 실패하기 때문에 빈 주소 목록은 반환되지 않습니다.

2012 년 5 월 편집, 빈 목록이 어쨌든 반환된다는 응답으로 표시됩니다. 이 답변은 Win32에만 적용되며 Wince와 같은 플랫폼은 상당히 다르게 행동 할 수 있습니다. Win32에서 '빈 목록'동작을보고있는 경우, 요청이 공개적으로 사용 가능한 DNS 서버에 대한 것이라면 코드를 게시하십시오 ...

다른 팁

기록을 위해.

MDB에게 감사합니다 받아 들여진 답변 나는 그것을 보았다 wsano_data 오류에 대한 설명:

요청 된 이름은 유효하며 데이터베이스에서 발견되었지만 올바른 관련 데이터가 해결되지 않았습니다. 이에 대한 일반적인 예는 DNS (Domain Name Server)를 사용하는 호스트 이름 to-address 번역 시도 (GethostbyName 또는 WsaasyncgethostbyName 사용)입니다. MX 레코드는 반환되지만 레코드는 없습니다. 호스트 자체를 표시하는 것은 존재하지만 직접 도달 할 수는 없습니다.

그래서 이것은 거의 내 질문에 대답합니다 :)

여기에는 세 가지 가능한 상황이 있습니다.

  1. 호스트 이름이 존재하고 (DNS는 레코드가 있음) IP 주소로 해결됩니다.

    • 조건은 결코 치지 않습니다
  2. 호스트 이름은 존재하지만 (DNS는 도메인에 대해 알고 있지만) 레코드는 존재하지 않습니다.

    • 이것은 매우 가능성이 거의없는 시나리오이며, 이것이 처음에는 결코 일어날 수 없다고 생각합니다.
  3. 호스트 이름은 존재하지 않습니다

    • 예외는 던져지고, 당신은 결코 거기에 도착하지 않습니다.

그래서 아니, 나는 그런 일이 일어날 수 없다고 생각합니다.

The answer is YES. The GetHostEntry method queries a DNS server for the IP addresses and aliases associated with an IP address.

IPv6 addresses are filtered from the results of the GetHostEntry method if the local computer does not have IPv6 installed. As a result, it is possible to get back an empty IPHostEntry instance if only IPv6 results where available for the address parameter.

The Aliases property of the IPHostEntry instance returned is not populated by this method and will always be empty.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top