Python 安全脚本:Scapy 实现网络流量分析
·
Python 安全脚本:Scapy 实现网络流量分析
概述
Scapy 是一个强大的 Python 网络数据包操作库,可用于网络流量分析、安全监控和漏洞检测。以下脚本实现基础网络流量捕获与分析功能,包含协议统计和异常流量检测。
脚本实现
from scapy.all import *
import sys
def packet_handler(pkt):
"""处理捕获的数据包"""
if IP in pkt:
src_ip = pkt[IP].src
dst_ip = pkt[IP].dst
proto = pkt[IP].proto
# 协议类型映射
proto_map = {1: "ICMP", 6: "TCP", 17: "UDP"}
proto_name = proto_map.get(proto, f"未知协议({proto})")
print(f"[+] {src_ip} -> {dst_ip} | 协议: {proto_name}")
def analyze_traffic(interface, count=50):
"""主分析函数"""
print(f"开始捕获 {count} 个数据包...\n")
protocol_counter = {"TCP": 0, "UDP": 0, "ICMP": 0, "其他": 0}
def _count_protocol(pkt):
if IP in pkt:
proto = pkt[IP].proto
if proto == 6: protocol_counter["TCP"] += 1
elif proto == 17: protocol_counter["UDP"] += 1
elif proto == 1: protocol_counter["ICMP"] += 1
else: protocol_counter["其他"] += 1
# 捕获数据包并实时处理
sniff(iface=interface, prn=packet_handler, count=count)
# 统计协议分布
print("\n协议统计结果:")
for proto, count in protocol_counter.items():
print(f"{proto}: {count} 数据包")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("使用方法: python scapy_analyzer.py <网络接口> [数据包数量]")
sys.exit(1)
interface = sys.argv[1]
count = int(sys.argv[2]) if len(sys.argv) > 2 else 50
try:
analyze_traffic(interface, count)
except PermissionError:
print("错误: 需要管理员权限执行")
功能说明
-
实时流量监控
- 捕获指定网络接口的原始数据包
- 解析源/目标 IP 地址和协议类型
- 支持 TCP/UDP/ICMP 协议识别
-
协议统计分析
- 统计各协议数据包占比
- 输出格式示例:
TCP: 32 数据包 UDP: 15 数据包 ICMP: 2 数据包 其他: 1 数据包
-
异常检测扩展点
# 在 packet_handler 中添加检测逻辑 if TCP in pkt and pkt[TCP].flags == 0x12: # SYN-ACK 扫描检测 print(f"! 潜在端口扫描: {src_ip} -> {dst_ip}:{pkt[TCP].dport}") if len(pkt) > 1500: # 超大包检测 print(f"! 异常大包: {len(pkt)} 字节")
使用示例
# 基础用法 (需管理员权限)
sudo python scapy_analyzer.py eth0
# 捕获100个数据包
sudo python scapy_analyzer.py wlan0 100
安全注意事项
-
权限控制
- 使用最小必要权限原则
- 避免在公共网络捕获敏感数据
-
流量过滤
# 添加BPF过滤器(示例:仅捕获HTTP流量) sniff(filter="tcp port 80", ...) -
数据处理
- 实时分析避免存储原始数据包
- 敏感信息匿名化处理
此脚本仅用于教育目的,实际生产环境需增加日志记录、告警机制和性能优化模块。
更多推荐


所有评论(0)