写在前面

最近搞了几份日志做分析

看看哪些个ip访问比较频繁,确认是不是正常访问,不是的话,就封了它

AI写个脚本实现下

用法

使用示例

简单来说,输入python 脚本文件名.py 日志文件路径 就行了

前面是频次,后面是ip

抓取结果

代码实现

import re
import sys
import os
from collections import Counter

def count_ip_frequency(log_content):
    # 使用正则表达式匹配IP地址
    ip_pattern = r'^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
    ips = re.findall(ip_pattern, log_content, re.MULTILINE)

    # 统计每个IP的出现次数
    ip_counts = Counter(ips)

    # 按频次从高到低排序
    sorted_ips = sorted(ip_counts.items(), key=lambda x: x[1], reverse=True)

    return sorted_ips

def main():
    # 检查命令行参数
    if len(sys.argv) != 2:
        script_name = os.path.basename(sys.argv[0])
        print(f"使用方法: python {script_name} < 日志文件路径 >")
        sys.exit(1)

    log_file = sys.argv[1]  # 获取命令行传入的文件路径

    try:
        with open(log_file, "r", encoding="utf-8") as f:
            log_content = f.read()

        # 统计IP频次
        ip_stats = count_ip_frequency(log_content)

        # 打印结果
        for ip, count in ip_stats:
            print(f"【{count}】{ip}")

    except FileNotFoundError:
        print(f"错误:找不到文件 {log_file}")
    except Exception as e:
        print(f"处理日志时发生错误:{e}")

if __name__ == "__main__":
    main()

从高到低或者从低到高,就是修改15行的那个True或者false

最后修改:2025 年 07 月 01 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~