【问题标题】:Search for an IP with port pattern使用端口模式搜索 IP
【发布时间】:2015-02-15 13:43:09
【问题描述】:

我们的解析器现在遇到了一些问题。我们按原样保存所有日志,无需解析。 我需要搜索我们所有的日常日志,并找出我们获得带有端口的 IP 地址的次数。 例如:123.123.123.231:45771

问题是一个请求到另一个请求的位数不同(在IP地址和端口号中)。

我应该如何编写查询以便能够以这种方式对其进行过滤?

【问题讨论】:

    标签: regex google-bigquery


    【解决方案1】:

    我会使用正则表达式 (RegEx) 来查找 IP 地址。看看这些例子:

    我自己没有使用过 Google Bigquery,我建议您查看这个问题 BigQuery REGEXP_MATCH and accents : boundary wildcard fails? 以获得更多帮助。

    【讨论】:

      【解决方案2】:

      检查一下...我包括了 IP 本身的有效性检查

      SELECT Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)') as IP,
      Regexp_extract(TXT,r'\d+\.\d+\.\d+\.\d+\:(\d+)') as Port,
      Regexp_Match(TXT,r'(\d+\.\d+\.\d+\.\d+\:\d+)') as IP_ContainsPort,
      Parse_IP(Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)')) as IsValidIP,
      if(Parse_IP(Regexp_extract(TXT,r'(\d+\.\d+\.\d+\.\d+)')) is null,string(null), Regexp_extract(TXT,r'\d+\.\d+\.\d+\.\d+\:(\d+)')) as PortOfValidIP
      FROM 
      
      (Select "123.123.123.231:45771" as TXT),
      (Select "1.1.1.1" as TXT),
      (Select "23.0.0.1:45" as TXT),
      (Select "456.456.456.456:45771" as TXT),
      

      【讨论】:

        【解决方案3】:

        你可以使用这个模式

        ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(:[0-9]{1,4})?$
        

        【讨论】:

          猜你喜欢
          • 2014-10-08
          • 1970-01-01
          • 2011-11-12
          • 1970-01-01
          • 2021-12-11
          • 1970-01-01
          • 2013-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多