【发布时间】:2018-09-10 14:21:51
【问题描述】:
我想从一些防火墙日志中获取所有源 IP。
首先,在导入具有不同行大小的日志时,您推荐哪种导入方法?
样本原始数据:
Sep 7 13:10:01 XXX.XXX.XXX.XXX id=firewall time="2018-09-07 13:10:01" fw="XXXXX-ISSP" tz=+0200 startime="2018-09-07 13:10:00" pri=5 confid=01 slotlevel=2 ruleid=102 srcif="vlan3" srcifname="XXXXX" ipproto=tcp dstif="vlan6" dstifname="XXXXX" proto=tcp5666 src=XXX.XXX.XXX.XXX srcport=55617 srcportname=ephemeral_fw_tcp srcname=XXXXX.service.noissp.XXXXX.corp srcmac=YY:YY:YY:YY:YY:YY dst=10.95.160.7 dstport=5666 dstportname=tcp5666 dstname=XXXXX.biz.noissp.XXXXX.corp modsrc=XXX.XXX.XXX.XXX modsrcport=55617 origdst=XXX.XXX.XXX.XXX origdstport=5666 ipv=4 sent=1412 rcvd=1596 duration=0.18 action=pass logtype="connection"
Sep 7 13:10:01 XXX.XXX.XXX.XXX id=firewall time="2018-09-07 13:10:01" fw="XXXXX-ISSP" tz=+0200 startime="2018-09-07 13:10:00" pri=5 confid=01 slotlevel=2 ruleid=810 srcif="vlan3" srcifname="XXXXX" ipproto=udp dstif="Ethernet18" dstifname="FTLAN-XXX" proto=syslog src=XXX.XXX.XXX.XXX srcport=36147 srcportname=ephemeral_fw_udp srcname=XXXXX.service.noissp.XXXXX.corp srcmac=YY:YY:YY:YY:YY:YY dst=XXX.CXX.CXX.XXX dstport=514 dstportname=syslog dstname=XXXXX ipv=4 action=block logtype="filter"
Sep 7 13:10:01 XXX.XXX.XXX.XXX id=firewall time="2018-09-07 13:10:01" fw="XXXXX-ISSP" tz=+0200 startime="2018-09-07 12:10:00" pri=5 confid=01 slotlevel=2 ruleid=273 srcif="vlan6" srcifname="XXXXX" ipproto=udp dstif="vlan6" dstifname="XXXXX" proto=dns_udp src=XXX.XXX.XXX.XXX srcport=60737 srcportname=XXX-dyn_tcp srcmac=YY:YY:YY:YY:YY:YY dst=XXX.XXX.XXX.XXX dstport=53 dstportname=dns_udp dstname=XXXXX-biznoIssp.biz.noissp modsrc=XXX.XXX.XXX.XXX modsrcport=60737 origdst=XXX.XXX.XXX.XXX origdstport=53 ipv=4 sent=54 rcvd=114 duration=0.00 action=pass logtype="connection"
我已尝试使用 read_line 来避免不同大小的行出现错误:
导入日志文件
rawdata <- read_lines(file="./input.txt")
去掉每一行的双引号
a <- gsub("\"" , "", rawdata)
将行拆分成多个字符串
b <- str_split(a, " ")
但此时b只是一个向量:
> dim(b)
NULL
> length(b)
[1] 10
str_subset(b, "src=") 返回整行而不是单列。
我做错了什么...
我如何提取这些信息?
【问题讨论】:
-
您应该显示几行输入文件,以及您尝试过的一些代码,解释为什么它不起作用。
-
dim为 NULL 并不表明它是一个向量,它表明它是一个list。str_split预计会返回一个列表。