使用端口模式搜索 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的主要内容,如果未能解决你的问题,请参考以下文章

使用WireShark搜索想要的包(简约版)

如何让虚拟机使用外网IP?

Docker容器——Docker静态化IP

FTP服务器 在公网用pasv模式访问 提示返回的地址是内网的IP和端口

Docker网络模式

docker-网络模式