Skip to content

Fog3211/geo-ip-generator

Repository files navigation

Geo IP Generator

A professional geolocation IP address generation service built with T3 Stack, supporting real IP address generation for 250+ countries and territories worldwide.

🌍 δΈ­ζ–‡ζ–‡ζ‘£ | English

✨ Features

  • 🎲 Random IP Generation: Generate real IP addresses by country code or name
  • πŸ“Š Batch Generation: Support generating 1-10 IP addresses at once
  • 🌍 Global Coverage: Support 250+ countries and territories (including sovereign states and territories)
  • πŸ›οΈ Territory Classification: Clear distinction between sovereign countries and territories (e.g., Hong Kong, Taiwan, Macao)
  • πŸ“‹ One-Click Copy: Support single or batch copying of generated IP addresses
  • πŸ“ Detailed Information: Display IP geolocation, ISP, and other detailed information
  • πŸ” Data Validation: Automated quality assurance with multi-API cross-validation
  • πŸš€ Modern Tech Stack: Next.js + TypeScript + Prisma + Tailwind CSS
  • πŸ“± Responsive Design: Support for desktop and mobile devices
  • πŸ”— API Support: Provide RESTful API interface for external integration

πŸ› οΈ Tech Stack

  • Frontend: Next.js 15 with App Router
  • Backend: Next.js API Routes with type-safe validation
  • Database: Prisma ORM with SQLite
  • Styling: Tailwind CSS
  • Type Safety: TypeScript
  • Development Tools: Biome for linting and formatting
  • Automation: GitHub Actions for data sync and validation

πŸš€ Quick Start

Prerequisites

  • Node.js 18+
  • pnpm
  • Git (for automated data synchronization)

1. Clone and Install

git clone <repository-url>
cd geo-ip-generator
pnpm install

2. Environment Setup

Create environment variables file:

cp .env.example .env

Edit the .env file and set the database path:

DATABASE_URL="file:./db.sqlite"
REDIS_URL="redis://localhost:6379"  # Optional, for caching acceleration

3. Data Source & Environment πŸš€

We recommend running from the prebuilt combined dataset (JSON) and importing it at service start.

# Database
DATABASE_URL="file:./prisma/db.sqlite"

# Dataset (http/https, absolute/relative path, or file://)
# Default: GitHub raw URL of this repo's combined data
#GEO_DATA_URL=https://raw.githubusercontent.com/<your-org>/<repo>/main/data/combined-geo-ip-data.json
GEO_DATA_URL=./data/combined-geo-ip-data.json

Start commands:

pnpm run prestart   # prisma db push + import data from GEO_DATA_URL (clear & refill)
pnpm run dev        # or pnpm run start

πŸš€ Performance Optimization

  • Batch Insert: Using transactions and batch operations, improving import speed by 10-50x
  • SQLite Optimization: Enable WAL mode, optimize cache and sync settings
  • Progress Display: Real-time display of import progress and statistics

πŸ’‘ Note: The initialization process takes about 3-5 minutes, most of the time is spent downloading data. The actual import speed has been significantly optimized!

4. Start Development Server

pnpm run dev

Visit http://localhost:3000

πŸ”„ Data Management & Automation

πŸ€– Automated Synchronization (Recommended)

The project is configured with GitHub Actions automated data synchronization:

# Manually trigger complete data sync (includes backup/update/multi-format export)
pnpm run data:sync

# Individual format exports
pnpm run data:export:csv
pnpm run data:export:excel

# Data quality validation
pnpm run data:validate          # Full validation (100 samples)
pnpm run data:validate:sample   # Quick validation (50 samples)

Automation Features:

  • βœ… Daily automatic run at UTC 02:00 (Beijing time 10:00)
  • βœ… Automatic backup of current data, rollback on failure
  • βœ… Smart detection of data changes, skip commit when no changes
  • βœ… Automatic generation of multiple formats: JSON, CSV, Excel
  • βœ… Automatic creation of GitHub Release and download links
  • βœ… Retain 7-day backup history
  • βœ… Integrated data quality validation (50 sample quick detection)

