月沙工具箱开发工具

IP归属地查询 · 全球 IPv4 / IPv6 双栈定位

免费 · 双数据源 · IPv4/IPv6 全覆盖

本地 IP 数据库(未加载 更新)提供毫秒级 IPv4 区县级定位,在线接口补充 IPv6、运营商、国家/省/市信息。双数据源交叉验证,兼顾响应速度与覆盖范围。

8.8.8.8 Google DNS 1.1.1.1 Cloudflare 114.114.114.114 2001:4860:4860::8888 2400:3200::1 阿里DNS

您的当前 IP 地址

IPv4 点击查询
正在获取...
IPv6 点击查询
正在获取...
在上方输入框输入 IP 地址,或点击上方您的 IP 地址块开始查询
本次请求的服务器端环境
REMOTE_ADDR
172.204.27.19
SERVER_PROTOCOL
HTTP/2.0
REQUEST_METHOD
GET
HTTP_HOST
ip.yuesha.com
HTTP_USER_AGENT
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
HTTP_ACCEPT_LANGUAGE
en-US,en;q=0.9
HTTP_X_FORWARDED_FOR
172.204.27.19, 172.204.27.19
HTTP_CF_CONNECTING_IP
172.204.27.19

代理服务器、CDN、负载均衡器会把客户端真实 IP 通过 X-Forwarded-ForX-Real-IPForwarded 等 HTTP 头转发给后端;REMOTE_ADDR 是 TCP 直连端的 IP,在经过反向代理时通常显示代理自身地址。

双栈 IPv4 / IPv6

同时识别 IPv4 与 IPv6 地址,自动识别 IPv4-mapped IPv6(::ffff:a.b.c.d)并提取内嵌地址。

城市级定位

返回国家、省/州、城市三级地理标签,以及运营商信息,覆盖全球 200+ 国家与地区。

双数据源交叉验证

本地数据库 + 在线接口双路查询,结果并排展示,便于交叉对比,单一数据源失败不影响整体可用性。

批量查询

支持一次性粘贴多个 IP(每行一个),表格化展示归属地与运营商信息。

请求头透视

展示服务器实际接收到的 REMOTE_ADDR 与各代理转发头,方便排查链路问题。

反向 DNS 与网段

对公网 IP 执行反向 DNS 解析(PTR 记录),并展示归属网段的起止地址范围。

IP 归属地查询的工作原理

IP 归属地查询是通过查询 IP 地址分配数据库,把一个 IP 地址映射到其注册的地理位置(国家、省、市)和网络属性(运营商)的过程。本工具采用「本地数据库 + 在线接口」双数据源协同工作,兼顾响应速度与数据覆盖范围。

双数据源协同架构

  1. 本地数据库(IPv4 主力源):内置 IP 归属地数据库,通过二分查找算法在索引文件中定位 IP 段,本地毫秒级返回中国境内区县级归属地和运营商信息。当前数据库更新时间:未加载
  2. 在线接口(IPv4 / IPv6 通用源):当查询 IPv6 地址或需要交叉验证时,自动调用在线 IP 查询接口,返回国家、省、市、运营商四个字段。在线接口覆盖全球 IPv4 与 IPv6 地址,HTTPS 加密传输。

两类数据源通过 lookup() 方法串联:先查本地数据库(仅 IPv4),再查在线接口(IPv4 / IPv6 通用);任一数据源失败均不影响其他源返回,最终结果以并排对比形式展示,用户可直观判断数据一致性。

IPv4 与 IPv6 的差异与处理

IPv4 是 32 位地址,约 43 亿个,理论上无法满足全球设备需求;IPv6 是 128 位地址,容量约 3.4×10^38 个,是 IPv4 的 7.9×10^28 倍。两类地址的归属地数据库完全独立,本工具的本地数据库仅覆盖 IPv4,IPv6 归属地通过在线接口获取。

常见需要特殊处理的场景:

影响定位精度的因素

IP 归属地本质上不是「设备 GPS 位置」,而是 IP 注册地的近似位置,因此存在固有偏差:

因此,本工具的查询结果仅供参考,不能作为法律依据或精确物理定位

典型应用场景

网络安全与风控

本地化内容与营销

合规与数据治理

免费 IP 归属地查询 API

本工具同时提供 GET / POST 接口,参数 id 为待查询 IP,返回完整 HTML 页面。如需纯 JSON 接口获取当前访问者 IP,请调用 /https://ip.yuesha.com/api.php

cURL

curl -X POST "https://ip.yuesha.com/" -d "id=8.8.8.8"

Python

import requests

resp = requests.post("https://ip.yuesha.com/", data={"id": "8.8.8.8"}, timeout=10)
print(resp.text)

Node.js

const axios = require('axios');

axios.post('https://ip.yuesha.com/', 'id=8.8.8.8', {
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  timeout: 10000
}).then(r => console.log(r.data));

Java (JDK 11+)

import java.net.URI;
import java.net.http.*;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest req = HttpRequest.newBuilder()
                .uri(URI.create("https://ip.yuesha.com/"))
                .header("Content-Type", "application/x-www-form-urlencoded")
                .POST(HttpRequest.BodyPublishers.ofString("id=8.8.8.8"))
                .build();
        HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
        System.out.println(resp.body());
    }
}

Go

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "strings"
    "time"
)

func main() {
    form := url.Values{}
    form.Set("id", "8.8.8.8")
    client := &http.Client{Timeout: 10 * time.Second}
    resp, err := client.PostForm("https://ip.yuesha.com/", form)
    if err != nil { panic(err) }
    defer resp.Body.Close()
    buf := new(strings.Builder)
    buf.ReadFrom(resp.Body)
    fmt.Println(buf.String())
}

PHP

<?php
$ctx = stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query(['id' => '8.8.8.8']),
        'timeout' => 10,
    ]
]);
echo file_get_contents('https://ip.yuesha.com/', false, $ctx);

C#

using System;
using System.Collections.Generic;
using System.Net.Http;

class Program {
    static async Task Main() {
        using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) };
        var content = new FormUrlEncodedContent(new Dictionary<string, string> { { "id", "8.8.8.8" } });
        var resp = await client.PostAsync("https://ip.yuesha.com/", content);
        Console.WriteLine(await resp.Content.ReadAsStringAsync());
    }
}

使用建议:

  1. 请设置合理超时(建议 8–10 秒),并在失败时进行重试或降级。
  2. 批量场景请使用本页「批量查询」标签,避免短时间高频请求触发在线接口限流。
  3. 本接口返回 HTML 页面;如需 JSON 格式当前 IP,请访问 /https://ip.yuesha.com/api.php
ℹ️

月沙工具箱 | 内容与使用声明

我们坚持为全球中文用户提供准确、可靠的在线工具。
所有工具均遵循我们 "关于我们" 页面中所述的审核原则进行开发与维护。请注意: IP 归属地查询结果受数据库更新频率、代理/VPN、移动网络等多种因素影响,仅供参考,不构成任何专业建议。