使用端口模式搜索 IP
Posted
技术标签:
【中文标题】使用端口模式搜索 IP【英文标题】:Search for an IP with port pattern 【发布时间】:2015-02-15 13:43:09 【问题描述】:我们的解析器现在遇到了一些问题。我们按原样保存所有日志,无需解析。
我需要搜索我们所有的日常日志,并找出我们获得带有端口的 IP 地址的次数。
例如:123.123.123.231:45771
问题是一个请求到另一个请求的位数不同(在IP地址和端口号中)。
我应该如何编写查询以便能够以这种方式对其进行过滤?
【问题讨论】:
【参考方案1】:我会使用正则表达式 (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? 以获得更多帮助。
【讨论】:
【参考方案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)?$
【讨论】:
以上是关于使用端口模式搜索 IP的主要内容,如果未能解决你的问题,请参考以下文章