Manual Trigger Synchronization:

  1. Visit the project's GitHub Actions page
  2. Select "Daily Data Sync" workflow
  3. Click "Run workflow" button
  4. Optionally choose force update (even if no data changes)

πŸ“‹ Manual Data Updates (dev/CI only)

# Re-fetch latest territory data
pnpm run data:import:territories

# Re-download latest IP data
pnpm run data:import:ip2location

# Generate combined JSON
pnpm run data:export:combined

πŸ’‘ Tip: Automated synchronization has configured optimal update strategies, usually no manual operation is required.

πŸ’» Usage Guide

Web Interface

  1. IP Generation: Enter country code or name in the input box:

    • Country codes: CN, US, JP, HK, TW, MO
    • Chinese names: δΈ­ε›½, ηΎŽε›½, ζ—₯本, 香港, 台湾, ζΎ³ι—¨
    • English names: China, America, Japan, Hong Kong, Taiwan, Macao
  2. Batch Generation: Select generation count (1-10)

  3. One-Click Copy: Support single or batch copying of generated IP addresses

  4. Data Download: Visit /download page to get complete datasets

  5. Quality Monitoring: Visit /validation page to view data quality reports

Data Download Center

Dedicated data download page providing multiple formats:

  • πŸ“„ JSON Format: Complete and minified versions, suitable for APIs and programmatic access
  • πŸ“‹ CSV Format: Complete and light versions, suitable for Excel analysis and database import
  • πŸ“Š Excel Format: Multi-worksheet version, including statistical analysis and data visualization
  • πŸ“ˆ Real-time Statistics: Display latest data volume, update time, and other information

Data Quality Monitoring

Dedicated data validation page providing:

  • πŸ” Automatic Validation: Weekly automatic runs to verify IP geolocation data accuracy
  • πŸ“Š Quality Reports: Accuracy statistics, confidence analysis, third-party API comparison
  • ⚠️ Anomaly Detection: Automatically create GitHub Issues when accuracy drops below 85%
  • πŸ“š Historical Records: Save validation history for trend analysis
  • πŸ”„ Cross-validation: Use multiple third-party APIs for cross-validation, avoiding single points of failure

API Integration

Generate Random IP Addresses (GET-only)

API Endpoint: /api/generate-ip

# Generate 1 China IP
GET /api/generate-ip?country=CN

# Generate 3 US IPs
GET /api/generate-ip?country=US&count=3

# Using Chinese names
GET /api/generate-ip?country=δΈ­ε›½&count=2

Response Format:

{
  "success": true,
  "data": {
    "country": {
      "id": "CHN",
      "code2": "CN",
      "nameEn": "China",
      "nameZh": "δΈ­ε›½",
      "continent": "Asia",
      "region": "Eastern Asia"
    },
    "ips": [{
      "ip": "1.2.3.4",
      "location": { "region": "Beijing", "city": "Beijing", "isp": "China Telecom" },
      "ipRange": { "startIp": "1.2.0.0", "endIp": "1.2.255.255" }
    }],
    "totalRanges": 1250,
    "cached": false
  }
}

🎯 Use Cases

Development & Testing

  • Network Proxy Testing: Generate test IPs from different regions
  • Geolocation Services: Simulate user origins
  • CDN Distribution Testing: Test content delivery networks

Data Analysis

  • User Behavior Simulation: Simulate user access from different regions
  • A/B Testing: Geographic location-related feature testing
  • Load Testing: Simulate global user load

Security Testing

  • Firewall Rule Testing: Test regional access restrictions
  • IP Whitelist Testing: Verify access control
  • Geofencing Testing: Test regional restriction features

πŸ“Š Project Status

