分分钟通过ip锁定你的位置:正则表达式,re模块,requests模块,json模块组合应用–日志分析


前言

本文主要是将日志文件字段截取出来进行日志分析,主要用到了一些模块,正则表达式,以及对文件的一些操作。
在这里插入图片描述

一、目标

把日志文件scwebsite2_ssl.log里的ip,时间字段获取出来,时间格式转化为“2021-11-24 12:00:00", 通过ip解析出它属于哪个省份和运营商,结果写入另一个文件

二、代码实现

import re
import requests
import json
def read_file(input_file_name,output_file_name): # 取IP函数:将输入文件中的IP地址输出到指定文件中
    _fLog = open(input_file_name)# 打开目标文件
    ip_list=[]
    for each in _fLog:
        ip=re.findall(r'(?<![.d])(?:d{1,3}.){3}d{1,3}(?![.d])', str(each), re.S) # 正则查找ip地址
        ip_list.append(ip[0])
    ids = list(set(ip_list))  # 列表去重:通过set方法进行处理
    print("共解析ip个数:%s "% len(ids))
    # ##写出数据到本地
    # 设置输出文件路径
    out = open(output_file_name, "a")  # 打开要存放截取的IP的文件
    for each in ids:
        print(each)
        out.write(each + 'n')
    out.close()  # 关闭连接
    _fLog.close()
    print("ip提取完毕!")
def URL(url_ip):  # 函数功能:去除url后面的IP地址
    url_ip = url_ip[::-1]
    d4 = url_ip.index('=')
    url_ip = url_ip[::-1]
    url_ip = url_ip[0:len(url_ip) - d4]
    return url_ip
read_file("scwebsite2_ssl.log","outout.log")
f = open("outout.log")  # 打开ip地址文件
_fp = open("message.txt","a")  # 以追加写的形式打开文件,以便写入处理后的数据
for i in f:  # 遍历ip地址
        url = "http://ip.aliyun.com/outGetIpInfo?accessKey=alibaba-inc&ip=114.119.156.146"
        url = URL(url) + i  # 使用URL函数将url末尾的IP地址去除,将ip文件中的ip地址接到url后面
        try:
            response = requests.get(url)  # request获取url回复
            url_text = response.text
            dict_message = json.loads(url_text)  # 利用json模块将字典形式的字符串转化成字典放入dict_message中
            print(dict_message)
            ip = dict_message.get('data').get('queryIp')  # 获取字典中key为queryIp的值,即IP地址
            country = dict_message.get('data').get('country')  # 获取字典中key为country的值,即国家名称
            region = dict_message.get('data').get('region')  # 获取字典中key为region的值,即省份名称
            isp = dict_message.get('data').get('isp')  # 获取字典中key为isp的值,即服务商名称
            message = ip + ':' + country + ' ' + region + ' ' + isp + 'n'  # 将获取的值组合在一起
            print(message)
            _fp.write(message) # 将每一条信息追加到文件中
        except:
            print("请求错误的url:")
            print(url)

三、用到的模块

1.re模块

re.findall()可以配合正则表达式,将文件中所需要的信息过滤出来。
findall(pattern, string, flags = 0 )
ip=re.findall(r’(?<![.d])(?:d{1,3}.){3}d{1,3}(?![.d])’, str(each), re.S) # 正则查找ip地址
findall的r‘’里面接的是要查找内容的正则表达式,string位置则是要查找的所有内容,flag位置为标识位。
re.findall()返回的是列表也就是数组。

2.requests模块

requests.get()的作用是通过url对服务器发起请求的。
requests.get()在请求服务器失败之后会报错,会导致程序中断,如果对与部分不能请求的url想要跳过它继续请求后面的url的话,可以使用try…except…来跳过错误,继续执行下面的代码。

3.json模块

json.loads()的作用是将字符串形式的json数据转换成字典形式。如:向服务器发送请求后,服务端返回了,js数据,我们可以利用json.load()将字典形式的字符串数据转换成字典。
在这里插入图片描述
利用json.loads()转换成字典。
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>