Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 IP 주소 유효성 검사하기: 알고리즘과 예제 코드


C++에서 IP 주소 유효성 검사란?

이 글에서는 C++ 프로그래밍을 통해 올바른 IP(인터넷 프로토콜) 주소를 검증하는 방법을 다룹니다. IPv4 주소는 32비트 점-십진법(dot-decimal) 표기 방식으로, 0부터 255 사이의 십진수 네 개 세그먼트가 마침표(.)로 구분되어 이어진 형태입니다. IP 주소는 네트워크 안에서 호스트 머신을 고유하게 식별하여 기기 간 통신 연결을 성립시키는 핵심 역할을 합니다.

따라서 사용자가 입력한 IP 주소가 올바른 형식인지 검증하려면, 아래 알고리즘과 같은 절차로 코드를 구성하면 됩니다.

알고리즘

시작
    1단계: IP 주소를 입력받는다
    2단계: IP 주소를 네 개의 세그먼트로 분할하여 배열에 저장한다
    3단계: 각 세그먼트가 숫자로만 이루어져 있는지 확인한다
    4단계: foreach 루프를 사용해 배열 목록을 순회한다
    5단계: 각 값의 범위(256 미만)와 데이터 형식을 검사한다
    6단계: Main() 함수에서 validate 메서드를 호출한다
종료

위 알고리즘에 따라 작성된 C++ 코드입니다. 이 코드에는 숫자 형식 판별, 범위 검사, 입력 데이터 분할을 각각 담당하는 핵심 함수들이 활용됩니다.

예제 코드

#include <iostream>
#include <vector>
#include <string>
using namespace std;

// check if the given string is a numeric string or not
bool chkNumber(const string& str){
    return !str.empty() &&
    (str.find_first_not_of("[0123456789]") == std::string::npos);
}

// Function to split string str using given delimiter
vector<string> split(const string& str, char delim){
    auto i = 0;
    vector<string> list;
    auto pos = str.find(delim);
    while (pos != string::npos){
        list.push_back(str.substr(i, pos - i));
        i = ++pos;
        pos = str.find(delim, pos);
    }
    list.push_back(str.substr(i, str.length()));
    return list;
}

// Function to validate an IP address
bool validateIP(string ip){
    // split the string into tokens
    vector<string> slist = split(ip, '.');
    // if token size is not equal to four
    if (slist.size() != 4)
        return false;
    for (string str : slist){
        // check that string is number, positive, and range
        if (!chkNumber(str) || stoi(str) < 0 || stoi(str) > 255)
            return false;
    }
    return true;
}

// Validate an IP address in C++
int main(){
    cout<<"Enter the IP Address::";
    string ip;
    cin>>ip;
    if (validateIP(ip))
        cout <<endl<< "***It is a Valid IP Address***";
    else
        cout <<endl<< "***Invalid IP Address***";
    return 0;
}

코드 설명

  • chkNumber(): 문자열이 비어 있지 않고 숫자(0~9)만 포함하는지 확인합니다.
  • split(): 지정한 구분자('.')를 기준으로 문자열을 나누어 vector에 저장합니다.
  • validateIP(): 분할된 토큰이 정확히 4개인지 확인하고, 각 토큰이 숫자이면서 0~255 범위 안에 있는지 검사합니다.

위 코드를 표준 C++ 컴파일러로 빌드하고 실행하면, 사용자가 입력한 값(예: 10.10.10.2)이 유효한 IP 주소인지 다음과 같이 판정합니다.

실행 결과

Enter the IP Address:: 10.10.10.2
***It is a Valid IP Address***

입력값이 모든 조건을 충족하면 '유효한 IP 주소'라는 메시지가 출력되고, 하나라도 조건을 벗어나면 '잘못된 IP 주소'로 판정됩니다. 이처럼 간단한 문자열 분할과 범위 검증만으로도 사용자 입력에 대한 IP 주소 유효성 검사를 손쉽게 구현할 수 있습니다.