Todos os produtos
Search
Central de documentação

Simple Log Service:Funções de análise de endereços IP

Última atualização: Jul 03, 2026

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

geo_parse

Analisa um endereço IP para obter país, província e cidade.

ip_cidrmatch

Verifica se um endereço IP pertence a um bloco Classless Inter-Domain Routing (CIDR).

ip_version

Identifica se um endereço IP é IPv4 ou IPv6.

ip_type

Determina se um endereço IP é privado ou público.

ip_makenet

Converte um endereço IP em um bloco CIDR.

ip_to_format

Formata um bloco CIDR com comprimento de prefixo ou máscara de sub-rede.

ip_overlaps

Verifica se dois blocos CIDR se sobrepõem.

ip2long

Converte um endereço IP de string para inteiro longo.

long2ip

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 campos city e country.

    Também é possível usar keep_fields para renomear chaves. Por exemplo, (("city","cty"),("country","state")) renomeia os campos de saída para cty e state.

    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                               

      SDK Python do IP2Location.

    • 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.

    Nota

    Se 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