【问题标题】:Extract second IP address in expression提取表达式中的第二个 IP 地址
【发布时间】:2019-12-20 13:37:26
【问题描述】:

我想使用正则表达式从以下表达式中提取第二个 IP 地址(DST 的值):

kernel: DROP IN=eth0 
OUT= MAC=80:8d:8b:83:85:d0:f2:fc:bc:88:3e:f3:08:00 
SRC=111.111.111.111 
DST=222.222.222.222 
LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=10520 DF PROTO=TCP 
SPT=43219 DPT=10051 SEQ=4284041495 ACK=0 WINDOW=14600 
RES=0x00 SYN URGP=0 OPT (020405B40402080A7F8A63E80000000001030306)

我使用以下正则表达式提取SRC

^.+?((?:\d+\.){3}\d+).+$

我无法弄清楚提取第二个 IP (DST) 所需的表达式

【问题讨论】:

  • 修正语法,格式化代码sn-ps

标签: regex ip


【解决方案1】:

像这样重复两次你已经得到的东西会起作用

^.+?((?:\d+.){3}\d+).*?((?:\d+.){3}\d+).+$

但是可以捕获所有 IP 地址的更好的正则表达式是

((?:\d{1,3}\.){3}\d{1,3})

您似乎尝试匹配 IP 地址中的句点,但您忘记转义它们。

没有必要,但可以使用{1,3} 代替+ 来限制匹配数字的次数。

【讨论】:

  • 我遇到的问题是我使用的是 graylog,它只捕获第一个匹配结果,所以我需要一个只匹配 DST 之后 IP 的表达式,即 222.222.222.222
  • DST=((?:\d{1,3}\.){3}\d{1,3})前面加DST=
  • 你是救世主,我在搞砸这个 (DST=)(\d{1,3}\.\d{1,3}\.\d{1,3}\. \d{1,3}) 并且它在我的输出中添加了夏令时。谢谢。
猜你喜欢
  • 2016-08-28
  • 1970-01-01
  • 2015-08-19
  • 2011-06-20
  • 2015-12-17
  • 2015-09-19
相关资源
最近更新 更多