공부

도메인으로 IP 구하기

글로벌디노 2020. 10. 8. 13:40

도메인으로 IP 구하기

 

도메인 globaldino.tistory.com

nslookup 테스트

 

C++ 코드

#include <stdio.h>
#include <WinSock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")

BOOL DomainToIP(PCWSTR domain, PIN_ADDR addr)
{
	PADDRINFOW pAddrInfo;
	PSOCKADDR_IN sockAddr;

	if (GetAddrInfoW(domain, L"0", NULL, &pAddrInfo) != 0)
		return FALSE;

	sockAddr = (PSOCKADDR_IN)pAddrInfo->ai_addr;
	*addr = sockAddr->sin_addr;
	
	FreeAddrInfoW(pAddrInfo);
	return TRUE;
}

int main()
{
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		wprintf_s(L"WSAStartup error\n");
		return 1;
	}

	IN_ADDR inAddr;
	if (!DomainToIP(L"globaldino.tistory.com", &inAddr))
	{
		wprintf_s(L"err DomainToIP (%d)", WSAGetLastError());
		return 1;
	}

	WCHAR buf[16];
	InetNtopW(AF_INET, &inAddr.s_addr, buf, 16);

	wprintf_s(L"%s\n", buf);

	WSACleanup();

	return 0;
}

 

실행결과

 

 

하나의 도메인에 여러개의 아이피가 있는 경우가 있다

naver.com  nslookup 테스트

 

여러개의 IP 출력

C++ 코드

#include <stdio.h>
#include <WinSock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")

BOOL DomainToIPs(PCWSTR domain, PIN_ADDR addr, int addrSize, int* count)
{
	PADDRINFOW pAddrInfo;
	PSOCKADDR_IN sockAddr;

	if (GetAddrInfoW(domain, L"0", NULL, &pAddrInfo) != 0)
		return FALSE;

	int idx = 0;
	while (pAddrInfo != NULL)
	{
		sockAddr = (PSOCKADDR_IN)pAddrInfo->ai_addr;
		if (idx < addrSize)
		{
			addr[idx] = sockAddr->sin_addr;
			++idx;
		}
		++(*count);
		pAddrInfo = pAddrInfo->ai_next;
	}
	
	FreeAddrInfoW(pAddrInfo);
	return TRUE;
}

int main()
{
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		wprintf_s(L"errcode[%d] WSAStartup\n", WSAGetLastError());
		return 1;
	}

	IN_ADDR inAddr[5];
	int addrCount = 0;
	if (!DomainToIPs(L"naver.com", inAddr, 5, &addrCount))
	{
		wprintf_s(L"errcode[%d] DomainToIP\n", WSAGetLastError());
		return 1;
	}

	if (addrCount > 5)
		addrCount = 5;

	for (int i = 0; i < addrCount; i++)
	{
		WCHAR buf[16];
		InetNtopW(AF_INET, &inAddr[i].s_addr, buf, 16);

		wprintf_s(L"%s\n", buf);
	}

	WSACleanup();

	return 0;
}

 

실행결과

IP를 저장할 배열을 만들어서 테스트 해 봤다

나중에 사용시에는 메모리 동적할당을 해서 사용해야겠지

'공부' 카테고리의 다른 글

TCP 에코서버 프로그래밍  (0) 2020.10.10
내 PC의 backlog 큐 개수 구하기  (2) 2020.10.08
20201005 월요일 정리  (0) 2020.10.06
IPv4 서브넷 연습  (0) 2020.09.26
20200918 테스트 오답노트  (0) 2020.09.18