写在前面
最近搞了几份日志做分析
看看哪些个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