家里装了智能摄像头,手机App却总提示异常登录?公司服务器莫名其妙变慢,查来查去找不到原因?其实这些问题,往往藏在网络日志里。只要掌握一些实用的特征提取方法,普通人也能快速发现蛛丝马迹。
从日志里找“关键词”是最简单的开始
比如你的路由器日志中频繁出现 failed login 或 authentication 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 + 扫描常见漏洞路径,这一连串特征同时出现,危险等级就很高了。
别被“特征提取”这个词吓住,它其实就是帮我们从一堆杂乱信息里挑出重点。就像晾衣服时一眼看出哪件湿得最久,靠的是经验,也靠一点小方法。日志看得多了,自然就明白哪些该留意,哪些只是日常噪音。