IP 函数

最近更新时间:2025-03-06 18:24:42

我的收藏
IP 函数可根据 IP 地址获取 IP 地理信息及安全威胁信息,本文介绍 IP 函数的基本语法及示例。

IP 地理函数

说明:
如下函数中的 KEY 参数表示日志字段(例如 ip),其值为 IP 地址;若其值为内部 IP 地址或非法字段将无法被解析,以 “NULL”或“未知”展示。
IP 目前仅支持 IPv4地址,IPv6暂不支持。
基于 IP 地址分配机制的限制,IP 地址库无法100%准确涵盖所有 IP 地址的地理信息,极少部分 IP 地址可能会查询不到详细地理信息或地理信息存在错误。
函数名称
说明
示例

ip_to_domain
(KEY)
判断目标 IP 地址是内网地址还是外网地址。内网则返回 intranet,外网则返回 internet,非法 IP 地址则返回 invalid。
* | SELECT ip_to_domain(ip)

ip_to_country
(KEY)
分析目标 IP 地址所属国家或地区。返回结果为国家或地区的中文名称。
* | SELECT ip_to_country(ip)

ip_to_country_code
(KEY)
分析目标 IP 地址所属国家或地区的代码。返回结果为国家或地区的代码。
* | SELECT ip_to_country_code(ip)

ip_to_country_geo
(KEY)
分析目标 IP 地址所属国家或地区的经纬度。返回结果为国家或地区的经纬度。
* | SELECT ip_to_country_geo(ip)

ip_to_province
(KEY)
分析目标 IP 地址所属省份。返回结果为省份的中文名称。
* | SELECT ip_to_province(ip)

ip_to_province_code
(KEY)
分析目标 IP 地址所属省份的代码。返回结果为省份的行政区划代码。
* | SELECT ip_to_province_code(ip)

ip_to_province_geo
(KEY)
分析目标 IP 地址所属省份的经纬度。返回结果为省份的经纬度。
* | SELECT ip_to_province_geo(ip)

ip_to_city
(KEY)
分析目标 IP 地址所属城市。返回结果为城市的中文名称,国外城市为英文名。
* | SELECT ip_to_city(ip)

ip_to_city_code
(KEY)
分析目标 IP 地址所属城市的代码。返回结果为城市的行政区规划代码,暂不支持中国台湾及国外城市。
* | SELECT ip_to_city_code(ip)

ip_to_city_geo
(KEY)
分析目标 IP 地址所属城市的经纬度。返回结果为城市的经纬度,暂不支持中国台湾及国外城市。
* | SELECT ip_to_city_geo(ip)

ip_to_provider
(KEY)
分析目标 IP 地址对应的网络运营商,返回结果为网络运营商名称。
* | SELECT ip_to_provider(ip)

IP 网段函数

说明:
如下函数中的 KEY 参数表示日志字段(例如 ip),其值为 IP 地址。
其中 ip_subnet_min、ip_subnet_max、ip_subnet_range 函数中的字段值为子网掩码格式的 IP 地址(例如:192.168.1.0/24),如果字段值为通用的 IP 地址,则需要使用 concat 函数将其转换为子网掩码格式。
函数名
说明
示例

ip_prefix
(KEY,prefix_bits)
获取目标 IP 地址的前缀。返回结果为子网掩码格式 IP 地址。例如192.168.1.0/24。
* | SELECT ip_prefix(ip,24)

ip_subnet_min
(KEY)
获取 IP 网段中的最小 IP 地址。返回结果为 IP 地址,例如192.168.1.0。
* | SELECT ip_subnet_min(concat(ip,'/24'))

ip_subnet_max
(KEY)
获取 IP 网段中的最大 IP 地址。返回结果为 IP 地址,例如192.168.1.255。
* | SELECT ip_subnet_max(concat(ip,'/24'))

ip_subnet_range
(KEY)
获取 IP 网段范围。返回结果为 Array 类型的 IP 地址,例如["172.16.0.0","172.16.0.255"]。
* | SELECT ip_subnet_range(concat(ip,'/24'))

is_subnet_of(KEY)

判断目标 IP 地址是否在某网段内。返回结果为布尔值。
* | SELECT is_subnet_of('192.168.0.1/24', ip)

is_prefix_subnet_of(KEY)

判断目标网段是否为某网段的子网。返回结果为布尔值。
* | SELECT is_prefix_subnet_of('192.168.0.1/24',concat(ip, '/24'))

IP 威胁检测函数

根据 腾讯安全威胁情报中心 中的安全情报,判断指定 IP 是否为恶意 IP。
说明:
如下函数中的 KEY 参数表示日志字段(例如 ip),其值为 IP 地址。
检测基于安全情报大数据,其结果表示该 IP 是否曾存在恶意行为(例如曾注入攻击某第三方系统),并不代表其在当前日志中或当前系统中一定存在恶意行为。
函数名
说明
示例

