显示客户端IP的详细信息
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Dnomd343 8f0d3de33a fix: display misplaced when the content is too short 4 years ago
assets fix: display misplaced when the content is too short 4 years ago
backend update: docker configuration 4 years ago
conf update: new url format for google earth, turn on the gzip support of nginx 4 years ago
Dockerfile update: docker configuration 4 years ago
LICENSE docs: LICENSE 4 years ago
README.md fix: display misplaced when the content is too short 4 years ago
error.html update: optimize error page, add aero glass effect 4 years ago
index.html fix: map wrongly locked in mobile, QR code out of range 4 years ago

README.md

echoIP

显示客户端IP、查询IP详细信息

结合 ipinfo.ioIPIP.net纯真IP 的数据获取IP地址的信息,支持IPv4与IPv6地址。

客户端可直接向服务器询问自己的IP地址,同时可指定任意IP地址获取其详细信息。

如何使用

命令行模式

# 查询客户端IP
shell> curl ip.343.re
···

# 查询客户端UA
shell> curl ip.343.re/ua
···

# 查询客户端IP的详细信息
shell> curl ip.343.re/info
···

# 查询指定IP地址详细信息
shell> curl ip.343.re/8.8.8.8
···

echoIP-cli

网页访问模式

你可以直接在 https://ip.343.rehttps://ip.dnomd343.top 上进行查询,或者将项目部署到自己的服务器上。

echoIP-web

如何部署

如果想在自己域名下建立本服务,可按如下方式部署

Docker方式(推荐)

echoIP支持Docker容器部署,在Docker Hub可获取已构建的镜像。

确定你的服务器上有Docker环境

shell> docker -v
···Docker版本信息···

启动容器并映射端口

# 映射容器服务到宿主机1601端口
shell> docker run -d --name echoip -p 1601:1601 dnomd343/echoip

测试容器是否正常工作

shell> curl 127.0.0.1:1601/8.8.8.8
···8.8.8.8的详细信息···

配置Nginx反向代理

# 进入Nginx配置目录
shell> cd /etc/nginx/conf.d
shell> vim ip.conf
···

写入配置文件

server {
    listen 80;
    listen [::]:80;
    server_name ip.343.re; # 改为自己的域名
    location / {
        if ($http_user_agent !~* (curl|wget)) {
            return 301 https://$server_name$request_uri;
        }
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:1601;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ip.343.re; # 改为自己的域名
    ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书
    ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem;

    gzip on;
    gzip_buffers 32 4K;
    gzip_comp_level 6;
    gzip_min_length 100;
    gzip_types application/javascript text/css text/xml;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:1601;
    }
}

重启Nginx服务

shell> nginx -s reload

常规方式

首先拉取仓库到你的服务器上,这里以 /var/www/echoIP 为例

shell> cd /var/www
shell> git clone https://github.com/dnomd343/echoIP.git
Cloning into 'echoIP'...
···
Unpacking objects: 100% ··· done.

确定你的服务器上有PHP环境、Nodejs环境,同时有 curlwget 工具

shell> php -v
···PHP版本信息···

shell> node -v
···Nodejs版本信息···

shell> curl --version
···curl版本信息···

shell> wget --version
···wget版本信息···

开启纯真IP库解析服务

shell> cd /var/www/echoIP/backend/qqwryFormat
# 默认端口为1602,注意不要重复开启
shell> ./start.sh

配置网页服务器代理,需要额外占用除80与443之外的一个端口,默认为TCP/1601,可按需修改

# 进入nginx配置目录
shell> cd /etc/nginx/conf.d

# 从代码仓库复制配置文件
shell> cp /var/www/echoIP/conf/nginx/ip.conf ./

# 修改配置文件,将ip.343.re改为需要部署的域名
shell> vim ip.conf
···

重启Nginx服务

shell> nginx -s reload

特殊情况

在一些情况下,可能Nginx无法直接监听80与443端口,而是通过前置服务转发到指定端口,这种情况下配置文件需要稍加改动,同时前置服务器应开启 Proxy Protocol 支持。

