使用端口模式搜索 IP

Search for an IP with port pattern

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

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

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

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

我自己没有使用过 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})?$