Files
ip-info/README.md
thuanle 1ef2896fb1
All checks were successful
Build Docker Image / build (arm64) (push) Successful in 36s
Build Docker Image / build (amd64) (push) Successful in 4m18s
Build Docker Image / amend-manifest (push) Successful in 16s
query other ip
2025-10-13 17:27:14 +07:00

266 lines
5.2 KiB
Markdown

# IP Info Service
A high-performance IP geolocation service built with Go that provides detailed information about IP addresses including country, ASN (Autonomous System Number), and other geolocation data.
## Features
- 🌍 IP geolocation lookup with country information
- 🏢 ASN (Autonomous System Number) information
- 🚀 High-performance HTTP API
- 🔄 Automatic database updates
- 🐳 Docker support
- 📊 Metrics endpoint for monitoring
- 🛡️ Input validation and error handling
## Quick Start
### Using Docker (Recommended)
1. Clone the repository:
```bash
git clone <repository-url>
cd ip-info
```
2. Start the service using Docker Compose:
```bash
docker-compose up -d
```
The service will be available at `http://localhost:28080`
### Manual Installation
1. Install Go 1.22 or later
2. Clone and build:
```bash
git clone <repository-url>
cd ip-info
go mod download
go build -o ip-info
./ip-info
```
## API Endpoints
### 1. Get Your IP Information
**Plain Text Response:**
```bash
curl http://localhost:28080/
# Returns: 192.168.1.100
```
**JSON Response:**
```bash
curl http://localhost:28080/json
```
Response:
```json
{
"ip": "192.168.1.100",
"country": "US",
"country_name": "United States",
"asn": "AS15169",
"asn_org": "Google LLC"
}
```
### 2. Look Up Specific IP Address
**Query any IP address:**
```bash
curl http://localhost:28080/8.8.8.8
```
Response:
```json
{
"ip": "8.8.8.8",
"country": "US",
"country_name": "United States",
"asn": "AS15169",
"asn_org": "Google LLC"
}
```
### 3. Metrics Endpoint
Monitor service health and performance:
```bash
curl http://localhost:28080/metrics
```
## Configuration
### Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `API_PORT` | `8080` | Port for the HTTP server |
| `GIN_TRUSTED_PROXY_IP` | - | Trusted proxy IP for client IP detection |
| `GIN_MODE` | `debug` | Gin framework mode (`debug`, `release`) |
### Using .env File
Create a `.env` file in the project root:
```env
API_PORT=8080
GIN_TRUSTED_PROXY_IP=127.0.0.1
GIN_MODE=release
```
## Docker Configuration
### Docker Compose
The included `docker-compose.yml` provides:
- Service on port 28080 (maps to container port 8080)
- Persistent cache volume
- Auto-restart policy
- Vietnam timezone configuration
### Custom Docker Build
```bash
# Build image
docker build -t ip-info .
# Run container
docker run -p 8080:8080 -v $(pwd)/.cache:/app/.cache ip-info
```
## Data Sources
The service automatically downloads and updates IP geolocation databases from:
- **Country Data**: GeoLite2 Country database via jsDelivr CDN
- **ASN Data**: GeoLite2 ASN database via jsDelivr CDN
Database updates happen automatically in the background to ensure data freshness.
## Usage Examples
### Basic IP Lookup
```bash
# Get information about Google's DNS
curl http://localhost:28080/8.8.8.8
# Get information about Cloudflare's DNS
curl http://localhost:28080/1.1.1.1
# Get your own IP info
curl http://localhost:28080/json
```
### Integration Examples
**JavaScript/Node.js:**
```javascript
const response = await fetch('http://localhost:28080/8.8.8.8');
const ipInfo = await response.json();
console.log(ipInfo);
```
**Python:**
```python
import requests
response = requests.get('http://localhost:28080/8.8.8.8')
ip_info = response.json()
print(ip_info)
```
**cURL with jq:**
```bash
curl -s http://localhost:28080/8.8.8.8 | jq .
```
## Response Format
All JSON responses include:
- `ip`: The queried IP address
- `country`: ISO 3166-1 alpha-2 country code
- `country_name`: Full country name
- `asn`: Autonomous System Number (when available)
- `asn_org`: ASN organization name (when available)
## Error Handling
### Invalid IP Address
```bash
curl http://localhost:28080/invalid-ip
```
Response:
```json
{
"error": "invalid ip"
}
```
### Service Unavailable
If the database is not loaded yet:
```
HTTP 500: Try again later
```
## Performance
- **Startup Time**: Database loads automatically on startup
- **Response Time**: Sub-millisecond IP lookups after database load
- **Memory Usage**: Optimized MMDB format for efficient memory usage
- **Concurrency**: Built with Go's excellent concurrency support
## Monitoring
### Health Check
```bash
curl http://localhost:28080/metrics
```
### Logs
The service provides structured JSON logging with different log levels. In Docker:
```bash
docker-compose logs -f ip-info
```
## Development
### Local Development
```bash
# Install dependencies
go mod download
# Run in development mode
go run main.go
# Build for production
go build -o ip-info
```
### Project Structure
```
├── main.go # Application entry point
├── configs/ # Configuration files
├── internal/
│ ├── data/ # Database handling
│ └── services/
│ ├── api/ # HTTP API handlers
│ └── db_updater/ # Database update service
├── pkg/ # Shared packages
├── data/ # Database files (auto-generated)
└── docker-compose.yml # Docker configuration
```
## License
[Add your license information here]
## Contributing
[Add contribution guidelines here]
## Support
For issues and questions, please [open an issue](link-to-issues) or contact the maintainers.