由于做日志分析,所以产生了一个需求,就是匹配日志中的IP地址,然后输出,日志样本如下:
|58229|NULL|2016-08-09 18:25:54|2016-08-09 18:16:40|NULL|5|10.48.128.49| 5156: Windows 筛选平台已允许连接。 应用程序信息: 进程 ID: 5776 应用程序名称: \device\harddiskvolume3\oracle\product\11.2.0\dbhome_1\jdk\bin\java.exe 网络信息: 方向: 出站 源地址: 10.48.128.49 源端口: 52562 目标地址: 10.48.128.49 目标端口: 1521 协议: 6 筛选器信息: 筛选器运行时 ID: 65949 层名称: 连接 层运行时 ID: 48|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|Security-Auditing:|NULL|NULL|NULL
我的做法是,打开日志文件,读取文件第一行(因为IP就在第一行),然后用正则匹配输出IP,但是提示,“语法错误”,求大神解答~!~!~,代码如下:
all_text= open( E:\\日志审计结果\\text.txt , r ): p=all_text.readlines()[1] re.findall(r \d+.\d+.\d+.\d+ ,p) all_text.close()
all_text= open( E:\\日志审计结果\\text.txt , r ): 这句代码最后怎么有个冒号,而且代码我测试过,是匹配的到IP的,敲代码要仔细啊
是我太不小心了,谢谢~!可不可以再请教一个问题,如果一个字符串中有多个IP,如何只输出第一个或者第二个。或者前2个IP。。
这个简单,你用的re.findall返回的是匹配到的IP列表,这一个列表你知道怎么操作了吧,想要其中第几个就输出第几个就好
谢谢大佬,请问,那如何去重输出所有IP呢!~在不知道IP有多少个的情况下
如果想保证IP顺序的话这么写
IPList = re.findall(r \d+.\d+.\d+.\d+ , p) IP = [] for ip in IPList: if ip not in IP: IP.append(ip) else: pass print IP
输出的IP就是去重的IP列表,还有其实你是可以知道其中有几个元素的,len(IPList)即可,就可以知道列表中有几个元素,如果不考虑顺序,那有更快的方法。
灰常感谢