尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【学习笔记】tcpdump+Wireshark抓包(1)

【学习笔记】tcpdump+Wireshark抓包(1) 1. tcpdump 和 Wireshark 是什么1.1 抓包是在干什么网络上的通信本质上是数据被拆成一个个 数据包Packet经过网卡发送和接收。抓包 在某个网卡上把经过的数据包 复制一份 保存下来供后续分析。应用程序curl、浏览器 ↓ 操作系统网络栈 ↓ 网卡eth0 / lo ↓ tcpdump 在这里「旁听」并录音1.2 tcpdump 是什么项目说明类型命令行抓包工具运行环境服务器、虚拟机、无图形界面的机器macOS 也自带主要用途生产环境抓包、写脚本、远程排障输出终端直接显示或保存为.pcap文件特点轻量、资源占用小Linux 几乎都能装Mac 预装在/usr/sbin/tcpdump权限抓包通常需要管理员权限sudo常见安装# Ubuntu / Debian sudo apt install tcpdump # CentOS / RHEL sudo yum install tcpdump # macOS一般已自带验证即可 which tcpdump1.3 Wireshark 是什么项目说明类型图形界面的网络协议分析工具运行环境个人电脑Windows / macOS / Linux 桌面主要用途打开.pcap文件可视化分析协议细节特点协议解析强、过滤方便、适合深入分析Wireshark 也能直接抓包但生产服务器上更常用 tcpdump 抓 Wireshark 看。1.4 两者是什么关系搭档关系不是二选一。阶段工具做什么抓tcpdump在服务器上录包保存文件看Wireshark打开文件图形化分析1.5 最小上手例子ping 抓包以下命令展示通用抓包流程。Linux 可使用 -i anymacOS 请先执行 tcpdump -D 查看接口再按目标流量选择 en0、lo0 等实际接口。Linux 服务器生成的 .pcap 可用 scp 传到个人电脑后由 Wireshark 打开。项目说明目标抓一次 ping 流量用 Wireshark 打开看终端 1抓包开始录制保存到桌面终端 2产生流量发 4 次 ping停止抓包终端 1 按Ctrl C分析用 Wireshark 打开.pcap文件终端输入# 终端 1抓 ICMP保存文件 sudo tcpdump -i any icmp -w ~/Desktop/ping-demo.pcap # 终端 2产生 ping 流量 ping -c 4 114.114.114.114命令含义先记这 4 个就够参数含义-i any在所有网卡上抓icmp只抓 ping 用的 ICMP 包噪音少-w ~/Desktop/ping-demo.pcap保存到桌面给 Wireshark 用无-c一直抓直到你按CtrlC停止执行 tcpdump 的终端按下 control c 之后就会生成 .pcap 文件。用 Wireshark 打开open -a Wireshark ~/Desktop/ping-demo.pcapWireshark 顶部过滤器输入icmp ip.addr 114.114.114.114回车后应主要看到10.2.73.219↔114.114.114.114的包噪音会少很多。2.详细讲解实例2.1 Wireshark 三个区域界面结构┌─────────────────────────────────────────────────┐ │ ① 包列表上面表格 ├──────────────────────┬──────────────────────────┤ │ ② 包详情左下 │ ③ 原始字节右下 │ └──────────────────────┴──────────────────────────┘区域位置作用小白先看什么① 包列表上方表格一行 一个网络包按时间排列Source、Destination、Info② 包详情左下方把一个包从外到里逐层展开Frame → Ethernet → IP → ICMP/TCP③ 原始字节右下方线上真实数据十六进制 ASCII初学阶段可暂时忽略2.2 包列表各列含义列名含义示例No.第几个包17Time相对抓包开始过了多少秒7.9Source谁发的源 IP10.2.73.219Destination发给谁目的 IP114.114.114.114Protocol什么协议ICMP / TCP / DNSLength包大小字节74Info一句话摘要Echo (ping) requestInfo 常见文字Info 文字含义Echo (ping) request你的电脑发出 ping「在吗」Echo (ping) reply对方回复 pong「在收到了」Destination unreachable (...)中间设备「到不了被拦了」(no response found!)Wireshark只看到你发的没看到回复2.3 点开单个包分层结构怎么读双击某个具体的包可以放大看上面部分每行左边的箭头点击后可展开看。层级名称看什么最外层Frame抓包元信息大小、从哪块网卡抓到二层Ethernet IIMAC 地址哪块网卡的硬件地址三层Internet Protocol (IPv4)IP 地址Source / Destination四层ICMP / TCP / UDP具体协议内容ping、握手、DNS 等2.4 第一次看包建议只看 4 个地方Info — 一句话总结最重要IP 的 Source / Destination — 谁发给谁Protocol — 什么协议ICMP / TCP / DNS…最里层 — ping 看 Type 8/0报错看 unreachable / prohibited 等3. 抓包实践——ping 网关终端 1sudo tcpdump -i any icmp -w ~/Desktop/ping-gateway.pcap终端 2# 先看网关是谁 以.1结尾 netstat -nr | grep default # 假设显示网关是 10.2.255.1就 ping 它 ping -c 4 10.2.255.1-c后面要跟「发几个包」的数字。3.1 详看包列表终端 1 按CtrlC停抓用 Wireshark 打开ping-gateway.pcap。open -a Wireshark ~/Desktop/ping-gateway.pcap顶部过滤器改成icmp ip.addr 10.2.72.1回车后应主要看到 8 个包4 个 request 4 个 replyrequest 和 reply 的差别项目request如 No.4reply如 No.5Source10.2.73.219你10.2.72.1网关Destination10.2.72.1网关10.2.73.219你ICMP Type80InfoEcho (ping) requestEcho (ping) reply目前见过的 Info 速查Info好/坏谁发给谁一句话Echo (ping) request正常你 → 目标你在 pingEcho (ping) reply正常目标 → 你ping 通了Destination unreachable (Fragmentation needed)异常路由器 → 你包太大过不去Destination unreachable (Host administratively prohibited)异常防火墙 → 你被策略禁止(no response found!)异常/未完成—发了 ping 没抓到回复字段全称含义常见值 / 现象idIdentifier标识符区分是哪一次 ping「会话」同一次 ping 里request 和 reply 的 id 相同seqSequence序列号第几个 ping 包第 1 次 ping seq0第 2 次 seq1依次 1ttlTime To Live生存时间包最多还能经过几跳路由常见 64、128、255每过一台路由器减 13.2 详看单个包第 1 层 Frame字段含义Frame Number第几个包Interface (en0)从哪块网卡抓到Process (ping)哪个进程发的第 2 层 Ethernet II字段含义Source源 MAC谁发的Destination目的 MAC发给谁第 3 层 IPv4字段含义Source源 IPDestination目的 IPTTL还能经过几跳Protocol上层协议ICMP第 4 层 ICMP字段含义Type8request0replyIdentifier (id)会话标识request/reply 相同Sequence Number (seq)第几次 pingResponse frame对应 reply 在第几号包request / reply 对照字段requestreplySource IP10.2.73.21910.2.72.1Destination IP10.2.72.110.2.73.219ICMP Type80id相同相同seq相同相同4. 抓包实践——curl 抓包4.1 DNS目的是看一下域名怎么变成 IP。终端 1抓包sudo tcpdump -i any -w ~/Desktop/dns-test.pcap终端 2产生流量nslookup www.baidu.com这里如果设置了代理可能会抓不到dns可以将代理关了。unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY终端 1Ctrl C停抓Wireshark 打开分析open -a Wireshark ~/Desktop/dns-test.pcap然后进行过滤输入dns和之前一样的。No.450 — DNS 查询query字段值含义Source10.2.73.219你的电脑Destination10.2.255.2DNS 服务器ProtocolDNS域名解析InfoStandard query …www.baidu.com问这个域名的 IPInfo 怎么读部分含义Standard query标准 DNS 查询0x2129查询 ID用来和回复配对A要 A 记录域名 → IPv4www.baidu.com被查的域名No.481 — DNS 回复response字段值含义Source10.2.255.2DNS 服务器Destination10.2.73.219你的电脑InfoStandard query response …对上面那条 query 的回答0x2129和 No.450 相同说明是同一问一答Info 里重点部分含义CNAMEwww.a.shifen.comwww.baidu.com是别名真实名字是这个A 110.242.6…最终用来连接的 IPv4 地址多个 A百度有多个 IP任选一个连和 ping 对比巩固项目pingDNS目的测通不通域名变 IP协议ICMPDNS over UDP层数4 层5 层关键层ICMPDNS成对包request replyquery response端口无53仔细看这个包的话其实是有5层的。前3层和前面说的差不多我们这里着重说一下第4层和第5层。第 4 层 UDP — 端口重要字段含义query 里 typicalSource Port源端口随机如 57470Destination Port目的端口53DNS 固定端口记一句DNS 查问时目的端口一定是 53。response 里方向反过来源端口 53目的端口是我们自己这边的随机端口。第 5 层 Domain Name System — DNS 核心最重要queryNo.450展开后看这些字段含义你的例子里Transaction ID查询编号和 response 配对0x2129Flags: Standard query这是一个「问」queryQueries问什么www.baidu.com: type Atype A要 IPv4 地址要 IP不是别的responseNo.481展开后看这些字段含义你的例子里Transaction ID必须和 query 相同0x2129Flags: Standard query response这是一个「答」responseQueries当初问的是什么www.baidu.comAnswers答案CNAME →www.a.shifen.comA 记录最终 IP可能多个110.242.6.xDNS 阶段把所有 IP 都告诉你连接阶段通常只连其中一个若连不上可能再试列表里的另一个4.2 TCP 三次握手 四次挥手终端 1开始抓包sudo tcpdump -i any -w ~/Desktop/tcp-http.pcap看到listening on any...就说明在抓了。先开着别关。终端 2关掉代理再 curl# 若出现 Uses proxy 或 Connection to 127.0.0.1说明还在走代理要先 unset 再试。 unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY curl -v http://www.example.comcurl 成功的话终端里应能看到类似* Host www.example.com:80 was resolved. * Connected to www.example.com (93.184.216.34) port 80 GET / HTTP/1.1 HTTP/1.1 200 OK终端 1停抓: 按Ctrl C。打开 Wiresharkopen -a Wireshark ~/Desktop/tcp-http.pcap服务器一般是 80HTTP我们自己这边是随机高端口如 52341、57470每次 curl 可能不同顶部过滤器输入tcp.port 80三次握手然后看 Info 字段找连续 3 个包对应经典tcp三次握手的三步第 1 步 SYN 你 → 服务器 「我想连你」 第 2 步 SYN, ACK 服务器 → 你 「好我也准备好了」 第 3 步 ACK 你 → 服务器 「收到连上了」对应图中就是159、166、167这三个包。主要说一下包的第4层TCP层。字段含义Source Port源端口你这边多为随机如 57872Destination Port目的端口HTTP 为 80HTTPS 为 443Sequence Number (Seq)序列号Acknowledgment Number (Ack)确认号FlagsSYN / ACK / FIN判断握手、挥手Len数据长度握手时常为 0四次挥手Wireshark 里常把 FIN 和 ACK 合在一包 里显示为[FIN, ACK]所以理论上 4 次FIN、ACK、FIN、ACK界面上可能 34 个包且带FIN的通常就 2 个你发一次、服务器发一次认法 找两个带 FIN 的包方向相反前后再配上 ACK就是挥手。需要详细看的包字段和前面一样。4.3 HTTP发 HTTP 请求168包号Info含义168HTTP GET / HTTP/1.1curl 请求首页这就是 curl 在说「把网站首页给我。」收响应173包号Info含义173HTTP/1.1 200 OK服务器返回成功和网页内容200 OK 请求成功。请求包详情这里相对于tcp多了一层http层。1. 请求行GET / HTTP/1.1部分含义GET方法获取资源要网页不是提交表单/路径网站根目录首页HTTP/1.1协议版本合起来用 HTTP/1.1GET 方式要www.example.com的首页。2. Host: www.example.com一台服务器上可能挂很多网站Host 告诉服务器我要的是 **www.example.com**不是别的站和浏览器地址栏里的域名对应。3. User-Agent: curl/8.4.0告诉服务器我是 curl 8.4.0不是 Chrome/Safari服务器有时会按不同客户端返回不同内容初学知道即可4. Accept: */*表示什么类型的内容我都能接受*/* 任意类型5. Wireshark 提示Response in frame: 173Full request URI: http://www.example.com/回复在 173 号包完整 URL 是http://www.example.com/响应包详情下面是响应包对比请求多出来了两块1.[2 Reassembled TCP Segments (873 bytes): #172(868), #173(5)]含义TCP 重组信息Wireshark 算的不是线上协议完整 HTTP 响应 873 字节 ├─ No.172 带了 868 字节 └─ No.173 带了 5 字节TCP 只管按序传字节一个 HTTP 响应可以拆成多个 TCP 包。Wireshark 把 #172 和 #173 拼回一条完整 HTTP 消息并提示你提示项含义2 Reassembled TCP Segments由 2 个 TCP 包拼成873 bytes拼完一共 873 字节#172(868)第 1 段在 172 号包868 字节#173(5)第 2 段在 173 号包5 字节下面十六进制若以48545450开头ASCII 就是 HTTP说明拼出来的是完整 HTTP 响应。为什么请求 168 没有 GET 只有 78 字节一个 TCP 包就够不需要重组。2.Line-based text data: text/html含义HTTP 正文网页 HTML的展示方式HTTP 响应分两部分HTTP/1.1 200 OK ← 响应头状态、类型等 Content-Type: text/html 空行 !doctype html... ← 正文HTMLWireshark 常把响应拆成两块显示展示块内容Hypertext Transfer Protocol状态行 响应头200 OK、Content-Type 等Line-based text data: text/html正文里的 HTML 文本text/html表示按网页 HTML 来解析1 lines等是 Wireshark 对行数的统计。为什么请求 168 没有 GET 只有请求头几乎没有 body所以没有「一整段 HTML 正文」可单独展开。到目前为止已经尝试过tcpdump 抓包、Wireshark 看包、ICMP/DNS/TCP/HTTP 基本字段、三次握手与四次挥手、Seq/Ack、HTTP 请求响应、TCP 重组。
返回列表