Latest Updates (v2.1)

  • βœ… Automated Synchronization: GitHub Actions daily automatic data synchronization
  • βœ… Backup Mechanism: Automatic backup and failure rollback to ensure data security
  • βœ… Multi-format Export: Added CSV and Excel format support
  • βœ… Download Center: Dedicated data download page
  • βœ… Quality Monitoring: Brand new data validation system and Web interface
  • βœ… Smart Validation: Multi-third-party API cross-validation for data accuracy
  • βœ… Anomaly Detection: Low accuracy automatic alerts and Issue creation
  • βœ… Timestamp Management: Filenames include timestamps for easy version management
  • βœ… Smart Detection: Only commit updates when data changes
  • βœ… Release Automation: Automatic creation of GitHub Release and download links

Data Statistics

  • Supported Territories: 250+ countries and territories
  • Sovereign Countries: 195 (UN members + non-member sovereign countries)
  • Territories: 55+ (e.g., Hong Kong, Taiwan, Macao, Puerto Rico, etc.)
  • IP Ranges: 450,000+ records
  • Data Source: IP2Location LITE (free version)

πŸ“ˆ Performance Metrics

Query Performance

  • IP Query: < 50ms (after enabling indexes)
  • Territory Query: < 100ms
  • Random Generation: < 200ms

Storage Requirements

  • JSON Data: ~2-5MB (depending on IP range count)
  • CSV Data: ~3-8MB (tabular format)
  • Excel Data: ~1-3MB (multi-worksheet)
  • Complete Database: ~500MB (3 million IP records)
  • Backup Storage: ~50MB (7-day history retention)

Automation Performance

  • Sync Frequency: Daily
  • Data Detection: < 30 seconds
  • Backup Creation: < 2 minutes
  • Format Export: < 5 minutes
  • Data Validation: < 3 minutes (50 samples)
  • Failure Rollback: < 1 minute

Data Quality Metrics

  • Validation Frequency: Weekly (manually triggerable)
  • Sample Size: 100 IP addresses (standard) / 50 (quick)
  • Accuracy Target: β‰₯ 85% (alerts triggered below this threshold)
  • API Providers: 3 (rotating usage to avoid single point dependency)
  • Confidence Calculation: Multi-API consensus scoring

βš™οΈ Deployment Configuration

GitHub Actions Setup

The project includes automated data synchronization functionality, no additional Secrets configuration required, uses default GITHUB_TOKEN.

For custom configuration:

  1. Scheduled Tasks: Modify cron expressions in .github/workflows/data-sync.yml
  2. Data Sources: Configure different data source URLs in scripts
  3. Backup Strategy: Adjust backup retention days and storage location

Local Development

# Import dataset & start
pnpm run prestart && pnpm run dev

# Test individual exports
pnpm run data:export:csv
pnpm run data:export:excel

# Check generated files
ls -la data/

# Test validation system (quick)
pnpm run data:validate:sample

πŸ—ƒοΈ Database Structure

Core Table Structure

-- Territory information table (includes countries and territories)
Country {
  id: String         // Three-letter territory code (CHN, USA, HKG, TWN, MAC)
  code2: String      // Two-letter territory code (CN, US, HK, TW, MO)
  nameEn: String     // English name
  nameZh: String     // Chinese name
  continent: String  // Continent
  region: String     // Region
  independent: Boolean // Whether it's a sovereign country
  unMember: Boolean    // Whether it's a UN member
}

-- IP range information table
IpRange {
  startIp: String    // Start IP
  endIp: String      // End IP
  countryId: String  // Associated territory code
  isp: String        // ISP provider
}

πŸ›‘οΈ Political Stance

This project maintains political neutrality:

  • Strictly follows ISO 3166-1 international standards
  • Objectively reflects real-world administrative divisions
  • Does not express any political tendencies or positions
  • Serves technical purposes without involving political disputes

🀝 Contributing

Welcome to contribute code! Please refer to the following steps:

  1. Fork the project
  2. Create a feature branch
  3. Test automated synchronization functionality
  4. Submit changes (follow Conventional Commits)
  5. Send Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Data sources:

About

Service for randomly generating IP ranges by country/region, built with Next.js, tRPC, Prisma, and Tailwind CSS.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages