105 lines
2.7 KiB
Markdown
105 lines
2.7 KiB
Markdown
# IP Data API
|
|
|
|
A simple API for retrieving information about IP addresses.
|
|
|
|
## Prerequisites
|
|
|
|
- Go 1.20 or higher
|
|
|
|
## Installation
|
|
|
|
1. Clone the repository
|
|
2. Install dependencies:
|
|
|
|
```
|
|
go mod tidy
|
|
```
|
|
|
|
## Running the API
|
|
|
|
```
|
|
go run .
|
|
```
|
|
|
|
The server will start on port 8080 by default. You can change the port by setting the `PORT` environment variable.
|
|
|
|
## Configuration
|
|
|
|
The API can be configured using the following environment variables:
|
|
|
|
| Variable | Description | Default |
|
|
| -------------------- | ------------------------------------------------------------------------------ | -------- |
|
|
| `PORT` | Port to run the API server | `8080` |
|
|
| `DNS_TIMEOUT_MS` | Timeout for DNS hostname lookups in milliseconds | `500` |
|
|
| `DISABLE_DNS_LOOKUP` | Disable hostname lookups completely for faster response (set to "true" or "1") | disabled |
|
|
|
|
Example:
|
|
|
|
```
|
|
DNS_TIMEOUT_MS=300 PORT=3000 go run .
|
|
|
|
# Run with DNS lookups disabled completely
|
|
DISABLE_DNS_LOOKUP=true go run .
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
### Get IP Information
|
|
|
|
```
|
|
GET /api/ip/:ip
|
|
```
|
|
|
|
Example:
|
|
|
|
```
|
|
GET /api/ip/8.8.8.8
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"ip": "8.8.8.8",
|
|
"hostname": "dns.google",
|
|
"asn": "15169",
|
|
"as_name": "Google LLC",
|
|
"country_code": "US",
|
|
"country": "United States",
|
|
"region": "California",
|
|
"city": "Mountain View",
|
|
"latitude": 37.40599,
|
|
"longitude": -122.078514,
|
|
"zip_code": "94043",
|
|
"time_zone": "-07:00"
|
|
}
|
|
```
|
|
|
|
## Performance Optimization
|
|
|
|
For maximum performance, you can completely disable hostname DNS lookups using the `DISABLE_DNS_LOOKUP=true` environment variable. This will make all API requests faster, but the `hostname` field will be empty in the response.
|
|
|
|
## Features
|
|
|
|
- IP geolocation data (country, region, city, coordinates, timezone)
|
|
- ASN information (ASN number and organization name)
|
|
- Hostname resolution via reverse DNS lookup (with configurable timeout or ability to disable)
|
|
- Support for both IPv4 and IPv6 addresses
|
|
- In-memory data storage with efficient binary search lookups
|
|
|
|
## Data Sources
|
|
|
|
The API uses four data files:
|
|
|
|
### IPv4 Files
|
|
|
|
- `IP2LOCATION-LITE-ASN.CSV` - ASN information for IPv4 addresses
|
|
- `IP2LOCATION-LITE-DB11.CSV` - Geolocation information for IPv4 addresses
|
|
|
|
### IPv6 Files
|
|
|
|
- `IP2LOCATION-LITE-ASN.IPV6.CSV` - ASN information for IPv6 addresses
|
|
- `IP2LOCATION-LITE-DB11.IPV6.CSV` - Geolocation information for IPv6 addresses
|
|
|
|
These files are loaded into memory when the API starts. The API automatically detects whether an IP is IPv4 or IPv6 and uses the appropriate dataset.
|