怎样用Linux Sniffer诊断网络问题
导读:用 Linux Sniffer 诊断网络问题的实用流程 一、准备与总体思路 明确目标:是连通性、时延/丢包、端口与服务可达、DNS 解析、还是异常流量/攻击。 选择工具:命令行首选tcpdump(轻量、可脚本化),深度分析用Wiresha...
用 Linux Sniffer 诊断网络问题的实用流程
一、准备与总体思路
- 明确目标:是连通性、时延/丢包、端口与服务可达、DNS 解析、还是异常流量/攻击。
- 选择工具:命令行首选tcpdump(轻量、可脚本化),深度分析用Wireshark/tshark(图形化、协议解码强),拓扑可视化可用EtherApe。
- 合法合规:抓包涉及明文数据与隐私,务必取得明确授权,避免在生产环境无过滤抓取。
- 运行权限:抓包需要原始套接字权限,通常以root或加入wireshark组运行;远程抓包时避免抓取自身SSH会话以免刷屏。
- 基本准备命令:查看网卡tcpdump -D;选择接口**-i any/eth0**;抓少量样例**-c 100**;保存为pcap便于后续分析**-w file.pcap**;读取**-r file.pcap**。
二、快速定位路径与常用命令
- 连通性与路径
- 先看端到端:ping 目标;再看路由与下一跳可达性(如 ip route/get、traceroute/mtr)。
- 抓 ICMP 与 ARP:tcpdump -i any -nn icmp or arp(定位是否TTL 超时、目标不可达、ARP 异常)。
- DNS 解析
- 抓 DNS 查询/响应:tcpdump -i any -nn port 53 -vv(看SERVFAIL/REFUSED、响应延迟、查询域名是否正确)。
- 端口与服务可达
- 直连测试:nc -vz 目标 80/443;抓对应端口:tcpdump -i any -nn host 目标 and port 80。
- 三次握手是否建立:tcpdump -i any -nn ‘tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn’(仅 SYN 泛滥常见于半开连接/DoS)。
- HTTP/HTTPS 与应用层
- HTTP 明文:tcpdump -i any -nn -A -s 0 ‘tcp port 80’ | egrep -i “GET|POST|HTTP/1.”(快速看请求行/首部)。
- HTTPS:仅握手与证书:tcpdump -i any -nn -s 0 ‘tcp port 443 and (tcp[((tcp[12:1] & 0xf0) > > 2):4] = 0x16)’(过滤 TLS Handshake);内容不可读属正常(加密)。
- 丢包与重传
- 观察重传与重复 ACK:tcpdump -i any -nn ‘tcp[tcpflags] & tcp-ack != 0 and (tcp[((tcp[12:1] & 0xf0) > > 2):4] = 0x0004 or tcp[((tcp[12:1] & 0xf0) > > 2):4] = 0x0011)’(常见标志:ACK+RST、Dup ACK)。
- 异常流量识别
- 突发大流量或异常协议:tcpdump -i any -nn -c 1000 ‘not port 22 and not port 80 and not port 443’(先排除SSH/HTTP/HTTPS再看“未知流量”);配合Wireshark 统计或EtherApe按主机/协议可视化。
三、典型场景与抓包要点
| 场景 | 关键线索 | 抓包过滤与命令示例 |
|---|---|---|
| 网站访问慢或打不开 | DNS 超时、TCP 握手失败、TLS 握手失败、HTTP 5xx | 1) DNS:tcpdump -i any -nn port 53 -vv 2) TCP:tcpdump -i any -nn ‘host 目标 and port 80’ 3) TLS:tcpdump -i any -nn ‘tcp port 443 and (tcp[((tcp[12:1]& 0xf0)> > 2):4]=0x16)’ |
| 内网间歇性丢包 | 重复 ACK、快速重传、ICMP 超时 | tcpdump -i any -nn ‘tcp[tcpflags] & tcp-ack != 0 and (tcp[((tcp[12:1]& 0xf0)> > 2):4]=0x0004 or tcp[((tcp[12:1]& 0xf0)> > 2):4]=0x0011)’ |
| 服务器端口未监听 | 目标端口返回 RST 或无响应 | tcpdump -i any -nn ‘host 目标 and port 8080’(看到 RST 多为端口未开/被拒绝) |
| 疑似被攻击或异常外联 | 大量 SYN、ICMP 洪泛、未知协议外联 | tcpdump -i any -nn ‘tcp[tcpflags] & tcp-syn != 0’ 或 ‘icmp’ 或 ‘not port 22 and not port 80 and not port 443’ |
| DNS 解析异常 | SERVFAIL/REFUSED、响应延迟大 | tcpdump -i any -nn port 53 -vv(核对域名、返回码、TTL) |
| 以上命令中的过滤表达式基于tcpdump 过滤语法(host、port、proto、逻辑运算等),可按需组合。 |
四、高效过滤与结果判读
- 常用过滤基元
- 主机/网段:host 1.2.3.4;net 10.0.0.0/8
- 端口/范围:port 80;portrange 1-1024
- 协议:tcp、udp、icmp、arp
- 方向:src、dst;组合:and、or、not(括号需引号或转义)
- 实用组合示例
- 只看某主机的 HTTP:tcpdump -i any -nn ‘host 1.2.3.4 and tcp port 80’
- 排除 SSH 再看其他流量:tcpdump -i any -nn ‘not tcp port 22’
- 抓取完整内容便于离线分析:tcpdump -i any -s 0 -w debug.pcap;再用 Wireshark 打开
- 结果快速判读要点
- 仅见 SYN 无 SYN-ACK:对端未监听/策略拒绝/中间设备拦截
- 多次重传与 Dup ACK:链路拥塞/抖动/丢包
- ICMP 目标不可达/超时:路径中某跳拒绝或黑洞
- DNS 返回 SERVFAIL/REFUSED:域名不存在/配置错误/权威服务器异常
- 抓到大量非业务端口流量:可能存在扫描/蠕虫/挖矿等异常行为
五、排错与优化建议
- 权限与接口
- 使用 sudo 或将用户加入wireshark组;远程抓包避免抓取自身会话(如 not port 22)。
- 性能与存储
- 抓包务必加过滤表达式,限制数量/时长;必要时先落盘再分析(-w),避免终端打印成为瓶颈。
- 可视化与统计
- 复杂问题用Wireshark做协议解码/时序/统计,或用EtherApe看主机-协议关系图,快速定位“谁在和谁通信、占了多少流量”。
- 合规与风险控制
- 抓包可能包含凭据/敏感数据,仅在授权范围内使用;生产环境建议离线分析、最小化保留周期。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样用Linux Sniffer诊断网络问题
本文地址: https://pptw.com/jishu/778263.html
