在CentOS上学习“Sniffer”(网络嗅探/抓包)是一个很好的网络技能提升方向。这里需要明确一点:Sniffer 通常指网络嗅探器(如 Wireshark、tcpdump),而不是指 CentOS 的发行版名称(虽然 CentOS 是 Linux 的一个发行版)。
以下是一份从零开始,在 CentOS 环境下学习网络嗅探的系统化指南:
第一阶段:理解基础概念
在学习工具之前,你需要理解“嗅探”在做什么:
- 什么是抓包? 就是截取网络接口(网卡)上流过的数据帧。
- 混杂模式 (Promiscuous Mode): 默认情况下,网卡只接收发给自己的数据。开启混杂模式后,网卡会接收网络上所有的数据包(通常在同一交换机广播域或集线器环境下有效)。
- 协议基础: 至少了解 TCP/IP 四层模型(链路层、网络层、传输层、应用层)。理解 TCP 三次握手、HTTP、DNS 等基本协议对分析抓包数据至关重要。
第二阶段:安装核心工具
CentOS 上最常用、最经典的命令行嗅探工具是 tcpdump。图形化工具通常使用 Wireshark(在 CentOS 上可能叫 wireshark 或 wireshark-gtk)。
1. 安装 tcpdump (必学)
这是 Linux 下最标准的抓包工具,几乎所有服务器都会预装或可以轻松安装。
# 更新 yum 源(可选)
sudo yum update
# 安装 tcpdump
sudo yum install tcpdump
# 验证安装
tcpdump --version
2. 安装 Wireshark (可选,用于图形化分析)
如果你有 CentOS 桌面环境,或者想将抓包文件下载到本地 Windows/Mac 用 Wireshark 分析:
# 安装 wireshark (命令行版 tshark 和图形版)
sudo yum install wireshark wireshark-gtk
# 或者只安装命令行分析工具 tshark
sudo yum install wireshark-cli
第三阶段:实战学习 tcpdump
这是学习的重点。请在 CentOS 终端中练习以下命令。
1. 查看网卡
ip addr
# 或者
ifconfig
记下你的网卡名(如 eth0, ens33, enp0s3)。
2. 基础抓包
# 监听指定网卡(如 eth0)
sudo tcpdump -i eth0
# 监听所有网卡
sudo tcpdump -i any
# 限制抓取数量(例如只抓 10 个包)
sudo tcpdump -i eth0 -c 10
3. 写入文件(关键技能)
抓包通常是为了事后分析,或者因为服务器没有图形界面。
# 将抓到的包保存到文件(.pcap 格式)
sudo tcpdump -i eth0 -w capture.pcap
# 读取抓包文件
sudo tcpdump -r capture.pcap
4. 过滤语法(核心重点)
这是 Sniffer 最难也是最有用的部分。你需要学会过滤噪音,只看你关心的流量。
- 过滤主机 (Host):
sudo tcpdump host 192.168.1.100 - 过滤端口 (Port):
sudo tcpdump port 80 sudo tcpdump port 443 and host 1.1.1.1 - 过滤协议:
sudo tcpdump icmp sudo tcpdump tcp - 过滤源/目标:
sudo tcpdump src host 192.168.1.1 sudo tcpdump dst port 22 - 逻辑运算 (and, or, not):
# 抓取非 SSH 流量 sudo tcpdump not port 22 # 抓取到达 80 端口且来自特定网段的 TCP 流量 sudo tcpdump tcp and dst port 80 and src net 192.168.1.0/24
5. 显示详细信息
# -n 不解析主机名(加快速度)
# -v, -vv, -vvv 显示详细程度
# -X 以十六进制和 ASCII 显示数据内容(看明文协议很有用)
# -A 以 ASCII 显示(看 HTTP 明文很方便)
sudo tcpdump -i eth0 -A -n port 80
第四阶段:进阶与图形化分析
-
使用 Wireshark 分析:
- 在 CentOS 上用
tcpdump -w file.pcap抓包。 - 使用
scp或WinSCP将file.pcap下载到你的 Windows 或 Mac 电脑。 - 用 Wireshark 打开分析。Wireshark 的界面能让你点击展开每一层协议(Ethernet -> IP -> TCP -> HTTP),非常直观。
- 在 CentOS 上用
-
理解抓包结果:
- 看到
SYN, ACK就是 TCP 连接建立。 - 看到
PSH, ACK通常就是有数据传输。 - 看到
RST通常是连接被强制重置(拒绝或异常断开)。
- 看到
第五阶段:相关工具与知识拓展
除了 tcpdump,CentOS 上还有其他相关工具:
- tshark: Wireshark 的命令行版本,功能比 tcpdump 更强大,能解析更多协议。
sudo yum install wireshark-cli tshark -i eth0 - ngrep: 网络层的 grep,专门用来匹配数据包中的字符串(像抓包版的 grep)。
sudo yum install ngrep sudo ngrep -d eth0 port 80 - ss / netstat: 虽然不抓包,但用于查看当前网络连接状态,配合 Sniffer 使用效果极佳。
ss -tunap
第六阶段:安全与法律注意事项(非常重要!)
- 权限: 抓包通常需要
root权限(使用sudo)。 - 隐私: 不要在未授权的网络上抓包。在办公网络或生产环境中,随意抓包可能触犯公司安全策略或法律。
- 性能: 在高流量服务器上长时间抓包会消耗大量 CPU 和磁盘 I/O,可能导致服务器性能下降。请务必使用
-c限制数量或使用-G限制轮转时间。
学习路径总结
- 新手: 学会
tcpdump -i any -n -c 100看个大概。 - 进阶: 学会用
host,port,and组合过滤,精准定位问题。 - 高手: 学会用
-w保存,用 Wireshark 分析 TCP 重传、延迟、握手失败等深层问题。 - 专家: 结合
iptables/nftables和网络知识,分析复杂的网络架构问题。
建议找一本《Wireshark 网络分析就这么简单》或看官方文档,结合实际操作,进步会非常快。
