从日志文件中提取源 IP

Posted

技术标签:

【中文标题】从日志文件中提取源 IP【英文标题】:Extract Source IP from log files 【发布时间】:2019-06-23 14:21:24 【问题描述】:

我想从 bash 的日志文件中提取“srcip=x.x.x.x”。我的日志文件是这样的:

2019:06:23-17:50:03 myhost ulogd[5692]: id="2021" severity="info" sys="SecureNet" sub="packetfilter" name="Packet dropped (GEOIP)" action="drop" fwrule="60019" initf="eth0" srcmac="3c:1e:04:92:6f:fb" dstmac="00:50:56:97:7c:af" srcip="185.53.91.50" dstip="192.168.50.10" proto="6" length="44" tos="0x00" prec="0x00" ttl="235" srcport="54522" dstport="5038" tcpflags="SYN" 

我写了awk 'print $15' 来提取srcip,但问题是srcip 在每一行中的位置不一样。我如何在没有那个位置的情况下提取srcip=x.x.x.x

【问题讨论】:

grep -o 'script="[0-9.]*"' @Aaron:稍作改动,它就可以工作:grep -o 'srcip="[0-9.]*"' @Cyrus 是的,错字 【参考方案1】:

在每个 UNIX 机器上的任何 shell 中使用任何 sed:

$ sed -n 's/.*\(srcip="[^"]*"\).*/\1/p' file
srcip="185.53.91.50"

【讨论】:

windows PowerShell 可以做到这一点吗? 我不知道,问一个新问题并用它标记它。【参考方案2】:

以下命令提供您期望的结果

grep -o -P 'srcip="(\d1,3[.])3\d1,3"' log

o 选项是只打印匹配的部分。选项P 是使用与perl 兼容的正则表达式。正则表达式匹配 srcip=<ipv4> 并且 log 是您要从中提取内容的文件的名称。

这里是 regex101 的链接,用于解释正则表达式:https://regex101.com/r/hjuZlM/2

【讨论】:

【参考方案3】:

awk 版本

awk -F"srcip=" 'split($2,a," ");print FS a[1]' file
srcip="185.53.91.50"

使用关键字拆分行,拆分后得到下一个字段。

【讨论】:

以上是关于从日志文件中提取源 IP的主要内容,如果未能解决你的问题,请参考以下文章

从日志文件中提取特定单词

从Apache访问日志中提取IP地址

无法从日志文件中提取准确的键值对

从 Window 日志的 .evtx 文件中提取审计事件信息

使用 awk getline bash 在指定的时间范围内从日志文件中提取数据

用于从文本日志文件中提取/检索值的 Shell 脚本(sqlcode 字段值)