本文目录导读:

我来介绍几种使用Shell脚本分析日志中异常请求的常用方法:
基础异常分析脚本
#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
REPORT_FILE="/tmp/abnormal_report.txt"
# 清空旧报告
> $REPORT_FILE
echo "=== 异常请求分析报告 ===" > $REPORT_FILE
echo "分析时间: $(date)" >> $REPORT_FILE
echo "" >> $REPORT_FILE
# 1. 统计4xx和5xx状态码
echo "=== 4xx/5xx 错误请求统计 ===" >> $REPORT_FILE
awk '{print $9}' $LOG_FILE | grep -E '^[45][0-9]{2}$' | sort | uniq -c | sort -rn >> $REPORT_FILE
# 2. 统计返回404最多的URL
echo "" >> $REPORT_FILE
echo "=== 404错误最多的URL ===" >> $REPORT_FILE
awk '$9 == 404 {print $7}' $LOG_FILE | sort | uniq -c | sort -rn | head -10 >> $REPORT_FILE
# 3. 统计请求量异常的IP
echo "" >> $REPORT_FILE
echo "=== 请求量异常IP (超过100次) ===" >> $REPORT_FILE
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -rn | awk '$1 > 100 {print}' >> $REPORT_FILE
实时异常监控脚本
#!/bin/bash
# 实时监控日志中的异常
tail -f /var/log/nginx/access.log | while read line; do
# 提取状态码
status_code=$(echo $line | awk '{print $9}')
# 检查异常状态码
if [[ $status_code =~ ^[45][0-9]{2}$ ]]; then
ip=$(echo $line | awk '{print $1}')
url=$(echo $line | awk '{print $7}')
time=$(echo $line | awk '{print $4}' | tr -d '[')
echo "[WARNING] 异常请求: $time | IP: $ip | 状态码: $status_code | URL: $url"
fi
# 检测异常请求频率(同一IP的请求间隔)
# 可以在这里添加更复杂的逻辑
done
综合异常分析系统
#!/bin/bash
LOG_DIR="/var/log/nginx"
CURRENT_DATE=$(date +%Y-%m-%d)
analyze_abnormal_requests() {
local log_file="$1"
echo "=== 分析日志文件: $log_file ==="
# 1. SQL注入尝试检测
echo "### SQL注入尝试检测 ###"
grep -i -E "(union.*select|select.*from|insert into|delete from|drop table)" $log_file | \
awk '{print $1, $7, $9}' | sort -u
# 2. XSS攻击尝试检测
echo "### XSS攻击尝试检测 ###"
grep -i -E "(<script|<iframe|alert\(|onerror=|onload=)" $log_file | \
awk '{print $1, $7, $9}' | sort -u
# 3. 路径遍历尝试检测
echo "### 路径遍历尝试检测 ###"
grep -E "\.\./|\.\.\\\\" $log_file | awk '{print $1, $7, $9}' | sort -u
# 4. 扫描器检测
echo "### 爬虫/扫描器检测 ###"
grep -i -E "(sqlmap|nikto|nmap|nessus|acunetix)" $log_file | \
awk '{print $1, $7, $9}' | sort -u
# 5. 短时间内高频访问检测
echo "### 高频访问IP检测 (10秒内超过50次) ###"
awk '{print $1, $4}' $log_file | sort | \
awk '{
ip=$1
time=$2
if (ip != last_ip) {
count=1
start_time=time
} else {
count++
if (count > 50 && time_diff < 10) {
print ip " 在短时间内访问了" count "次"
}
}
last_ip=ip
}'
}
# 按需分析
case "$1" in
"daily")
analyze_abnormal_requests "$LOG_DIR/access.log"
;;
"realtime")
# 实时监控
tail -f "$LOG_DIR/access.log" | while read line; do
# 实时分析逻辑
echo "$line" | grep -E "error|warning|403|404|500|502|503" && \
echo "[$(date)] 发现异常: $line"
done
;;
*)
echo "用法: $0 {daily|realtime}"
exit 1
;;
esac
高级异常分析脚本
#!/bin/bash
# 定义异常模式
declare -A PATTERNS
PATTERNS["SQL注入"]="(union.*select|select.*from|insert into|drop table|delete from|--|#|/\*)"
PATTERNS["XSS攻击"]="(<script|<iframe|alert\(|onerror=|onload=|javascript:)"
# 检测并报告
detect_anomalies() {
local log_file=$1
local output_file="/tmp/anomalies_$(date +%Y%m%d_%H%M%S).txt"
echo "开始检测异常请求..." > $output_file
for pattern_name in "${!PATTERNS[@]}"; do
echo "检测: $pattern_name" >> $output_file
# 使用grep的-P选项支持Perl正则
grep -P "${PATTERNS[$pattern_name]}" $log_file | \
awk '{ip=$1; url=$7; status=$9; print ip" | "status" | "url}' >> $output_file
echo "---" >> $output_file
done
# 生成统计
echo "=== 异常统计 ===" >> $output_file
for pattern_name in "${!PATTERNS[@]}"; do
count=$(grep -cP "${PATTERNS[$pattern_name]}" $log_file)
echo "$pattern_name: $count 次" >> $output_file
done
echo "报告已生成: $output_file"
}
# 执行检测
detect_anomalies "/var/log/nginx/access.log"
使用技巧
实时监控并告警
#!/bin/bash
# 添加告警功能
threshold=100
ip_count=$(tail -1000 access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -1 | awk '{print $1}')
if [ "$ip_count" -gt "$threshold" ]; then
echo "检测到异常流量,发送告警..."
# mail -s "异常流量告警" admin@example.com < /tmp/report.txt
fi
日志旋转后分析
#!/bin/bash
# 分析昨天的日志
yesterday=$(date -d "yesterday" +%Y%m%d)
log_file="/var/log/nginx/access.log.$yesterday"
if [ -f "$log_file" ]; then
analyze_abnormal_requests "$log_file"
fi
这些脚本可以帮助你:
- 快速识别异常请求
- 发现潜在的安全威胁
- 生成分析报告
- 实现实时监控
根据具体需求选择合适的脚本,并可以组合使用不同的分析方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播