As funções de análise de endereços IP resolvem endereços IP para localizações geográficas, classificam tipos de endereço, convertem entre formatos e verificam a pertinência a blocos CIDR.
Funções
|
Função |
Descrição |
|
Analisa um endereço IP para obter país, província e cidade. |
|
|
Verifica se um endereço IP pertence a um bloco Classless Inter-Domain Routing (CIDR). |
|
|
Identifica se um endereço IP é IPv4 ou IPv6. |
|
|
Determina se um endereço IP é privado ou público. |
|
|
Converte um endereço IP em um bloco CIDR. |
|
|
Formata um bloco CIDR com comprimento de prefixo ou máscara de sub-rede. |
|
|
Verifica se dois blocos CIDR se sobrepõem. |
|
|
Converte um endereço IP de string para inteiro longo. |
|
|
Converte um inteiro longo em uma string de endereço IP. |
geo_parse
Analisa um endereço IP para recuperar país, província e cidade.
-
Sintaxe
geo_parse(ip, ip_db="SLS-GeoIP", keep_fields=None, provider="ipip", ip_sep=None) -
Parâmetros
Parâmetro
Tipo do parâmetro
Obrigatório
Descrição
ip
String
Sim
Endereço IP a ser analisado. Para analisar vários endereços IP em uma única string, use o parâmetro ip_sep para especificar um separador.
ip_db
String
Sim
Biblioteca de endereços IP usada para análise. Valores válidos:
-
SLS-GeoIP: Banco de dados de IP integrado do SLS. Padrão. Atualizado diariamente. Nenhuma configuração adicional necessária.
-
Banco de dados de IP personalizado: Use
res_oss_file(endpoint, ak_id, ak_key, bucket, file, format='text', change_detect_interval=0,fetch_interval=2,refresh_retry_max=60,encoding='utf8',error='ignore'). Para detalhes dos parâmetros, consulte res_oss_file.
keep_fields
Tuple
Não
Chaves a incluir no resultado retornado.
-
Ao usar o banco de dados de IP integrado do SLS, as seguintes informações são retornadas por padrão:
-
city: Nome da cidade.
-
province: Nome da província.
-
country: Nome do país.
-
city_en: Código da região administrativa ou nome em inglês da cidade.
-
province_en: Código da região administrativa ou nome em inglês da província.
-
country_en: Código ou nome em inglês do país ou região.
-
isp: Nome do Provedor de Serviços de Internet (ISP).
-
lat: Latitude da localização do endereço IP.
-
lon: Longitude da localização do endereço IP.
-
-
Ao usar um banco de dados de IP personalizado, as seguintes informações são retornadas por padrão:
-
city: Nome da cidade.
-
province: Nome da província.
-
country: Nome do país.
-
Por exemplo,
keep_fields=("city","country")retorna apenas os camposcityecountry.Também é possível usar
keep_fieldspara renomear chaves. Por exemplo,(("city","cty"),("country","state"))renomeia os campos de saída paractyestate.provider
String
Não
Este parâmetro é válido apenas quando ip_db está definido como um banco de dados de IP personalizado. Valores válidos:
-
ipip: Valor padrão. Usa o banco de dados binário de endereços IP no formato IPDB fornecido pela IPIP. Para baixar o banco de dados, visite ipip.
-
ip2location: Usa o banco de dados binário global de endereços IP da IP2Location. Para baixar o banco de dados, visite ip2location. Apenas pacotes binários são suportados.
ip_sep
String
Não
Separador para múltiplos endereços IP em uma única string. Os resultados são retornados no formato JSON. Padrão: None (sem divisão).
-
-
Resposta
Retorna um dicionário:
{ "city": "...", "province":"...", "country": "..." } -
Exemplos
-
Exemplo 1: Consultar dados usando o banco de dados de IP integrado do SLS.
-
Log bruto
ip : 203.0.113.1 -
Regra de transformação
e_set("geo", geo_parse(v("ip"))) -
Resultado
ip : 203.0.113.1 geo: {"city":"Hangzhou","province":"Zhejiang","country":"China","isp":"China Mobile","lat":30.16,"lon":120.12}
-
-
Exemplo 2: Analisar múltiplos endereços IP de um único campo usando o banco de dados de IP integrado do SLS.
-
Log bruto
ip : 203.0.113.4, 192.0.2.2, 198.51.100.2 -
Regra de transformação
e_set("geo", geo_parse(v("ip"), ip_sep=",")) -
Resultado
ip : 203.0.113.4, 192.0.2.2, 198.51.100.2 geo : {"203.0.113.4": {"country_en": "CN", "province_en": "330000", "city_en": "330200", "country": "China", "province": "Zhejiang", "city": "Ningbo", "isp": "China Telecom", "lat": 29.8782, "lon": 121.549}, "192.0.2.2": {"country_en": "CN", "province_en": "320000", "city_en": "321300", "country": "China", "province": "Jiangsu", "city": "Suqian", "isp": "China Telecom", "lat": 33.9492, "lon": 118.296}, "198.51.100.2": {"country_en": "CN", "province_en": "330000", "city_en": "330500", "country": "China", "province": "Zhejiang", "city": "Huzhou", "isp": "China Telecom", "lat": 30.8703, "lon": 120.093}}
-
-
Exemplo 3: Consultar dados usando um banco de dados de IP personalizado.
-
Log bruto
ip : 203.0.113.1 -
Regra de transformação
e_set("geo",geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id='your ak_id', ak_key='your ak_key', bucket='your bucket', file='ipipfree.ipdb', format='binary',change_detect_interval=20))) -
Resultado
ip : 203.0.113.1 geo : {"city": "Hangzhou", "province":"Zhejiang","country": "China"}
-
-
Exemplo 4: Consultar com um banco de dados de IP personalizado e renomear os campos de saída.
-
Log bruto
ip : 203.0.113.1 -
Regra de transformação
e_set("geo",geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id='your ak_id', ak_key='your ak_key', bucket='your bucket', file='ipipfree.ipdb', format='binary',change_detect_interval=20),keep_fields=(("city","cty"),("country","state"),("province","pro")))) -
Resultado
ip : 203.0.113.1 geo : { "state": "China","pro": "Zhejiang","cty": "Hangzhou"}
-
-
Exemplo 5: Consultar com um banco de dados de IP personalizado e selecionar campos de saída.
-
Log bruto
ip : 203.0.113.1 -
Regra de transformação
e_set("geo",geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id='your ak_id', ak_key='your ak_key', bucket='your bucket', file='ipipfree.ipdb', format='binary',change_detect_interval=20),keep_fields=("country","province"))) -
Resultado
ip : 203.0.113.1 geo : { "country": "China","province": "Zhejiang"}
-
-
Exemplo 6: Consultar com um banco de dados de IP personalizado usando o provedor IP2Location.
-
Log bruto
ip : 203.0.113.2 -
Regra de transformação
e_set("geo", geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com',ak_id="your ak_id", ak_key="your ak_secret", bucket='log-etl-staging', file='your ip2location bin file', format='binary', change_detect_interval=20),provider="ip2location")) -
Resultado
ip : 203.0.113.2 geo : {"city":"Dearborn","province":"Michigan","country":"United States"}
A transformação de dados utiliza o SDK open source IP2Location para Python, que suporta os campos listados abaixo. Se um campo não puder ser analisado, verifique se o seu banco de dados IP2Location o inclui.
country_short country_long / Data transformation uses the country field instead. region / Data transformation uses the province field instead. city isp latitude longitude domain zipcode timezone netspeed idd_code area_code weather_code weather_name mcc mnc mobile_brand elevation usage_type -
-
Exemplo 7: Analisar múltiplos endereços IP usando um banco de dados de IP personalizado.
-
Log bruto
ip : 203.0.113.3, 192.0.2.1, 198.51.100.1 -
Regra de transformação
e_set("geo", geo_parse(v("ip"), ip_db=res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com', ak_id="ak_id", ak_key="ak_secret", bucket='log-etl-staging', file='calendar.csv/IP2LOCATION-LITE-DB3.BIN', format='binary', change_detect_interval=20), provider="ip2location", ip_sep=",")) -
Resultado
ip : 203.0.113.3, 192.0.2.1, 198.51.100.1 geo : {"203.0.113.3": {"city": "Dearborn", "province": "Michigan", "country": "United States"}, "192.0.2.1": {"city": "Hangzhou", "province": "Zhejiang", "country": "China"}, "198.51.100.1": {"city": "Hangzhou", "province": "Zhejiang", "country": "China"}}
-
-
ip_cidrmatch
Verifica se um endereço IP pertence a um bloco CIDR. Retorna True se houver correspondência; caso contrário, False. Suporta IPv4 e IPv6.
-
Sintaxe
ip_cidrmatch(cidr_subnet, ip,default="") -
Parâmetros
Nome do parâmetro
Tipo do parâmetro
Obrigatório
Descrição
cidr_subnet
String
Sim
Bloco CIDR. Exemplo: 192.168.1.0/24.
ip
String
Sim
Endereço IP a ser verificado.
default
String
Não
Valor de fallback caso o endereço IP não possa ser correspondido. Pode estar vazio.
-
Resposta
Retorna True se o endereço IP corresponder ao bloco CIDR. Caso contrário, retorna False.
-
Exemplos
-
Exemplo 1: Um endereço IPv4 corresponde ao bloco CIDR e a função retorna True.
-
Log bruto
cidr_subnet: 192.168.1.0/24 ip: 192.168.1.100 -
Regra de transformação
e_set("is_belong",ip_cidrmatch(v("cidr_subnet"),v("ip"))) -
Resultado
cidr_subnet: 192.168.1.0/24 ip: 192.168.1.100 is_belong: true
-
-
Exemplo 2: Um endereço IPv4 não corresponde ao bloco CIDR e a função retorna False.
-
Log bruto
cidr_subnet: 192.168.1.0/24 ip: 10.10.1.100 -
Regra de transformação
e_set("is_belong",ip_cidrmatch(v("cidr_subnet"),v("ip"))) -
Resultado
cidr_subnet: 192.168.1.0/24 ip: 10.10.1.100 is_belong: false
-
-
Exemplo 3: O endereço IP não pode ser correspondido ao bloco CIDR e a função retorna unknown.
-
Log bruto
cidr_subnet: 192.168.1.0/24 ip: a -
Regra de transformação
e_set("is_belong",ip_cidrmatch(v("cidr_subnet"),v("ip"),default="unknown")) -
Resultado
cidr_subnet: 192.168.1.0/24 ip: a is_belong: unknown
-
-
ip_version
Retorna a versão de um endereço IP: IPv4 ou IPv6.
-
Sintaxe
ip_version(ip,default="") -
Parâmetros
Parâmetro
Tipo do parâmetro
Obrigatório
Descrição
ip
String
Sim
Endereço IP.
default
String
Não
Valor de fallback caso a versão não possa ser determinada. Pode estar vazio.
-
Resposta
Retorna IPv4 ou IPv6.
-
Exemplos
-
Exemplo 1: Verificar a versão de um endereço IPv4.
-
Log bruto
ip: 192.168.1.100 -
Regra de transformação
e_set("version",ip_version(v("ip"))) -
Resultado
ip: 192.168.1.100 version: IPv4
-
-
Exemplo 2: Verificar a versão de um endereço IPv6.
-
Log bruto
ip: ::1 -
Regra de transformação
e_set("version",ip_version(v("ip"))) -
Resultado
ip: ::1 version: IPv6
-
-
ip_type
Retorna o tipo de um endereço IP: private, reserved, loopback, public ou allocated ripe ncc.
-
Sintaxe
ip_type(ip,default="") -
Parâmetros
Parâmetro
Tipo
Obrigatório
Descrição
ip
String
Sim
Endereço IP.
default
String
Não
Valor de fallback caso o tipo não possa ser determinado. Pode estar vazio.
-
Resposta
Retorna o tipo de endereço IP. Os valores válidos são private, reserved, loopback, public e allocated ripe ncc.
-
Exemplos
-
Exemplo 1: Verificar um endereço de loopback.
-
Log bruto
ip: 127.0.0.1 -
Regra de transformação
e_set("type",ip_type(v("ip"))) -
Resultado
ip: 127.0.0.1 type: loopback
-
-
Exemplo 2: Verificar se um endereço IP é privado.
-
Log bruto
ip: 47.100.XX.XX -
Regra de transformação
e_set("type",ip_type(v("ip"))) -
Resultado
ip: 47.100.XX.XX type: private
-
-
Exemplo 3: Verificar um endereço público.
-
Log bruto
ip: 47.100.XX.XX -
Regra de transformação
e_set("type",ip_type(v("ip"))) -
Resultado
ip: 47.100.XX.XX type: public
-
-
Exemplo 4: Verificar o tipo de um endereço IPv6 que é um endereço de loopback.
-
Log bruto
ip: ::1 -
Regra de transformação
e_set("type",ip_type(v("ip"))) -
Resultado
ip: ::1 type: loopback
-
-
Exemplo 5: Verificar o tipo de um endereço IPv6 que é um endereço allocated ripe ncc.
-
Log bruto
ip: 2001:0658:022a:cafe:0200::1 -
Regra de transformação
e_set("type",ip_type(v("ip"))) -
Resultado
ip: 2001:0658:022a:cafe:0200::1 type: allocated ripe ncc
-
-
ip_makenet
Converte um endereço IP em um bloco CIDR.
-
Sintaxe
ip_makenet(ip, subnet_mask=None,default="") -
Parâmetros
Nome do parâmetro
Tipo do parâmetro
Obrigatório
Descrição
ip
String
Sim
Endereço IP.
subnet_mask
String
Sim
Máscara de sub-rede. Exemplo: 255.255.255.0.
NotaSe você especificar um intervalo de endereços IP para o parâmetro ip, poderá deixar o parâmetro subnet_mask vazio.
default
String
Não
Valor de fallback caso a conversão falhe. Pode estar vazio.
-
Resposta
Retorna um bloco CIDR.
-
Exemplos
-
Exemplo 1: Converter um endereço IP em um bloco CIDR.
-
Log bruto
ip: 192.168.1.0 -
Regra de transformação
e_set("makenet",ip_makenet(v("ip"),"255.255.255.0")) -
Resultado
ip: 192.168.1.0 makenet: 192.168.1.0/24
-
-
Exemplo 2: Converter um intervalo de endereços IP em um bloco CIDR.
-
Log bruto
ip: 192.168.1.0-192.168.1.255 -
Regra de transformação
e_set("makenet",ip_makenet(v("ip"))) -
Resultado
ip: 192.168.1.0-192.168.1.255 makenet: 192.168.1.0/24
-
-
Exemplo 3: Converter um intervalo de endereços IP em um bloco CIDR.
-
Log bruto
ip: 192.168.1.0/255.255.255.0 -
Regra de transformação
e_set("makenet",ip_makenet(v("ip"))) -
Resultado
ip: 192.168.1.0/255.255.255.0 makenet: 192.168.1.0/24
-
-
ip_to_format
Converte um bloco CIDR para um formato especificado, como comprimento de prefixo, máscara de sub-rede ou intervalo de endereços IP.
-
Sintaxe
ip_to_format(cidr_subnet, want_prefix_len=0,default="") -
Parâmetros
Nome do parâmetro
Tipo
Obrigatório
Descrição
cidr_subnet
String
Sim
Bloco CIDR. Exemplo: 192.168.1.0/24
want_prefix_len
Int
Não
Formato de saída. Padrão: 0.
-
0: Sem formatação.
-
1: Formato de prefixo.
-
2: Formato de máscara de rede.
-
3: Intervalo de endereços IP.
default
String
Não
Valor de fallback caso a formatação falhe. Pode estar vazio.
-
-
Resposta
Retorna um endereço IP no formato especificado.
-
Exemplos
-
Exemplo 1: Retornar o bloco CIDR de entrada sem alterar o formato.
-
Log bruto
ip: 192.168.1.0/24 -
Regra de transformação
e_set("strNormal",ip_to_format(v("ip"),0)) -
Resultado
ip: 192.168.1.0/24 strNormal: 192.168.1.0/24
-
-
Exemplo 2: Formatar um bloco CIDR para usar um prefixo.
-
Log bruto
ip: 192.168.1.0/24 -
Regra de transformação
e_set("strNormal",ip_to_format(v("ip"),1)) -
Resultado
ip: 192.168.1.0/24 strNormal: 192.168.1.0/24
-
-
Exemplo 3: Formatar um bloco CIDR para usar uma máscara de sub-rede.
-
Log bruto
ip: 192.168.1.0/24 -
Regra de transformação
e_set("strNormal",ip_to_format(v("ip"),2)) -
Resultado
ip: 192.168.1.0/24 strNormal: 192.168.1.0/255.255.255.0
-
-
Exemplo 4: Formatar um bloco CIDR como um intervalo de endereços IP.
-
Log bruto
ip: 192.168.1.0/24 -
Regra de transformação
e_set("strNormal",ip_to_format(v("ip"),3)) -
Resultado
ip: 192.168.1.0/24 strNormal: 192.168.1.0-192.168.1.255
-
-
ip_overlaps
Determina se dois blocos CIDR se sobrepõem.
-
Sintaxe
ip_overlaps(cidr_subnet, cidr_subnet2,default="") -
Parâmetros
Nome do parâmetro
Tipo do parâmetro
Obrigatório
Descrição
cidr_subnet
String
Sim
Primeiro bloco CIDR.
cidr_subnet2
String
Sim
Segundo bloco CIDR.
default
String
Não
Valor de fallback caso a sobreposição não possa ser determinada. Pode estar vazio.
-
Resposta
Retorna 0 se os dois blocos CIDR não se sobrepuserem.
Retorna 1 se os dois blocos CIDR se sobrepuserem no final.
Retorna -1 se os dois blocos CIDR se sobrepuserem no início.
-
Exemplos
-
Exemplo 1: Os dois blocos CIDR não se sobrepõem.
-
Log bruto
cidr1: 192.168.0.0/23 cidr2: 192.168.2.0/24 -
Regra de transformação
e_set("overlaps",ip_overlaps(v("cidr1"),v("cidr2"))) -
Resultado
cidr1: 192.168.0.0/23 cidr2: 192.168.2.0/24 overlaps: 0
-
-
Exemplo 2: Os dois blocos CIDR se sobrepõem no início.
-
Log bruto
cidr1: 192.168.1.0/24 cidr2: 192.168.0.0/23 -
Regra de transformação
e_set("overlaps",ip_overlaps(v("cidr1"),v("cidr2"))) -
Resultado
cidr1: 192.168.1.0/24 cidr2: 192.168.0.0/23 overlaps: -1
-
-
Exemplo 3: Os dois blocos CIDR se sobrepõem no final.
-
Log bruto
cidr1: 192.168.0.0/23 cidr2: 192.168.1.0/24 -
Regra de transformação
e_set("overlaps",ip_overlaps(v("cidr1"),v("cidr2"))) -
Resultado
cidr1: 192.168.0.0/23 cidr2: 192.168.1.0/24 overlaps: 1
-
-
ip2long
Converte um endereço IP de string para um inteiro longo.
-
Sintaxe
ip2long(value,default=0) -
Parâmetros
Nome do parâmetro
Tipo do parâmetro
Obrigatório
Descrição
value
String
Sim
Valor a ser convertido.
default
String
Não
Valor de fallback para um endereço IP inválido. Exemplo: 0.
-
Resposta
Retorna a representação em inteiro longo de um endereço IP válido.
-
Exemplos
-
Exemplo 1: Caso padrão
-
Log bruto
ip: 192.168.0.100 -
Regra de transformação
e_set("long_ip",ip2long(v("ip"))) -
Resultado
ip: 192.168.0.100 long_ip: 167772160
-
-
Exemplo 2: Endereço IP inválido
-
Log bruto
ip: 47.100.XX.XX -
Regra de transformação
e_set("long_ip",ip2long(v("ip"), "ignore")) -
Resultado
ip:47.100.XX.XX long_ip:ignore
-
-
long2ip
Converte um inteiro longo em um endereço IP no formato de string.
-
Sintaxe
long2ip(value,default="") -
Parâmetros
Nome do parâmetro
Tipo do parâmetro
Obrigatório
Descrição
value
String
Sim
Valor a ser convertido.
default
String
Não
Valor de fallback para um inteiro longo inválido. Padrão: string vazia.
-
Resposta
Retorna o endereço IP no formato de string convertido a partir de um inteiro longo válido.
-
Exemplos
-
Exemplo 1: Caso padrão
-
Log bruto
long: 167772160 -
Regra de transformação
e_set("ip",long2ip(v("long"))) -
Resultado
long: 167772160 ip: 192.168.0.100
-
-
Exemplo 2: Falha na conversão de inteiro longo para endereço IP
-
Log bruto
long: 4294967296 -
Regra de transformação
e_set("ip",long2ip(v("long"))) -
Resultado
long: 4294967296 ip:
-
-
Exemplo 3: Tratamento de erro personalizado para uma conversão com falha
-
Log bruto
long: 4294967296 -
Regra de transformação
e_set("ip",long2ip(v("long"),default="xxx")) -
Resultado
long: 4294967296 ip: xxx
-
-