본문 바로가기

Programming/Win32&MFC&COM

자신의 IP를 확인하기

반응형

자신의 IP를 확인하는 방법입니다.

이전에 작성한 코드인데 Visual Studio 2012에서는 다음과 같은 코드를 맨 위에 삽입해야 합니다.

#define _WINSOCK_DEPRECATED_NO_WARNINGS

Visual Studio 2010이나 그 이하 버전에는 사용하지 않아도 될 것 같습니다.

전체 코드는 다음과 같습니다.

IP가 여러 개 리턴될 수 있기 때문에 vector로 리턴을 하도록 하였습니다.

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

using std::cout;
using std::endl;
using std::string;
using std::vector;

vector<string> GetLocalIP()
{
	vector<string> vMyIP;
	string szMyIP = "";
	char ac[80];
	WSAData wsaData;

	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		return vMyIP;
	}

	if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR)
	{
		WSACleanup();
		return vMyIP;
	}

	struct hostent* phe = gethostbyname(ac);

	if (phe == 0)
	{
		WSACleanup();
		return vMyIP;
	}

	for (int i = 0; phe->h_addr_list[i] != 0; ++i)
	{
		struct in_addr addr;
		memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
		szMyIP = inet_ntoa(addr);
		vMyIP.push_back(szMyIP);
	}

	WSACleanup();
	return vMyIP;
}

int main()
{
	vector<string> vMyIPs = GetLocalIP();
	for (auto szIP : vMyIPs)
	{
		cout << szIP << endl;
	}

	return 0;
}

필요한 형태에 맞게 수정해서 사용하시면 됩니다.

반응형