How to Generate Random IP Addresses for Web Scraping: Complete 2025 Guide

Article Summary:
● Understand IP address structure and reserved ranges
● Build working Python scripts for IPv4/IPv6 generation
● Learn to filter out invalid/reserved IP addresses
● Discover why raw IP generation isn’t enough for anonymity
● Implement practical proxy rotation with Thordata
What Is an IP Address and How Does It Work?
An IP (Internet Protocol) address is a unique numerical identifier assigned to every device connected to a network. It serves two primary functions:
1. Network Identification: Identifies your device on the internet or local network
2. Location Addressing: Provides information about your geographical location
IPv4 vs. IPv6: Key Differences
IPv4 Address Format:
● Structure: Four octets separated by periods (e.g., 168.1.1)
● Range: 0.0.0.0 to 255.255.255.255
● Capacity: ~4.3 billion addresses
IPv6 Address Format:
● Structure: Eight hexadecimal groups separated by colons (e.g., 2001:0db8:85a3:0000:0000:8a2e:0370:7334)
● Capacity: 340 undecillion addresses
● Solution to IPv4 exhaustion
Check your current IP at What Is My IP Address.com.
Why Generate Random IP Addresses? Practical Use Cases
Legitimate Applications:
● Software Testing: Simulate traffic from diverse geographic locations
● Network Security: Test firewall rules and intrusion detection systems
● Web Scraping: Avoid detection by rotating request origins
● Load Testing: Simulate multiple users from different IP ranges
What You Cannot Do:
❌ Assign generated IPs directly to your machine
❌ Bypass geographic restrictions without proxies
❌ Hide your real identity without intermediary services
How to Generate Valid Random IP Addresses in Python
Understanding Reserved IP Ranges
Before generating IPs, exclude these reserved blocks:
| Address Block | Address Range | Description |
| 0.0.0.0/8 | 0.0.0.0 – 0.255.255.255 | Current (local, “this”) network |
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 | Used for local communications within a private network |
| 100.64.0.0/10 | 100.64.0.0 – 100.127.255.255 | Shared address space for service provider and subscriber communication with carrier-grade NAT |
| 127.0.0.0/8 | 127.0.0.0 – 127.255.255.255 | Used for loopback addresses to the local host |
| 169.254.0.0/16 | 169.254.0.0 – 169.254.255.255 | Used for link-local addresses when no IP is specified (e.g., DHCP failure) |
| 172.16.0.0/12 | 172.16.0.0 – 172.31.255.255 | Used for local communications within a private network |
| 192.0.0.0/24 | 192.0.0.0 – 192.0.0.255 | IETF Protocol Assignments, DS-Lite (/29) |
| 192.0.2.0/24 | 192.0.2.0 – 192.0.2.255 | Assigned as TEST-NET-1, for documentation and examples |
| 192.88.99.0/24 | 192.88.99.0 – 192.88.99.255 | Reserved. Formerly used for IPv6 to IPv4 relay |
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | Used for local communications within a private network |
| 198.18.0.0/15 | 198.18.0.0 – 198.19.255.255 | Used for benchmark testing of inter-network communications between separate subnets |
| 198.51.100.0/24 | 198.51.100.0 – 198.51.100.255 | Assigned as TEST-NET-2, for documentation and examples |
| 203.0.113.0/24 | 203.0.113.0 – 203.0.113.255 | Assigned as TEST-NET-3, for documentation and examples |
| 224.0.0.0/4 | 224.0.0.0 – 239.255.255.255 | In use for multicast (former Class D network) |
| 233.252.0.0/24 | 233.252.0.0 – 233.252.0.255 | Assigned as MCAST-TEST-NET, for documentation and examples (part of multicast space) |
| 240.0.0.0/4 | 240.0.0.0 – 255.255.255.254 | Reserved for future use (former Class E network) |
| 255.255.255.255/32 | 255.255.255.255 | Reserved for the “limited broadcast” destination address |
Complete Python Implementation
import random
import ipaddress
def generate_random_ipv4():
“””
Generate a random, non-reserved IPv4 address
Returns a string in the format X.X.X.X
“””
while True:
# Generate a random IP address with four octets
ip = f”{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}”
# Check if the generated IP is within the reserved blocks
if not ipaddress.IPv4Address(ip).is_reserved:
return ip
# Test the function
if __name__ == “__main__”:
ip = generate_random_ipv4()
print(f”Generated IP: {ip}”)
Why Generated IPs Alone Won’t Protect Your Privacy
The Fundamental Limitation
While you can generate random IP addresses, you cannot directly use them for outgoing connections. Your internet traffic always routes through your ISP-assigned IP.
Real Solutions for Anonymity:
Proxy Servers: Intermediate servers that mask your real IP, and Residential Proxies: Legitimate IPs from real devices.
Implementing Practical IP Rotation with Proxies
Python Proxy Rotation Script
import requests
import random
# Pool of proxies
proxies = [
“<PROXY_URL_1>”,
“<PROXY_URL_2>”,
“<PROXY_URL_3>”
]
# Get a random proxy config
def get_random_proxy():
return {“http”: random.choice(proxies), “https”: random.choice(proxies)}
# Example usage
proxy = get_random_proxy()
response = requests.get(“https://example.com”, proxies=proxy)
Top 3 Proxy Providers for Effective IP Rotation
1. Thordata

Why Choose Thordata:
✅ 100M+ residential IPs across 190 countries
✅ AI-powered anti-detection technology
✅ 99.9% uptime guarantee
✅ Ethical sourcing compliant
Best For: Enterprise web scraping, ad verification, price monitoring
2. Bright Data

● Advanced CAPTCHA solving
● Structured data extraction
3. Oxylabs

● Auto-IP rotation
Web Scraping APIs Solution
A web scraping API provides all the tools you need to simplify the web scraping process. Instead of handling complexities like managing proxies, user agents, CAPTCHA, anti-bot measures, and retries, you simply call the API with your target URL. It returns the HTML content of the page or automatically extracts the data into a structured JSON format.
Discover why Thordata’s Scraper API is one of the best web scraping solutions, offering advanced anti-bot management, IP rotation, data scheduling, and much more.
👍 Pros:
All-in-one scraping solution
Access to a large set of IPs in your application with no configuration required
Scalable for large projects
Conclusion
Generating random IP addresses is valuable for testing and development, but practical anonymity requires proxy services. For reliable web scraping and geo-restriction bypassing, Thordata provides the most robust proxy infrastructure with extensive IP diversity and advanced anti-detection capabilities.
Remember: Always respect terms of service, implement proper rate limiting, and use these tools ethically.
We hope the information provided is helpful. However, if you have any further questions, feel free to contact us at support@thordata.com or via online chat.
Frequently asked questions
How does a random IP address generator work in Python?
The generator creates valid IP addresses by producing random numbers within the 0-255 range for each octet, then validates them against IANA’s reserved ranges using Python’s ipaddress module to ensure they’re usable for public traffic
Can I use generated IP addresses for actual web browsing?
No, generated IPs are only simulated addresses. To actually route traffic through different IPs, you need proxy servers.
What’s the difference between datacenter and residential proxies for IP rotation?
Datacenter proxies come from cloud servers and are cheaper but easier to detect. Residential proxies like Thordata’s come from real ISP-assigned IPs, making them more legitimate and harder to block for scraping tasks.
