显示客户端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.
 
 
 
 
 
 

3.9 KiB

echoIP

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

结合 ipinfo.ioIPIP.net纯真IP 的数据计算指定IP信息,支持IPv4与IPv6地址。

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

使用方法

命令行模式

# 查询自己的IP
shell> curl ip.343.re
···

# 查询自己IP的详细信息
shell> curl ip.343.re/info
···

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

echoIP-cli

网页访问模式

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

echoIP-web

如何部署

常规方式

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

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

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

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

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

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

配置网页服务器代理,这里以Nginx为例

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

写入配置文件

/etc/nginx/conf.d/ip.conf

server {
    listen 80;
    server_name ip.343.re; # 改为自己的域名
    include conf.d/ip.func;
}

server {
    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;
    include conf.d/ip.func;
}

/etc/nginx/conf.d/ip.func

root /var/www/echoIP;

location = / {
    if ($http_user_agent ~* (curl|wget)) {
        return 200 $remote_addr\n;
    }
    if ($scheme = http) {
        return 301 https://$server_name;
    }
    index index.html;
}

location = /ua {
    if ($http_user_agent ~* (curl|wget)) {
        return 200 $http_user_agent\n;
    }
    default_type application/json;
    return 200 $http_user_agent;
}

location = /ip {
    if ($http_user_agent ~* (curl|wget)) {
        return 200 $remote_addr\n;
    }
    if ($scheme = http) {
        return 301 https://$server_name/ip;
    }
    return 200 $remote_addr;
}

location ~* ^/([^/]+?)$ {
    set $request_ip $1;
    if ($http_user_agent ~* (curl|wget)) {
        proxy_pass https://ip.343.re/info/$request_ip; # 改成自己的域名
        break;
    }
    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
}

location ^~ /info {
    set $is_cli 0;
    set $is_https 0;
    set $is_legal 0;
    if ($uri ~* ^/info/?$) {
        set $is_legal 1;
        set $query ip=$remote_addr;
    }
    if ($uri ~* ^/info/([^/]+?)$) {
        set $is_legal 1;
        set $query ip=$1;
    }
    if ($is_legal = 0) {
        return 404;
    }
    if ($scheme = https) {
        set $is_https 1;
    }
    if ($http_user_agent ~* (curl|wget)) {
        set $is_cli 1;
        set $query $query&cli=true;
    }
    set $flag_https_cli $is_https$is_cli;
    if ($flag_https_cli = 00) {
        return 301 https://$server_name$request_uri;
    }
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param QUERY_STRING $query;
    fastcgi_param SCRIPT_FILENAME /var/www/echoIP/backend/queryInfo.php;
}

重启Nginx服务

shell> nginx -s reload

Docker方式

待补充...

许可证

MIT @dnomd343 @ShevonKuan