从日志文件中提取源 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的主要内容,如果未能解决你的问题,请参考以下文章
从 Window 日志的 .evtx 文件中提取审计事件信息