注册
登录
查看:560 | 回复:6
阿花
关于python匹配日志中的IP并输出,报错了求帮助
发表于 2023/7/17 12:25:13
楼主

由于做日志分析,所以产生了一个需求,就是匹配日志中的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()


秋风扫落叶
最佳答案 发表于 2023/7/17 12:29:54
沙发

all_text= open( E:\\日志审计结果\\text.txt , r ): 这句代码最后怎么有个冒号,而且代码我测试过,是匹配的到IP的,敲代码要仔细啊

阿花
发表于 2023/7/17 12:32:06
板凳

是我太不小心了,谢谢~!可不可以再请教一个问题,如果一个字符串中有多个IP,如何只输出第一个或者第二个。或者前2个IP。。


秋风扫落叶
发表于 2023/7/17 12:34:20
4楼

这个简单,你用的re.findall返回的是匹配到的IP列表,这一个列表你知道怎么操作了吧,想要其中第几个就输出第几个就好


阿花
发表于 2023/7/17 12:35:50
5楼

谢谢大佬,请问,那如何去重输出所有IP呢!~在不知道IP有多少个的情况下


秋风扫落叶
发表于 2023/7/17 12:39:07
6楼

如果想保证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)即可,就可以知道列表中有几个元素,如果不考虑顺序,那有更快的方法。


阿花
发表于 2023/7/17 12:43:45
7楼

灰常感谢

立即注册站大爷用户,免费试用全部产品
立即注册站大爷用户,免费试用全部产品