网站如果只为某地服务或是不让某地服务,自建IP库又麻烦,可以使用百度IP库,获取IP后得到归属地进行放行或阻止操作。

http://opendata.baidu.com/api.php?query=117.136.12.79&co=&resource_id=6006&oe=utf8

以上是访问接口的地址,以下是返回的信息。

{"status":"0","t":"","set_cache_time":"","data":[{"ExtendedLocation":"","OriginQuery":"117.136.12.79","SchemaVer":"","appinfo":"","disp_type":0,"fetchkey":"117.136.12.79","location":"广东省广州市 移动","origip":"117.136.12.79","origipquery":"117.136.12.79","resourceid":"6006","role_id":0,"schemaID":"","shareImage":1,"showLikeShare":1,"showlamp":"1","strategyData":{},"titlecont":"IP地址查询","tplt":"ip"}]}

个人AK码申请地址在这里:https://lbs.baidu.com/apiconsole/key

申请的访问应用(AK)使用量,个人博客网站应该是够用的。详细功能代码如下:

function banyouip(){
    // 1. 设置时区(补单引号)
    date_default_timezone_set('PRC');

    // 2. 获取真实IP(优化顺序 + 防伪造 + 清洗)
    $ip = $_SERVER['REMOTE_ADDR'];

    // 不建议优先使用 HTTP_CLIENT_IP / X_FORWARDED_FOR,极易伪造
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $forward_ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = trim($forward_ips[0]); // 去除首尾空格
    }

    // 简单IP格式校验
    if (!filter_var($ip, FILTER_VALIDATE_IP)) {
        return;
    }

    // 3. 拼接API地址(双引号支持变量插值,补全引号)
    $ak = 'HfiaKSezCc9N60uvChgT80WO4d5P4wun1';
    $api_url = "https://api.map.baidu.com/location/ip?ak={$ak}&ip={$ip}";

    // 4. 请求百度IP定位接口
    $response = wp_remote_get($api_url, [
        'timeout' => 5, // 超时时间,防止卡死
    ]);

    // 请求失败直接返回
    if (is_wp_error($response)) {
        return;
    }

    $content = wp_remote_retrieve_body($response);
    $json = json_decode($content, true);

    // JSON解析失败 / 接口返回异常
    if (json_last_error() !== JSON_ERROR_NONE || empty($json) || $json['status'] !== 0) {
        return;
    }

    // 5. 设置响应头(补引号)
    header('Content-Type: application/json; charset=UTF-8');

    $address = $json['content']['address'] ?? '';
    // 封禁 贵州省 来访
    if (strpos($address, '贵州省') !== false) {
        wp_die(
            '本站已禁止贵州IP来访,<br>但这或许并不是一扇紧闭的大门,想想办法~',
            '感谢来访-Xie Blog',
            ['back_link' => true]
        );
    }
}

//调用函数(WordPress 前台访问时执行)
add_action('template_redirect', 'banyouip',15);

标签: none

添加新评论