728x90
반응형
SMALL
IP 주소 입력
▶네트워크 프로그램에서 IP 주소를 입력받을 때는
명령행 인수를 사용하거나 운영체제가 제공하는 입력용 컨트롤을 이용
▶이때 IP 주소를 32비트(IPv4) 또는 128비트(IPv6) 숫자로 변환해야 함
IP 주소 변환 함수
inet_pton
[in] Family
[in] pszAddrString
변환할 IP주소의 텍스트를 포함하는 문자열에 대한 포인터
[out] pAddrBuf
IP 주소의 숫자 이진 표현을 저장할 버퍼에 대한 포인터
inet_ntop
[in] pAddr
문자열로 변환할 네트워크 바이트의 IP 주소에 대한 포인터
[out] pStringBuf
IP 주소의 NULL로 종료된 문자열 표현을 저장할 버퍼에 대한 포인터
[in] StringBufSize
입력 시 pStringBuf 매개 변수가 가리키는 버퍼의 길이
// 원래의 IPv4 주소 출력
const char* ipv4test = "147.46.114.70";
printf("IPv4 주소(변환 전) = %s\n", ipv4test);
// inet_pton() 함수 연습
struct in_addr ipv4num;
inet_pton(AF_INET, ipv4test, &ipv4num);
printf("IPv4 주소(변환 후) = %#x\n", ipv4num.s_addr);
// inet_ntop() 함수 연습
char ipv4str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &ipv4num, ipv4str, sizeof(ipv4str));
printf("IPv4 주소(다시 변환 후) = %s\n", ipv4str);
바이트 정렬 함수와 IP 주소 변환 함수 사용 예
1) 응용 프로그램이 소켓 주소 구조체를 초기화하고, 소켓 함수에 넘겨 주는 경우
2) 소켓 함수가 소켓 주소 구조체를 입력으로 받아 내용을 채우면, 응용 프로그램이 이를 출력 등의 목적으로 사용하는 경우
IP 주소 변환 함수 실습
#include "..\..\Common.h"
int main(int argc, char* argv[])
{
// 윈속 초기화
WSADATA wsa;
if (0 != WSAStartup(MAKEWORD(2, 2), &wsa))
return 1;
/*----------------*/
/* IPv4 변환 연습 */
/*----------------*/
// 원래의 IPv4 주소 출력
const char* ipv4test = "147.46.114.70";
printf("IPv4 주소(변환 전) = %s\n", ipv4test);
// inet_pton() 함수 연습
struct in_addr ipv4num;
inet_pton(AF_INET, ipv4test, &ipv4num);
printf("IPv4 주소(변환 후) = %#x\n", ipv4num.s_addr);
// inet_ntop() 함수 연습
char ipv4str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &ipv4num, ipv4str, sizeof(ipv4str));
printf("IPv4 주소(다시 변환 후) = %s\n", ipv4str);
printf("\n");
/*----------------*/
/* IPv6 변환 연습 */
/*----------------*/
// 원래의 IPv6 주소 출력
const char* ipv6test = "2001:0230:abcd:ffab:0023:eb00:ffff:1111";
printf("IPv6 주소(변환 전) = %s\n", ipv6test);
// inet_pton() 함수 연습
struct in6_addr ipv6num;
inet_pton(AF_INET6, ipv6test, &ipv6num);
printf("IPv6 주소(변환 후) = 0x");
for (int i = 0; i < 16; i++)
printf("%02x", ipv6num.s6_addr[i]);
printf("\n");
// inet_ntop() 함수 연습
char ipv6str[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &ipv6num, ipv6str, sizeof(ipv6str));
printf("IPv6 주소(다시 변환 후) = %s\n", ipv6str);
// 윈속 종료
WSACleanup();
return 0;
}
728x90
반응형
LIST
'코딩 > Network' 카테고리의 다른 글
[네트워크] TCP 서버-클라이언트 (0) | 2023.04.15 |
---|---|
[네트워크] DNS와 도메인, IP 주소 변환 함수 (0) | 2023.04.15 |
[네트워크] 바이트 정렬 함수 (0) | 2023.04.14 |
[네트워크] 소켓 주소 구조체 (0) | 2023.04.14 |
[네트워크] 소켓 생성과 닫기 (0) | 2023.04.14 |