Before copying a CORSPROXY request, replace the API-key placeholder with your account key and register the browser app’s domain. Free is for browser requests; server-side use needs a paid plan, and conversion, extraction, or custom caching needs Production. Follow the first-request guide for setup and error diagnosis.
What is IPv4?
IPv4 (Internet Protocol version 4) is the fourth version of the Internet Protocol and the most widely deployed protocol for routing internet traffic. It uses 32-bit addresses written in dotted-decimal notation (e.g., 192.168.1.1) and provides the foundation for modern internet communication.
IPv4 Address Structure
Address Format
192.168.1.100
Binary representation:
11000000.10101000.00000001.01100100
32 bits total = 4 bytes (octets)
Each octet: 0-255
Total addresses: 2^32 = 4,294,967,296
Address Classes
// Class A: 1.0.0.0 to 126.255.255.255
// Network bits: 8, Host bits: 24
// Used for: Large networks (16.7M hosts)
// Class B: 128.0.0.0 to 191.255.255.255
// Network bits: 16, Host bits: 16
// Used for: Medium networks (65,536 hosts)
// Class C: 192.0.0.0 to 223.255.255.255
// Network bits: 24, Host bits: 8
// Used for: Small networks (254 hosts)
// Class D: 224.0.0.0 to 239.255.255.255
// Used for: Multicast
// Class E: 240.0.0.0 to 255.255.255.255
// Reserved for experimental use
Private IPv4 Ranges
Reserved Address Spaces
interface PrivateRanges {
classA: '10.0.0.0/8'; // 10.0.0.0 - 10.255.255.255
classB: '172.16.0.0/12'; // 172.16.0.0 - 172.31.255.255
classC: '192.168.0.0/16'; // 192.168.0.0 - 192.168.255.255
loopback: '127.0.0.0/8'; // 127.0.0.1 (localhost)
linkLocal: '169.254.0.0/16'; // Auto-configuration
}
// Example: Check if IP is private
function isPrivateIPv4(ip: string): boolean {
const parts = ip.split('.').map(Number);
const firstOctet = parts[0];
const secondOctet = parts[1];
// Class A private
if (firstOctet === 10) return true;
// Class B private
if (firstOctet === 172 && secondOctet >= 16 && secondOctet <= 31) return true;
// Class C private
if (firstOctet === 192 && secondOctet === 168) return true;
// Loopback
if (firstOctet === 127) return true;
return false;
}
IPv4 with Proxy Servers
Specifying IPv4 in Requests
// Using CorsProxy with IPv4
const response = await fetch(
'https://corsproxy.io/?key=YOUR_API_KEY&url=https://api.example.com/data',
{
headers: {
'x-cors-api-key': process.env.CORS_API_KEY,
'x-cors-proxy-type': 'datacenter',
// Proxy will use IPv4 by default
}
}
);
// Getting your current IPv4 address
const ipResponse = await fetch('https://api.ipify.org?format=json');
const { ip } = await ipResponse.json();
console.log(`Your IPv4: ${ip}`);
IPv4 Proxy Configuration
class IPv4ProxyManager {
private proxyList: string[];
constructor(proxies: string[]) {
this.proxyList = proxies;
}
// Rotate through IPv4 proxies
getNextProxy(): string {
const proxy = this.proxyList.shift();
if (proxy) {
this.proxyList.push(proxy);
return proxy;
}
throw new Error('No proxies available');
}
// Validate IPv4 format
isValidIPv4(ip: string): boolean {
const parts = ip.split('.');
if (parts.length !== 4) return false;
return parts.every(part => {
const num = parseInt(part, 10);
return num >= 0 && num <= 255 && part === num.toString();
});
}
}
// Usage
const manager = new IPv4ProxyManager([
'203.0.113.1:8080',
'203.0.113.2:8080',
'203.0.113.3:8080'
]);
const proxy = manager.getNextProxy();
CIDR Notation
Subnet Masks
// CIDR (Classless Inter-Domain Routing)
// Format: IP/prefix-length
interface CIDRBlock {
notation: '192.168.1.0/24';
netmask: '255.255.255.0';
network: '192.168.1.0';
broadcast: '192.168.1.255';
usableIPs: 254; // .1 to .254
totalIPs: 256;
}
// Calculate network range
function calculateCIDR(cidr: string) {
const [ip, prefixStr] = cidr.split('/');
const prefix = parseInt(prefixStr, 10);
const totalIPs = Math.pow(2, 32 - prefix);
const usableIPs = totalIPs - 2; // Subtract network and broadcast
return {
ip,
prefix,
totalIPs,
usableIPs,
subnetMask: calculateSubnetMask(prefix)
};
}
function calculateSubnetMask(prefix: number): string {
const mask = ~((1 << (32 - prefix)) - 1);
return [
(mask >>> 24) & 255,
(mask >>> 16) & 255,
(mask >>> 8) & 255,
mask & 255
].join('.');
}
// Examples
console.log(calculateCIDR('10.0.0.0/8')); // 16,777,216 IPs
console.log(calculateCIDR('172.16.0.0/12')); // 1,048,576 IPs
console.log(calculateCIDR('192.168.1.0/24')); // 256 IPs
IPv4 Exhaustion
The Address Shortage
Total IPv4 addresses: 4,294,967,296
Reserved/Private: ~600 million
Publicly routable: ~3.7 billion
World population: 8+ billion
Internet users: 5+ billion
Connected devices: 50+ billion
Solution: IPv6 (340 undecillion addresses)
NAT (Network Address Translation)
// NAT allows multiple devices to share one public IPv4
/*
Public IPv4: 203.0.113.50
Private Network:
├─ 192.168.1.10 (Device 1)
├─ 192.168.1.11 (Device 2)
└─ 192.168.1.12 (Device 3)
All devices share 203.0.113.50 for outbound connections
*/
// Detecting NAT
async function detectNAT() {
// Get public IP
const publicResponse = await fetch('https://api.ipify.org?format=json');
const { ip: publicIP } = await publicResponse.json();
// Get local IP (browser example)
const pc = new RTCPeerConnection({ iceServers: [] });
pc.createDataChannel('');
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
const localIP = offer.sdp.split('\n')
.find(line => line.includes('candidate'))
?.match(/\d+\.\d+\.\d+\.\d+/)?.[0];
return {
publicIP,
localIP,
behindNAT: publicIP !== localIP
};
}
IPv4 Geolocation
IP-Based Location Lookup
interface IPv4Location {
ip: string;
country: string;
countryCode: string;
region: string;
city: string;
latitude: number;
longitude: number;
isp: string;
timezone: string;
}
async function geolocateIPv4(ip: string): Promise<IPv4Location> {
const response = await fetch(`https://ipapi.co/${ip}/json/`);
return response.json();
}
// Usage with proxy
const location = await geolocateIPv4('8.8.8.8');
console.log(`IP ${location.ip} is in ${location.city}, ${location.country}`);
IPv4 vs IPv6
Key Differences
interface ProtocolComparison {
ipv4: {
addressSize: 32; // bits
format: '192.0.2.1';
totalAddresses: '4.3 billion';
header: '20-60 bytes';
security: 'Optional (IPsec)';
configuration: 'DHCP or manual';
};
ipv6: {
addressSize: 128; // bits
format: '2001:0db8::1';
totalAddresses: '340 undecillion';
header: '40 bytes (fixed)';
security: 'Built-in (IPsec)';
configuration: 'Auto (SLAAC)';
};
}
Best Practices
For Developers
- Always validate IPv4 format before use
- Handle both IPv4 and IPv6 in applications
- Use CIDR notation for network ranges
- Implement proper error handling for IP operations
For Network Configuration
- Use private ranges for internal networks
- Implement NAT for address conservation
- Plan for IPv6 transition
- Monitor IP address allocation
