IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 分分钟通过ip锁定你的位置:正则表达式,re模块,requests模块,json模块组合应用--日志分析 -> 正文阅读

[网络协议]分分钟通过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()转换成字典。
在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:58:44  更:2021-11-30 16:00:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:23:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码