ip_threat(KEY)

IP 是否为恶意 IP,返回结果为:
UNKNOWN:未知(未检测到威胁信息)。
SECURE:安全。
SUSPICIOUS:可疑。
MALICIOUS:恶意。
* | SELECT ip_threat(ip)

ip_threat_tags(KEY)

可疑及恶意 IP 的 威胁标签,代表该 IP 存在的具体恶意行为,返回结果为数组。
* | SELECT ip_threat_tags(ip)

ip_threat_detail(KEY)

IP 威胁检测详情,返回结果为 JSON,例如:
{
"reputation": "SECURE",
"tags": ["Tencent Business Scan"],
"extraInfo": {
"announcement": "This IP is the scanning IP for WeChat Official Accounts and Mini-Programs, which will regularly scan your data transmission to ensure smooth callbacks and stable services. If you detect scanning activities from this IP, please allow or whitelist it.",
"demo": "-",
"descibe": null,
"referer": "https://developers.weixin.qq.com/community/develop/doc/0000682a9aca4090cdfb008475b401"
},
"extraInfo_zh": {
"announcement": "此 IP为 微信公众号和小程序 的扫描 IP,将定期对您的 数据传输 进行检测,以 保障回调顺畅、服务稳定,若您发现来自此 IP 的扫描行为,请进行放行或加白...",
"demo": "-",
"descibe": null,
"referer": "https://developers.weixin.qq.com/community/develop/doc/0000682a9aca4090cdfb008475b401"
}
}
其中:
reputation:IP 是否为恶意 IP,内容同 ip_threat(KEY)
tags:可疑及恶意 IP 的威胁标签,内容同 ip_threat_tags(KEY)。
extraInfo:IP 详细说明,仅部分安全(SECURE)IP 具备,其他 IP 请前往 腾讯安全威胁情报中心 查看。
extraInfo_zh:IP 详细说明中文版本。
* | SELECT ip_threat_detail(ip)

威胁标签说明

部分常见威胁标签及含义如下:
威胁标签
含义
详细说明
xx Exploit vulnerability
xx 漏洞利用
该 IP 使用特定漏洞对用户发起攻击,例如 Weblogic 漏洞利用。
xx attack
xx 攻击
该 IP 对用户发起过特定类型的攻击,例如 CC 攻击、撞库攻击等。
xx Scanning
xx 扫描
该 IP 使用特定的漏洞对用户资产进行扫描,例如致远 OA 扫描(Zhiyuan OA Scanning)。
Brute force
暴力破解
该 IP 对用户系统存在密码尝试行为。
Proxy seconds dial
代理秒拨
代理:该 IP 在某时间点被网络黑产作为代理 IP 使用。
秒拨:该 IP 在某时间点是网络黑产提供的秒拨 IP 资源(黑产利用家庭宽带拨号在一定时间内持有作恶的 IP)。
Environmental forgery
环境伪造
该 IP 通过伪造环境以绕过或欺骗服务的安全检测。
Network traffic risk control
流量风控
该 IP 的流量触发了流量风控规则。
group control
群控
该 IP 的流量来源可能来自于群控平台或系统。

示例

此处列举了 IP 函数在不同场景下的查询和分析示例。您在执行查询和分析操作后,还可以选择合适的统计图表展示查询和分析结果。
说明:
如下示例中的 ip 为日志字段。
统计不是来自内网的请求总数。
* | SELECT count(*) AS PV where ip_to_domain(ip)!='intranet'
统计请求总数 Top10的省份。
* | SELECT ip_to_province(ip) AS province, count(*) as PV GROUP BY province ORDER BY PV desc LIMIT 10
如果上述结果中包含了内网请求,且您希望过滤这部分请求,可参考如下语句。
* | SELECT ip_to_province(ip) AS province, count(*) as PV where ip_to_domain(ip)!='intranet' GROUP BY province ORDER BY PV desc LIMIT 10
统计 IP 地址的经纬度,确认客户端分布情况。
* | SELECT ip_to_geo(ip) AS geo, count(*) AS pv GROUP BY geo ORDER BY pv DESC
统计恶意 IP,并获取每个 IP 的威胁等级、威胁标签、访问次数。
* |
select
ip,
CASE WHEN ip_threat(ip)= 'SUSPICIOUS' THEN '可疑' WHEN ip_threat(ip)= 'MALICIOUS' THEN '恶意' END as "威胁等级",
ip_threat_tags(ip) as "威胁标签",
count(*) as "访问次数"
where
ip_threat(ip) = 'SUSPICIOUS'
or ip_threat(ip) = 'MALICIOUS'
group by
ip
order by
count(*) desc
limit
10000