# http流量转发到TCP/81端口
server {
    listen 81 proxy_protocol;
    listen [::]:81 proxy_protocol;
    server_name ip.343.re; # 改为自己的域名
    location / {
        if ($http_user_agent !~* (curl|wget)) {
            return 301 https://$server_name$request_uri;
        }
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        proxy_pass http://127.0.0.1:1601;
    }
}

# https流量转发到TCP/444端口
server {
    listen 444 ssl http2 proxy_protocol;
    listen [::]:444 ssl http2 proxy_protocol;
    server_name ip.343.re; # 改为自己的域名
    ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书
    ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem;

    gzip on;
    gzip_buffers 32 4K;
    gzip_comp_level 6;
    gzip_min_length 100;
    gzip_types application/javascript text/css text/xml;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;

    location / {
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        proxy_pass http://127.0.0.1:1601;
    }
}

开发资料

Docker容器

制作echoIP镜像

shell> docker build -t echoip https://github.com/dnomd343/echoIP.git#master

启动容器

shell> docker run -d --name echoip -p 1601:1601 echoip

进入容器调试

shell> docker exec -it echoip sh

部分接口

  1. echoIP支持在URL中指定查询目标IP,格式形如 https://ip.343.re?ip=1.2.3.4,访问时自动显示该IP地址的信息。

  2. echoIP后端支持返回当前版本信息,接口位于 /version 下,若请求来自命令行,则返回可视化格式,否则返回JSON数据。

shell> curl ip.343.re/version
echoip -> v1.1
qqwry.dat -> 2021-04-21
ipip.net -> 2019-07-03

shell> curl https://ip.343.re/version --user-agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42'
{"echoip":"v1.1","qqwry":"20210421","ipip":"20190703"}
  1. echoIP后端统一接口为 /query,可请求以下参数
error -> 请求出错
version -> 获取版本数据
cli -> 来自命令行下的请求
justip -> 仅查询IP地址
ip -> 请求指定IP的数据

示例

shell> curl "ip.343.re/query?justip=true"
{"ip":"116.57.98.121"}

shell> curl "ip.343.re/query?justip=true&cli=true"
116.57.98.124

shell> curl "ip.343.re/query?cli=true&ip=7.7.7.7"
IP: 7.7.7.7
AS: AS8003
City: Atlantic City
Region: New Jersey
Country: US - United States(美国)
Timezone: America/New_York
Location: 39.3642,-74.4231
ISP: Global Resource Systems, LLC
Scope: 7.0.0.0/8
Detail: 美国俄亥俄州哥伦布市DoD网络信息中心

ipinfo.io

在线请求,格式为 https://ipinfo.io/$IP/json,返回指定IP对应的信息,形如:

{
  "ip": "47.242.30.65",
  "city": "Kowloon",
  "region": "Kowloon City",
  "country": "HK",
  "loc": "22.3167,114.1833",
  "org": "AS45102 Alibaba (US) Technology Co., Ltd.",
  "timezone": "Asia/Hong_Kong",
  "readme": "https://ipinfo.io/missingauth"
}

查询代码位于 backend/ipinfo.php

IPIP.net

离线数据库,在官网登录后即可下载,国内可精确到市,格式为ipdb,数据不定期更新。

数据库文件位于 backend/ipipfree.ipdb, 查询代码位于 backend/ipip.php

纯真IP库

离线数据库,获取方式及解码原理可以参考这篇博客,国内定位精度较高,数据每5天更新一次。

数据库文件位于 backend/qqwry.dat,数据库更新脚本位于 backend/qqwryUpdate.sh,查询代码位于 backend/qqwry.php,数据解析服务位于 backend/qqwryFormat/*

Docker部署方式中,容器内已经预留了 qqwry.dat 的自动升级功能,每天00:00时会运行脚本拉取数据库更新。对于常规部署方式,可以配置 crontab 自动执行更新脚本,示例如下

# 打开crontab任务列表
shell> crontab -e
···
# 添加如下一行,表示每天00:00时自动运行指定脚本
0   0   *   *   *   /var/www/echoIP/backend/qqwryUpdate.sh

许可证

MIT ©2021 @dnomd343 @ShevonKuan