hostent 예제

HOSTENT 구조가 BLOB 데이터로 반환되면 구조내의 포인터는 실제로 데이터가 있는 메모리로 오프셋됩니다. 오프셋은 BLOB 데이터의 시작 부분부터 시작되어 데이터에 액세스하기 전에 절대 메모리 위치를 참조하도록 포인터를 수정해야 합니다. 그림 8-1은 반환된 HOSTENT 구조 및 메모리 레이아웃을 보여 주며, DNS 쿼리는 단일 IP 주소와 별칭이 없는 호스트 이름 riven에서 수행됩니다. 구조의 각 필드에는 오프셋 값이 있습니다. 필드가 올바른 위치를 참조하도록 이 문제를 해결하려면 HOSTENT 구조체의 헤드 주소에 오프셋 값을 추가해야 합니다. h_name, h_aliases 및 h_addr_list 필드에서 이 작업을 수행해야 합니다. 또한 h_aliases 및 h_addr_list 필드는 포인터의 배열입니다. 포인터 배열에 대한 올바른 포인터를 얻으면 참조 위치의 각 32비트 필드는 오프셋으로 구성됩니다. 그림 8-1의 h_addr_list 필드를 살펴보면 초기 오프셋이 16바이트이며 HOSTENT 구조가 끝난 후 바이트를 참조하는 것을 볼 수 있습니다.

4바이트 IP 주소에 대한 포인터 배열입니다. 그러나 배열의 첫 번째 포인터는 28바이트의 오프셋입니다. 올바른 위치를 참조하려면 HOSTENT 구조의 주소를 가져가서 IP 주소인 0x9D36B9BA 데이터로 4바이트 위치를 가리키는 28바이트를 추가합니다. 그런 다음 항목 후 4바이트를 28바이트의 오프셋(0)으로 합니다. 이는 포인터 배열의 끝을 의미합니다. 여러 IP 주소가 이 호스트 이름과 연결된 경우 다른 오프셋이 존재하며 첫 번째 경우와 마찬가지로 포인터를 정확하게 수정합니다. h_aliases 포인터와 참조하는 포인터 배열을 수정하기 위해 동일한 절차가 수행됩니다. 이 예제에서는 호스트에 대한 별칭이 없습니다. 배열의 첫 번째 항목은 0이며 해당 필드에 대해 추가 작업을 수행할 필요가 없다는 것을 나타냅니다. 마지막 필드는 h_name 필드로 수정하기 쉽습니다.

HOSTENT 구조의 주소에 오프셋을 추가하기만 하면 null 종료된 문자열의 시작을 가리킵니다. 이러한 함수는 호스트 이름과 IP 주소 간에 앞뒤로 매핑됩니다. 예를 들어 “www.example.com”이 있는 경우 gethostbyname()를 사용하여 IP 주소를 얻고 구조체 in_addr에 저장할 수 있습니다. 다음은 호스트 명령을 에뮬레이트하는 gethostbyname()을 사용하는 간단한 예제입니다. DNS 문제를 디버깅하기 위해 작성했습니다. (지금 현재 네트워크상에서 gethostbyname()은 호스트와 발굴과는 다른 답변을 반환합니다. 다른 호스트 이름을 지나치게 캐싱하는 것입니다. 즉, 폴루쿠쿠크 shrub.ca 17.250.248.64를 반환하고 있으며, 이는 mail.mac.com(!) gethostbyname2() 함수는 AF_INET(예: AF_INET6)를 제외한 주소 패밀리에서 조회를 허용하기 위한 gethostbyname()의 진화입니다. 쿼리 설정은 이전 예제와 매우 유사합니다. 가장 눈에 띄는 변화는 미리 정의된 GUID SVCID_INET_ HOSTADDRBYNAME을 사용한다는 것입니다. 호스트 이름 쿼리를 식별하는 GUID입니다.

lpszServiceInstanceName은 해결하려는 호스트 이름입니다. DNS를 통해 호스트 이름을 해결하기 때문에 dwNameSpace에 대한 NS_DNS만 지정해야 합니다. 마지막으로 lpafProtocols는 TCP/IP 및 UDP/IP 프로토콜을 쿼리에 관심이 있는 프로토콜로 정의하는 두 개의 AFPROTOCOLS 구조의 배열로 설정됩니다. 쿼리를 설정하면 WSALookupServiceNext()를 호출하여 데이터를 반환할 수 있습니다. 이러한 모든 코스메틱 변경 사항을 요약하면 이 호스트의 IP 주소 목록을 다음과 같은 것을 권장합니다. 이것은 char**이지만 실제로 는 변장한 s_addr*s의 구조체 배열입니다. 마지막 배열 요소는 NULL입니다. 죄송합니다 빨리 반환 버튼을 누르면 3) 출구 (-1) 당신이 얻을 것은 당신이 출구를 작성한 것처럼 동일합니다 (255), 이후 -1 표현은 일반적으로 0xffffffffff입니다 32비트 시스템에서 부모 프로세스로 반환 상태는 마지막 8로 잘립니다 비트, 출구(1)는 일반 리모트호스트 = gethostbyaddr((char*) & addr, 4, AF_INET에서 사용되는 것입니다.