IP解析函数
更新时间:2026-09-01
IP解析函数
简介
本文介绍IP解析函数的语法规则,包括参数解释、函数示例等。
ip_version 函数
函数定义
判断IP地址为IPv4还是IPv6。若是IPv4类型IP地址,则返回IPv4,若是IPv6类型IP地址,则返回IPv6。
语法描述
Text
1ip_version(ip, default="")
参数说明
| 参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
|---|---|---|---|---|---|
| ip | 输入IP地址 | Any | 是 | - | - |
| default | 无法判断IP地址版本时,返回该值,默认为空字符串 | String | 否 | "" | - |
示例
- 示例1
原始日志:
Text
1{"ip": "192.168.1.100"}
加工规则:
Text
1e_set("ip_version",ip_version(v("ip")))
加工结果:
Text
1{"ip": "192.168.1.100", "ip_version": "IPv4"}
- 示例2
原始日志:
Text
1{"ip": "::1"}
加工规则:
Text
1e_set("ip_version",ip_version(v("ip")))
加工结果:
Text
1{"ip": "::1", "ip_version": "IPv6"}
ip2long 函数
函数定义
使用ip2long函数将字符串格式的IP地址转换成长整型数据。
语法描述
Text
1ip2long(ip, default=0)
参数说明
| 参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
|---|---|---|---|---|---|
| ip | 输入IP地址 | Any | 是 | - | - |
| default | 某个不合法的IP地址被转换成的值。支持自定义,默认为0 | Integer | 否 | 0 | - |
示例
- 示例1
原始日志:
Text
1{"ip": "192.168.0.100"}
加工规则:
Text
1e_set("ip2long",ip2long(v("ip")))
加工结果:
Text
1{"ip": "192.168.0.100", "ip2long": 3232235620}
long2ip 函数
函数定义
使用long2ip函数将长整型数据转换成字符串格式的IP地址。
语法描述
Text
1long2ip(value,default="")
参数说明
| 参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
|---|---|---|---|---|---|
| ip | 填入需要被转换的值 | Any | 是 | - | - |
| default | 表示将不合法的长整型数据转成空字符串,支持自定义 | Integer | 否 | "" | - |
示例
- 示例1
原始日志:
Text
1{"value": 3232235620}
加工规则:
Text
1e_set("ip",long2ip(v("value")))
加工结果:
Text
1{"ip": "192.168.0.100", "value": 3232235620}
geo_parse 函数
函数定义
使用 geo_parse 函数根据 IPv4 地址解析国家、运营商、省份、城市、区县等地理信息。
语法描述
Text
1geo_parse(ip, ip_db="BLS-GeoIP", keep_fields=None, ip_sep=None)
参数说明
| 参数名称 | 参数描述 | 参数类型 | 是否必须 | 参数默认值 | 参数取值范围 |
|---|---|---|---|---|---|
| ip | 待解析的 IPv4 地址所在日志字段 | String | 是 | - | 合法的 IPv4 地址 |
| ip_db | 用于解析 IP 地址的地址库 | String | 否 | "BLS-GeoIP" |
当前仅支持 内置地址库"BLS-GeoIP" |
| keep_fields | 指定需要保留的返回字段,未指定时返回全部字段。也支持对返回字段重命名 | Tuple | 否 | None |
country、isp、province、city、county |
| ip_sep | 多个 IP 地址之间的分隔符。未配置时按单个 IP 地址解析 | String | 否 | None |
任意非空字符串 |
示例
- 示例1:解析单个 IP 地址
原始日志:
Text
1{"ip": "1.0.2.1"}
加工规则:
Text
1e_set("geo", geo_parse(v("ip")))
加工结果:
JSON
1{
2 "ip": "1.0.2.1",
3 "geo": {
4 "country": "CN",
5 "isp": "CHINANET",
6 "province": "福建",
7 "city": "福州",
8 "county": ""
9 }
10}
- 示例2:指定返回字段
原始日志:
Text
1{"ip": "1.0.2.1"}
加工规则:
Text
1e_set("geo", geo_parse(v("ip"), keep_fields=["city", "country"]))
加工结果:
JSON
1{
2 "ip": "1.0.2.1",
3 "geo": {
4 "city": "福州",
5 "country": "CN"
6 }
7}
- 示例3:对返回字段重命名
keep_fields中的二元列表格式为:
Text
1["原字段名", "目标字段名"]
原始日志:
Text
1{"ip": "1.0.2.1"}
加工规则:
Text
1e_set("geo", geo_parse(v("ip"), keep_fields=[["city", "cty"], ["country", "state"]]))
加工结果:
JSON
1{
2 "ip": "1.0.2.1",
3 "geo": {
4 "cty": "福州",
5 "state": "CN"
6 }
7}
- 示例4:解析多个IP地址
原始日志:
Text
1{"ip": "1.0.2.1,1.0.2.2"}
加工规则:
Text
1e_set("geo", geo_parse(v("ip"), ip_sep=","))
加工结果:
JSON
1{
2 "ip": "1.0.2.1,1.0.2.2",
3 "geo": {
4 "1.0.2.1": {
5 "country": "CN",
6 "isp": "CHINANET",
7 "province": "福建",
8 "city": "福州",
9 "county": ""
10 },
11 "1.0.2.2": {
12 "country": "CN",
13 "isp": "CMNET",
14 "province": "浙江",
15 "city": "杭州",
16 "county": ""
17 }
18 }
19}
- 示例5:IP 字段不存在或为空时不生成解析结果
部分日志可能不存在 ip 字段。直接调用 geo_parse 时会返回空对象,并写入 "geo": {}。如果不希望生成空的 geo 字段,可以使用 e_if 判断:
加工规则:
Text
1e_if(v("ip") is not null and v("ip") != "", e_set("geo", geo_parse(v("ip"))))
评价此篇文章
