to기타to기사 상세

랜덤 IP 주소를 생성하는 방법은? 원리와 코드 예제로 자세히 설명

랜덤 IP 주소를 생성하는 방법은? 원리와 코드 예제로 자세히 설명Daniel Wong
dateTime2026-02-27 11:24
dateTime기타

웹 개발, 시스템 테스트, 데이터 시뮬레이션과 같은 환경에서는 무작위 IP 주소를 생성해야 하는 경우가 자주 있습니다. 많은 사람들의 첫 반응은 “숫자를 몇 개 아무렇게나 쓰면 되는 것 아닌가?”입니다. 하지만 실제 환경에서 사용해 보면 무작위 IP는 생각보다 훨씬 복잡하다는 사실을 금방 알게 됩니다. 생성할 수 있다고 해서 합리적인 것은 아니며, IP처럼 보인다고 해서 실제로 사용 가능한 것도 아닙니다.


IP 주소란 무엇인가?

IPv4를 예로 들면, IP 주소는 0~255 범위의 숫자 4개로 구성되며, 예시는 다음과 같습니다:

192.168.1.1
8.8.8.8

이론적으로 IPv4에는 약 43억 개의 주소가 존재하지만, 모든 주소를 자유롭게 사용할 수 있는 것은 아닙니다.

용도에 따라 IP 주소는 일반적으로 다음 세 가지 범주로 나눌 수 있습니다:

· 공인 IP: 인터넷에서 라우팅 및 접근이 가능한 주소

· 사설 IP: 로컬 네트워크 내부에서만 사용되는 주소

· 예약 / 특수 IP: 루프백, 브로드캐스트, 테스트 용도

“랜덤 IP”는 일반적으로 무작위로 생성된 공인 IP 주소를 의미합니다.

랜덤 IP를 생성하는 가장 간단한 방법 (기본 버전)

가장 일반적이고 직관적인 방법은 다음과 같습니다:

0–255 범위의 정수 4개를 무작위로 생성

.을 사용해 문자열로 결합

예제 (Python)

import random

def random_ip_basic():
    return ".".join(str(random.randint(0, 255)) for _ in range(4))

for _ in range(5):
    print(random_ip_basic())

형식만 놓고 보면, 생성된 문자열은 IPv4 형식을 완전히 충족합니다.

⚠️ 문제는 무엇일까?

이 방식은 192.168.x.x와 같은 사설 IP, 127.x.x.x와 같은 로컬 루프백 IP, 라우팅 불가능한 주소, 혹은 실제로 존재하지 않거나 이미 차단된 IP를 생성할 수 있습니다.

유효하지 않은 IP 걸러내기

1. 제외해야 할 일반적인 IPv4 주소 대역

IP 범위용도
10.0.0.0 – 10.255.255.255사설 네트워크
172.16.0.0 – 172.31.255.255사설 네트워크
192.168.0.0 – 192.168.255.255사설 네트워크
127.0.0.0 – 127.255.255.255루프백
0.0.0.0특수 주소

2. 제외해야 할 일반적인 IPv6 주소 대역

IPv6 프리픽스용도
::1/128루프백 주소
::/128미지정 주소
fe80::/10링크 로컬 주소(로컬 네트워크 전용)
fc00::/7유니크 로컬 주소(ULA, 사설 IP와 유사)
ff00::/8멀티캐스트 주소
2001:db8::/32문서/예제용 주소(라우팅 불가)

랜덤 IP 주소를 생성하는 표준 방법: ipaddress 표준 라이브러리 사용

IP 주소 처리를 위해 Python에 내장된 ipaddress 라이브러리 사용을 권장합니다.

이는 Python에서 공식적으로 유지·관리되는 표준 라이브러리로, IPv4 및 IPv6 주소의 다양한 속성을 판별하는 기능을 기본 제공하여 수작업으로 규칙을 작성하는 것보다 훨씬 신뢰성이 높습니다.

예제:

IPv4:

import random
import ipaddress

def random_public_ipv4():
    while True:
        ip = ipaddress.IPv4Address(random.randint(0, 2**32 - 1))
        if ip.is_global:
            return str(ip)

for _ in range(5):
    print(random_public_ipv4())

IPv6:

import random
import ipaddress

def random_public_ipv6():
    while True:
        ip = ipaddress.IPv6Address(random.randint(0, 2**128 - 1))
        if ip.is_global:
            return str(ip)

for _ in range(5):
    print(random_public_ipv6())

여기서 핵심 포인트는 다음과 같습니다:

is_global == True

이는 해당 IP 주소가:

사설 주소도 아니고, 루프백 주소도 아니며, 예약 주소도 아니고, 이론적으로 공용 인터넷에서 라우팅 가능한 주소임을 의미합니다.

실제 활용 사례: 프록시 IP 사용 

다음과 같은 목표가 있다면:

🌍 국가 또는 지역별 환경 시뮬레이션
🤖 웹 스크래핑 또는 데이터 수집
🔐 리스크 관리 / 부정 행위 방지 테스트
🧪 다중 계정 환경 분리

이 경우 필요한 것은 랜덤 알고리즘으로 생성한 IP가 아니라:

실제로 존재하며 연결 가능한 프록시 IP 

이러한 IP는 일반적으로 다음과 같은 특징을 가집니다:

· 인터넷 상에 실제로 존재함
· 정상적으로 네트워크 연결 가능
· 국가, ISP, ASN 등의 속성을 보유
· 시스템 입장에서 실제 사용자 네트워크와 유사하게 보임

요약

랜덤 IP 주소 생성은 단순히 숫자를 몇 개 이어 붙이는 작업이 아닙니다. 진정으로 합리적인 랜덤 IP를 생성하려면 IP 주소 할당 규칙을 준수하고, 공인·사설·예약 주소를 명확히 구분해야 합니다. Python에서는 공식 제공되는 ipaddress 표준 라이브러리를 사용하면 구조적으로 유효한 공인 IP를 보다 표준적이고 신뢰성 있게 생성할 수 있어, 테스트 및 데이터 시뮬레이션 시나리오에 적합합니다.

IPDeep 는 다음과 같은 고품질 프록시 IP 서비스를 제공합니다:

이 외에도 다양한 프록시 유형을 제공하며, IPDeep은 전 세계 200개 이상의 국가와 지역을 커버하는 1천만 개 이상의 고품질 IP 리소스를 보유하여, 복잡한 네트워크 환경에서도 다양한 비즈니스 작업을 효율적이고 안전하게 수행할 수 있도록 지원합니다.

본 문서는 Daniel Wong에 의해 원작되거나 정리·발행된 내용입니다. 재배포 시 출처를 명시해 주시기 바랍니다。 ( )
ad2