日常妙招屋
白蓝主题五 · 清爽阅读
首页  > 网络监控

网络日志特征提取方法:轻松看懂系统行为的小技巧

家里装了智能摄像头,手机App却总提示异常登录?公司服务器莫名其妙变慢,查来查去找不到原因?其实这些问题,往往藏在网络日志里。只要掌握一些实用的特征提取方法,普通人也能快速发现蛛丝马迹。

从日志里找“关键词”是最简单的开始

比如你的路由器日志中频繁出现 failed loginauthentication error,这就是明显的登录失败记录。用文本工具搜索这些词,就能快速定位可疑IP。像这样:

192.168.1.100 - - [05/Apr/2025:08:22:14] "GET /login HTTP/1.1" 401 1234 "-" "Mozilla/5.0"
103.21.88.66 - - [05/Apr/2025:08:22:15] "POST /admin.php HTTP/1.1" 401 1234

短短几秒内来自不同IP的登录尝试,很可能就是暴力破解的迹象。

提取时间模式,发现异常访问时段

正常用户多在白天活动,如果日志显示凌晨三点有大量数据请求,就得留心了。可以把每条日志的时间戳提取出来,统计每小时的请求数量。例如写个小脚本按小时分组:

import re
from collections import defaultdict

time_count = defaultdict(int)

with open('access.log') as f:
    for line in f:
        match = re.search(r'\[([^]]+):\d+:\d+:\d+', line)
        if match:
            hour = match.group(1).split(':')[1]
            time_count[hour] += 1

for h, c in sorted(time_count.items()):
    print(f'{h}:00 - {c} requests')

跑完一看,23点到2点请求平稳,但3点突然跳到上千次,基本可以断定有问题。

IP频次分析,揪出扫描机器人

一个IP短时间内发起几百次请求,大概率不是真人操作。把日志中的源IP提取出来,统计出现次数:

import re
from collections import Counter

ips = []
with open('firewall.log') as f:
    for line:
        ip = re.search(r'\d+\.\d+\.\d+\.\d+', line)
        if ip:
            ips.append(ip.group())

top_ips = Counter(ips).most_common(5)
print(top_ips)

结果前几名全是陌生境外IP,而且请求路径五花八门,基本就是自动化扫描工具在探路。

用户行为特征:URL路径组合也有规律

正常用户访问页面是有逻辑的,比如先看首页,再点产品页。而攻击者常直接访问敏感路径,像 /phpmyadmin/wp-login.php。把这些路径单独拎出来分析:

admin_paths = ['/admin', '/login', '/shell.php', '/config']

with open('access.log') as f:
    for line in f:
        for path in admin_paths:
            if path in line:
                print(line.strip())
                break

一旦发现非工作时间有人反复试探管理后台,就可以及时封禁对应IP。

结合多个特征更可靠

单看某个指标容易误判,比如某次大促销导致夜间流量上升。要把时间、IP、路径、状态码结合起来看。例如:凌晨3点 + 境外IP + 多次404 + 扫描常见漏洞路径,这一连串特征同时出现,危险等级就很高了。

别被“特征提取”这个词吓住,它其实就是帮我们从一堆杂乱信息里挑出重点。就像晾衣服时一眼看出哪件湿得最久,靠的是经验,也靠一点小方法。日志看得多了,自然就明白哪些该留意,哪些只是日常噪音。