- 精确定位: 基于MaxMind GeoIP2数据库,提供城市级别的精确定位
- 多数据源融合: 整合多个地理位置数据源,提高查询准确性
- IPv4/IPv6支持: 完整支持IPv4和IPv6地址查询
- 私有网络识别: 自动识别并处理私有IP地址
- 实时地图显示: 基于Leaflet的交互式地图展示IP位置
- 多图层支持: 支持多种地图图层切换
- 响应式设计: 适配各种屏幕尺寸的地图显示
- 位置标记: 精确的地理位置标记和信息展示
- ASN信息查询: 详细的自治系统号码信息
- BGP对等体分析: 查看BGP邻居和路由信息
- 网络拓扑图: 可视化网络连接关系
- ISP信息: 详细的互联网服务提供商信息
- 深色/浅色主题: 支持主题切换,适应不同使用环境
- 流畅动画: 基于Framer Motion的精美动画效果
- 响应式布局: 完美适配桌面端和移动端
- 直观操作: 简洁明了的用户界面设计
- 智能缓存: 多层缓存机制,提升查询速度
- 数据预加载: 常用IP数据预加载和热点数据缓存
- 懒加载: 组件和地图的按需加载
- CDN优化: 静态资源CDN加速
- Node.js 20.x 或更高版本
- pnpm 包管理器
- Docker (可选,用于容器化部署)
- 克隆项目
git clone <repository-url>
cd ipinfo- 安装依赖
pnpm install- 启动开发服务器
pnpm dev- 访问应用 打开浏览器访问 http://localhost:3000
# 构建生产版本
pnpm build
# 启动生产服务器
pnpm start- 启动服务
docker-compose up -d- 查看日志
docker-compose logs -f- 停止服务
docker-compose down# 构建镜像
docker build -t ipinfo .
# 运行容器
docker run -d \
--name ipinfo \
-p 3000:3000 \
-v ./data:/app/lib/data \
ipinfoipinfo/
├── app/ # Next.js App Router
│ ├── api/ # API路由
│ │ ├── query/ # IP查询API
│ │ ├── bgp/ # BGP信息API
│ │ ├── meituan/ # 美团API代理
│ │ └── proxy-detection/ # 代理检测API
│ ├── globals.css # 全局样式
│ ├── layout.tsx # 根布局组件
│ └── page.tsx # 首页组件
├── components/ # React组件
│ ├── ui/ # 基础UI组件
│ ├── ip-info-card.tsx # IP信息卡片
│ ├── ip-query-form.tsx # IP查询表单
│ ├── ip-location-map.tsx # 地图组件
│ ├── bgp-network-chart.tsx # BGP网络图表
│ └── theme-toggle.tsx # 主题切换
├── lib/ # 核心库文件
│ ├── geoip/ # GeoIP服务
│ │ ├── reader.ts # 数据库读取器
│ │ ├── cache.ts # 缓存管理
│ │ ├── merger.ts # 数据合并
│ │ └── index.ts # 服务入口
│ ├── data/ # 数据文件
│ │ ├── GeoLite2-City.mmdb
│ │ ├── GeoLite2-ASN.mmdb
│ │ └── GeoCN.mmdb
│ ├── store.ts # 状态管理
│ ├── ip-detection.ts # IP检测工具
│ └── utils.ts # 工具函数
├── public/ # 静态资源
├── Dockerfile # Docker配置
├── docker-compose.yml # Docker Compose配置
└── package.json # 项目配置
创建 .env.local 文件配置环境变量:
# 应用配置
NODE_ENV=production
NEXT_PUBLIC_APP_URL=http://localhost:3000
# 缓存配置
CACHE_TTL=300
CACHE_MAX_SIZE=1000
# API配置
API_RATE_LIMIT=100
API_TIMEOUT=5000项目使用MaxMind GeoIP2数据库文件:
GeoLite2-City.mmdb: 城市级地理位置数据GeoLite2-ASN.mmdb: ASN和ISP信息数据GeoCN.mmdb: 中国地区增强数据
数据库文件存放在 lib/data/ 目录中,支持自动下载和更新。
- Next.js 15.4.2: React全栈框架
- React 19.1.0: 用户界面库
- TypeScript 5.x: 类型安全的JavaScript
- Tailwind CSS 4.x: 原子化CSS框架
- Framer Motion: 动画库
- Zustand: 轻量级状态管理
- Leaflet: 开源地图库
- React Leaflet: React Leaflet组件
- D3.js: 数据可视化库
- Lucide React: 图标库
- MaxMind GeoIP2: IP地理位置数据库
- mmdb-lib: MMDB数据库读取库
- Node Cache: 内存缓存
- BGP API: BGP路由信息查询
- ESLint: 代码质量检查
- Prettier: 代码格式化
- Docker: 容器化部署
- pnpm: 包管理器
获取客户端IP信息
响应示例:
{
"ip": "8.8.8.8",
"country": "美国",
"countryCode": "US",
"city": "芒廷维尤",
"location": {
"latitude": 37.4056,
"longitude": -122.0775,
"accuracy_radius": 1000
},
"isp": "Google LLC",
"asn": 15169,
"timezone": "America/Los_Angeles",
"ipVersion": "IPv4"
}查询指定IP信息
请求体:
{
"ip": "8.8.8.8"
}获取指定ASN的BGP信息
响应示例:
{
"asn": 15169,
"name": "Google LLC",
"country": "US",
"peers": [...],
"prefixes": [...]
}- 打开应用首页
- 在搜索框中输入IP地址(留空则查询当前IP)
- 点击查询按钮或按回车键
- 查看详细的IP信息和地图位置
- BGP分析: 点击ASN信息查看BGP对等体和路由信息
- 网络拓扑: 查看IP所属网络的拓扑结构
- 历史查询: 查看最近的查询历史
- 数据导出: 导出查询结果为JSON格式
点击右上角的主题切换按钮,在深色和浅色主题间切换。
欢迎贡献代码!请遵循以下步骤:
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- 使用TypeScript编写代码
- 遵循ESLint和Prettier配置
- 编写单元测试
- 更新相关文档
- 🎉 初始版本发布
- ✨ 基础IP查询功能
- 🗺️ 交互式地图展示
- 🌐 BGP网络分析
- 🎨 现代化UI设计
- 🐳 Docker容器化支持
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- MaxMind - 提供GeoIP2数据库
- Next.js - 优秀的React框架
- Leaflet - 开源地图库
- Tailwind CSS - 实用的CSS框架
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发起 Discussion
Made with ❤️ by IPInfo Team