IPv4의 주소를 알아보는 방법을 얻기 위해서, popen을 사용하는 방법을 찾았었다.
하지만, 이것이 생각보다 불편하다.(각 열을 분석해서 출력해야되는 문제점이 있다.
그래서 구글링을 해보니, gethostbyname라는 함수가 있다는 걸 알게 되었다. 1
예시 사이트들이 많이 있는데, 그 중에 하나의 소스를 사용하고자 한다.
예시 사이트 :
http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancednsrnr8e.html
http://www.tenouk.com/Winsock/Winsock2example7.html
http://stackoverflow.com/questions/26888853/ip-address-order-in-gethostbyname-function
gethostbyname이라는 함수는 ipv4에 맞춰서 데이터를 가지는 구조체를 가지게 해주고, 해당 구조체에서 inet_ntoa 함수를 사용해서 십진수 3자리 4블럭으로 된 문자열을 출력한다.
이걸 이용하면, 간단하게 현재 설정되어 있는 IPv4 값을 얻을 수 있게 되고, 이걸 이용해서 자동으로 ip을 생성하는 소스를 짤 수 있게 된다.
다음은 예시 사이트에서 있는 답변 중 하나를 가지고 왔다.
소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> #include <winsock.h> #pragma comment(lib, "Ws2_32.lib") int main() { char hostname[255]; struct hostent *he; struct in_addr **addr_list; WSAData data; WSAStartup(MAKEWORD(2, 2), &data); gethostname(hostname, 255); std::cout << "Host name: " << hostname << std::endl; if ((he = gethostbyname(hostname)) == NULL) { std::cout << "gethostbyname error" << std::endl; } else { std::cout << "IP addresses: " << std::endl; addr_list = (struct in_addr **)he->h_addr_list; for(int i = 0; addr_list[i] != NULL; i++) { std::cout << inet_ntoa(*addr_list[i]) << std::endl; } } return 0; } | cs |
예시를 보면, 알겠지만, ws2_32.lib을 사용해줘야 한다.
만약, #pragma comment(lib, "Ws2_32.lib")을 넣지 않으면, 사용자가 일일히 lib을 연결시켜 줘야 한다.
예제
gcc -o winsock winsock.c -lws2_32
이렇게 사용하는 것이다.
- https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms738524(v=vs.85).aspx(2016-06-06) [본문으로]
'연습' 카테고리의 다른 글
GCC로 Static Library 만들기. (0) | 2016.06.14 |
---|---|
Windows MouseEvent 처리 (0) | 2016.06.13 |
마우스 커서 위치 조절하기. (0) | 2016.06.11 |
GAS로 플로피 BootLoader 만들기. (0) | 2016.06.10 |
JavaScript로 클라이언트 디바이스 확인하기. (0) | 2016.06.09 |