使用端口模式搜索 IP
Search for an IP with port pattern
我们的解析器现在有一些问题。我们按原样保存所有日志,不进行解析。
我需要搜索我们所有的日常日志,并找出我们获得带端口的 IP 地址的次数。
例如:123.123.123.231:45771
问题是一个请求的位数不同(在IP地址和端口号中)。
我应该如何编写查询以便能够以这种方式进行过滤?
我会使用正则表达式 (RegEx) 来查找 IP 地址。看看这些例子:
- http://www.regular-expressions.info/examples.html
- https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
我自己没有使用过 Google Bigquery,我建议您看看这个问题 BigQuery REGEXP_MATCH and accents : boundary wildcard fails? 以获得更多帮助。
检查一下...我包括了 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),
你可以使用这个模式
^(([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})?$
我们的解析器现在有一些问题。我们按原样保存所有日志,不进行解析。
我需要搜索我们所有的日常日志,并找出我们获得带端口的 IP 地址的次数。
例如:123.123.123.231:45771
问题是一个请求的位数不同(在IP地址和端口号中)。
我应该如何编写查询以便能够以这种方式进行过滤?
我会使用正则表达式 (RegEx) 来查找 IP 地址。看看这些例子:
- http://www.regular-expressions.info/examples.html
- https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
我自己没有使用过 Google Bigquery,我建议您看看这个问题 BigQuery REGEXP_MATCH and accents : boundary wildcard fails? 以获得更多帮助。
检查一下...我包括了 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),
你可以使用这个模式
^(([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})?$