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

Posted johnyollu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分分钟通过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])(?:\\d1,3\\.)3\\d1,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])(?:\\d1,3.)3\\d1,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()转换成字典。

以上是关于分分钟通过ip锁定你的位置:正则表达式,re模块,requests模块,json模块组合应用--日志分析的主要内容,如果未能解决你的问题,请参考以下文章

re 模块 正则表达式

一分钟带你了解正则

re模块

转义符,re模块,rangdom随机数模块,

模块3 re, 正则表达式 详解!!!

python - re正则匹配模块