1.写在前面
前面的博客已经介绍完了HTTP的协议,但是HTTP协议我们经常需要使用Wireshare
工具进行抓包,我们先看下网络爬虫。
2.网络爬虫Web crawler
-
网络爬虫模拟人类使用浏览器浏览、操作页面的行为,对互联网的站点进行操作
-
网络爬虫获取到一个页面后,会分析出页面里所有的URI,沿着这些URI路径递归的遍历所有页面,因此被称为爬虫(Web crawler)、蜘蛛(Spider)、网络机器人(spiderbot)
对待网络爬虫的2种态度:欢迎常光临
- SEO(Searche Engine Optimization),搜索引擎优化
- 合法的优化:sitemap、title、keywords、https等
- 非法的优化:利用PageRank算法漏洞
对待网络爬虫的2种态度:拒绝访问
- 为了对抗网络爬虫而生的图形验证码
- 为了对抗图形验证码而生的"打码平台"
- 升级图形验证码
- SEO(Searche Engine Optimization),搜索引擎优化
网络爬虫如何抓取数据
- 模拟浏览器渲染引擎,需要对JavaScript文件分析执行、发起Ajax请求等
- 爬虫爬取数据的速度VS互联网生成信息的速度
- 爬虫执行速度快,许多爬虫可以并行执行
- 互联网生成信息的速度大于爬取速度
- 优先爬取更重要的页面
爬虫常见的请求头部
- User-Agent:识别是哪类爬虫
- From:提供爬虫机器人管理者的邮箱地址
- Accept:告知服务器爬虫对那些资源类型感兴趣
- Referer:相当于包含了当前请求的页面URI
robots.txt:告知爬虫那些内容不应爬取
-
Robots.txt文件内容
-
User-agent:允许那些机器人
-
Disallow:禁止访问特定目录
-
Crawl-delay:访问间隔秒数
-
Allow:抵消Disallow指令
-
Sitemap:指定站点地图的URI
-
3.HTTP协议的基本认证
HTTP基本认证
-
RFC7235,一种基本的验证框架,被绝大部分浏览器所支持
-
明文传输,如果不使用TLS/SSL传输则由安全问题
认证请求
认证响应
4.Wireshark的基本用法
如何捕获报文
-
点击捕获->选项,打开捕获窗口
- 网卡设备/流量/捕获过滤器,点击"开始"按钮开始抓包
- 输出(指定缓存文件)/选项(显示、名称解析、自动停止抓包条件)面板
-
点击捕获->停止,停止抓包
Wireshare面板
快捷方式工具栏
数据包的颜色(视图->着色规则)
设定时间显示格式
数据包列表面板的标记符号
四种流跟踪
- TCP
- UDP
- SSL
- HTTP
文件操作
- 标记报文Ctrl+M
- 导出标记报文(文件->导出特定分组)亦可按过滤器导出报文
- 合并读入多个报文(文件->合并)
如何快速抓取移动设备的报文
- 在操作系统上打开WiFi热点
- 手机连接WiFi热点
- 用Wireshark打开捕获->选项面板,选择WiFi热点对应的接口设备抓包
5.如何通过DNS协议解析域名?
什么是DNS
-
一个用于将人类可读的域名与服务器的IP地址进行映射的数据库
-
递归查询
- 根域名服务器
- 权威服务器
DNS域名结构
递归查询
DNS报文:查询与响应
-
query:查询域名
-
response:返回IP地址
DNS报文
Questions格式
-
QNAME编码规则
- 以.分隔为多段,每段以字节数打头
- 单字节,前2比特必须为00,只能表示2^6-1=63字节
- 以ASCII编码每段字符
- 以0结尾
- 以.分隔为多段,每段以字节数打头
-
QTYPE常用类型
值 类型 意义 1 A IPv4地址 2 NS 权威域名服务器 5 CNAME 别名 15 MX 邮件交换 16 TXT 文本字符串 28 AAAA IPv6地址 -
QCLASS:IN表示Internet
Answer格式
- NAME:前2位为11,接引用QNAME偏移
- 在DNS头部的字符偏移数
- TTL:Time To Live
- RDLENGTH:指明RDATA的长度
- RDATA:查询值,如IP地址,或者别名
- 别名遵循QNAME编码规则
6.Wireshark过滤器
- 捕获过滤器
- 用于减少抓取的报文体积
- 使用BPF语法,功能相对有限
- 显示过滤器
- 对已经抓取到的报文过滤显示
- 功能强大
BPF过滤器:Wireshark捕获过滤器
- Berkeley Packet Filter,在设备驱动级别提供抓包过滤接口,多数抓包工具都支持此语法
- expression表达式:由多个原语组成
Expression表达式
- primitives原语:由名称或数字,以及描述它的多个限定词组成
- qualifiers限定词
- Type:设置数字或者名称所指示类型,例如host www.baidu.com
- Dir: 设置网络出入方向,例如dst port 80
- Proto:指定协议类型,例如udp
- 其他
- qualifiers限定词
- 原语运算符
- 与:&&或者and
- 或:|| 或者or
- 非:! 或者not
- 例如:src or dst portrange 6000-8000 && tcp or ip6
限定词
Type:设置数字或者名称所指示类型
- host、port
- net、设定子网、net 192.168.0.0 mask 255.255.255.0 等价于 net 192.168.0.0/24
- portrange,设置端口范围,例如 portrange 6000-8000
Dir:设置网络注入方向
- src、dst、src or dst、src and dst
- ra、ta、addr1、addr2、addr3、addr4(仅对IEEE 802.11 Wireless LAN 有效)
Proto:指定协议类型
- ether、fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp、udp、icmp、igmp、igrp、pim、ah、esp、vrrp
其他
- gateway:指明网关IP地址,等价于ether host ehost and not host host
- broadcast:广播报文,例如 enther broadcast 或者 ip broadcast
- multicast: 多播报文,例如 ip multicast或者ip6 multicast
- less、greater:小于或者大于
基于协议域过滤
-
捕获所有TCP中的RST报文
- tcp[13]&4==4
-
抓取HTTP GET报文
-
Port 80 and tcp[((tcp[12:1]&0xf0)>>2):4]=0x47455420
-
注意:47455420是ASCII码的16进制,表示"GET"
-
TCP报头可能不止20个字节,data offset提示承载数据的偏移,但它以4字节为单位
-
7.Wireshark的显示过滤器
显示过滤器的过滤属性
-
任何在报文细节面板中解析出的字段名,都可以作为过滤属性
-
在视图->内部->支持的协议面板里,可以看到各字段名对应的属性名
-
例如,在报文细节面板中TCP协议头中的Source Port,对应着过滤属性为tcp.srcport
-
-
过滤值比较符号
过滤值类型
- Unsigned integer:无符号整型,例如ip.len le 1500
- Signed integer:有符号整型
- Boolean:布尔值,例如tcp.flags.syn
- Ethernet address:以:、-或者.分隔的6字节地址,例如eth.dst == ff:ff:ff:ff:ff:ff
- IPv4 address:例如ip.addr == 92.169.0.1
- IPv6 address:例如 ipv6.addr == ::1
- Text string:例如http.request.uri = = “https://www.wireshark.org/”
多个表达式间的组合
其他常用操作符
可用函数
显示过滤器的可视化对话框
8.写在最后
本篇博客主要介绍了Wireshark的简单的使用,以及我们如何通过DNS协议解析域名?后面的博客我们会继续介绍WebSocket的相关的协议,还有就是HTTP2协议,以及TLS/SSL协议,TCP协议,IP协议。