Ubuntu 下网络嗅探与数据存储实践
一、工具选择与安装
- 在 Ubuntu 上常用的嗅探器包括:tcpdump(命令行抓包与存储)、Wireshark/tshark(图形化与命令行分析)、Snort(入侵检测并可日志入库)。
- 安装示例:
- sudo apt-get update
- sudo apt-get install tcpdump wireshark tshark snort
二、使用 tcpdump 将流量存储为 pcap 文件
- 基本用法:sudo tcpdump -i eth0 -w output.pcap
- 常用增强参数:
- 抓全尺寸包:sudo tcpdump -i eth0 -s 65535 -w output.pcap
- 按条件过滤:sudo tcpdump -i eth0 port 80 -w http.pcap
- 仅抓取指定主机:sudo tcpdump -i eth0 host 192.168.1.10 -w host.pcap
- 读取与后续分析:tcpdump -r output.pcap(可用 Wireshark 打开 pcap 做深入分析)
三、自动化与长期存储方案
- 定时与轮转(按时间/大小切分,避免磁盘被占满)
- 按时间:sudo tcpdump -i eth0 -G 3600 -w /data/cap_%Y%m%d_%H%M%S.pcap
- 按大小:sudo tcpdump -i eth0 -C 100 -w /data/cap.pcap
- 建议将输出目录挂载到大容量磁盘(如 /data),并配置 logrotate 或 systemd 服务做保留策略。
- 脚本化与 Cron
- 示例脚本(捕获 100 个包并统计):
- #!/bin/bash
INTERFACE=“eth0”
OUT=“/var/log/sniffer_output.pcap”
sudo tcpdump -i “$INTERFACE” -w “$OUT” -c 100
COUNT=$(tcpdump -r “$OUT” | wc -l)
echo “Captured $COUNT packets.” >> /var/log/sniffer_stats.log
- 赋权与定时:chmod +x sniff_automatically.sh;crontab -e 添加如:*/5 * * * * /path/to/sniff_automatically.sh
- 验证:grep CRON /var/log/syslog
- 数据库存储(Snort)
- 可将告警/日志写入 MySQL(或其他后端),便于检索与可视化:
- 创建数据库与用户、导入 schema,编辑 /etc/snort/snort.conf:output database: log, mysql, user=snort password=snort-db dbname=snort host=localhost
- 启动:sudo snort -c /etc/snort/snort.conf
- 可配合 ACID/BASE 等前端进行浏览与统计
四、存储格式与后续分析
- 原始包存储:使用 pcap/pcapng 格式(tcpdump 默认),便于用 Wireshark/tshark 进行协议解析、会话重建与统计。
- 文本摘要:若只需简要信息,可用 -w 写入 pcap,配合 -r 读取并用管道做字段提取或统计;或直接输出文本再入库(适合轻量分析)。
- 数据库存储:Snort 可将事件结构化存入 MySQL,适合做长期留存、关联与报表
五、合规与性能注意事项
- 合法合规:抓包涉及隐私与合规风险,务必在获得明确授权的网络与主机上执行,避免捕获敏感明文数据(如凭据、个人信息)。
- 权限与接口:抓包通常需要 root 或具备 CAP_NET_RAW 能力的账户;选择正确的 网络接口(如 eth0)。
- 性能与丢包:
- 使用 -s 65535 抓全包,避免截断;在高吞吐场景建议写入高性能磁盘(SSD/NVMe)并启用文件轮转。
- 长时间运行请监控磁盘空间与系统负载;必要时增加过滤表达式减少无关流量。