文章目录
Wireshark 是一款功能强大的抓包工具,可以让我们了解网络传输的细节,比如用于了解经典的
三次握手
、四次握手
,化抽象为具体。本文将介绍 Wireshark的简单使用。
直通车
安装 Wireshark
Wireshark 可以做什么?
Wireshark 可以截取指定 host、协议 的信息流,并且可以按照协议类型、IP、端口、不同编码格式对信息流进行查看,而且可以追踪某一个信息流。可以讲获取的信息流保存以便于以后再次查看。
Wireshark 的操作步骤
- 打开 Wireshark
选择 Wireshark Legacy
一个典型的命令
ip.dst == 192.168.1.1 and tcp.port==80 and tcp.seq==0
选择监听 127.0.0.1
在Wireshark的主界面中,选择“Interface”(接口)下拉列表中的lo或loopback接口。如果你看不到这些选项,可能是因为Wireshark没有被配置为可以访问环回接口。
选择监听的网卡
这个要看你计算机的联网方式,比如是通过有线网卡或者无线网卡,这里我使用无线网卡。如果你想监听多个网卡,则点击
Interface List
设置 Capture Filter,设置捕获条件
在选择好要监听的网卡之后,我们有两种方式开始捕获网络上的信息流,如上图所示,一种是
Start
,一种是Capture Options
。前者会直接开始捕获信息流,你可以先点进去体验一下,在不启用任何过滤措施的情况下,信息显得有些乱。后者可以对捕获的信息有一个基本设置,点击确定之后,进入的页面和前者一样,然后可以对捕获的结果做进一步的过滤。
点击 Capture Options
Mac:
或者
Windows:
你可以直接在后面输入过滤命令,如果格式正确输入框将会变成绿色,你也可以使用后面的按钮
Compile selected BPFs
,会得到一些有效信息,这个按钮不是必须的。
如果你还不熟悉命令,可以点击Capture Filter
按钮,从中选择一个作为模板。比如下图,捕获过滤条件是ip地址 192.0.2.1 的信息流(192.0.2.1 发出的或者接收到的信息流)
Windows:
设置 Display Filters (对捕获到的数据包进行筛选)
在捕获选项对话框中,你可以找到一个叫做“Capture Filter”的设置。然而,“Capture Filter”是用来限制哪些数据包会被实际捕获,而“Display Filter”是在捕获的数据包中筛选出你想要查看的部分。
虽然你不能直接在“Capture Filter”中使用http,因为这不适用于libpcap语法,但是你可以使用更具体的过滤条件来达到类似的效果,例如tcp port 80或tcp port 443来分别捕获HTTP或HTTPS流量。
然而,由于HTTP可以在任意端口上运行,最全面的方法还是使用“Display Filter”中的http过滤器。
Mac:
在捕获的过程中,你可以直接在Wireshark的顶部找到一个名为“Display Filter”的文本框。
在这个文本框中输入http作为过滤条件,然后按Enter键或者点击旁边的放大镜图标应用过滤器。
点击 Start 开始捕获
点击 Start 将进入到下面的页面
1 是刷新的作用,他左边的红色按钮可以终止捕获;
2是对捕获结果进行二次过滤;
3是捕获到的具体的一条信息流,或者你也可以叫做报文,尽管这个名称并不适合于所有协议。
设置 Filter 并点击确认
比如我想知道来自ip 192.168.1.106 的访问,或者目标地址为 192.168.1.106 的访问,则需要在2添加过滤命令。
ip.src192.168.1.106 会对捕获结果进行再次过滤,将发起请求ip地址为 192.168.1.106 的信息流留下
ip.dst192.168.1.106 会对捕获结果进行再次过滤,将请求访问目标ip地址为 192.168.1.106 的信息流留下
会有自动提示哦,写完命令如果正确输入框会变为绿色,然后按一下标注为2 的按钮更新一下
- Mac 版的写 ip.dst == 有提示点击 ->
跟踪某一条访问
网络访问有时候存在重试的情况,这对于我们分析信息流来说是一种干扰,所以我们可以选择跟踪一个连续的信息流,而不是多个。右键 点击 Foller 协议名字(如TCP) Stream
保存新文件和打开已保存文件
关闭窗口会提示你保存
至于打开新文件,停止当前捕获,然后左上角 File->open 你保存的文件即可
标记和含义
"eth" Ethernet addresses
"fc" Fibre Channel addresses
"fddi" FDDI addresses
"ip" IPv4 addresses
"ipv6" IPv6 addresses
"ipx" IPX addresses
"tcp" TCP/IP socket pairs Both IPv4 and IPv6 are supported
"tr" Token Ring addresses
"udp" UDP/IP socket pairs Both IPv4 and IPv6 are supported
留个悬念-网络分层
下图对应 网络协议分层,含义是>>>
参考 https://blog.csdn.net/hguisu/article/details/12521597
https://blog.csdn.net/sd4567855/article/details/81152050
常用的过滤命令
- ip.addr==127.0.0.1 ,客户端IPv4 的地址为 127.0.0.1
- ip.dst==127.0.0.1,服务端的IPv4 地址为 127.0.0.1
- and 或者 && ,并且,比如 ip.addr127.0.0.1 and ip.dst127.0.0.1,表示客户端和服务端的IPv4 地址都是 127.0.0.1
- tcp.seq==0,表示,TCP协议的seq值为0
- tcp.ack==1,表示 TCP 协议的ack值为1
- or 或者 ||,或者,比如 ip.addr127.0.0.1 || ip.addr192.168.1.10
- (),括号,可以使用括号,比如 (ip.addr127.0.0.1 and ip.dst == 192.168.1.10) || (ip.addr 192.168.1.10 and ip.dst == 127.0.0.1)
- tls,表示tls协议,用于捕获https的不二选择
- tcp,限定为 tcp 协议
- dns.qry.name == img.alicdn.com ,域名为img.alicdn.com
- tcp dst port 3128,显示目的TCP端口为3128的封包。
- ip src host 10.1.1.1 显示来源IP地址为10.1.1.1的封包。
- host 10.1.2.3 显示目的或来源IP地址为10.1.2.3的封包。
- src portrange 2000-2500 显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
- not imcp 显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
- src host 10.7.2.12 and not dst net 10.200.0.0/16 显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
- (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包。
- http.host==magentonotes.com http.host contains xxx.com
过滤经过指定域名的http数据包,这里的host值不一定是请求中的域名 - http.response.code==302 过滤http响应状态码为302的数据包
- http.response==1 过滤所有的http响应包
- http.request==1 过滤所有的http请求,貌似也可以使用http.request
- http.request.method==POST wireshark过滤所有请求方式为POST的http请求包,注意POST为大写
- http.cookie contains guid 过滤含有指定cookie的http数据包
- http.request.uri==”/online/setpoint” 过滤请求的uri,取值是域名后的部分
- http.request.full_uri==” http://task.browser.360.cn/online/setpoint”
过滤含域名的整个url则需要使用http.request.full_uri - http.server contains “nginx”
过滤http头中server字段含有nginx字符的数据包 - http.content_type == “text/html”
过滤content_type是text/html的http响应、post包,即根据文件类型过滤http数据包 - http.content_encoding == “gzip”
过滤content_encoding是gzip的http包 - http.transfer_encoding == “chunked”
根据transfer_encoding过滤 - http.content_length == 279
http.content_length_header == “279″
根据content_length的数值过滤 - http.server
过滤所有含有http头中含有server字段的数据包 - http.request.version == “HTTP/1.1″
过滤HTTP/1.1版本的http包,包括请求和响应 - http.response.phrase == “OK”
过滤http响应中的phrase
参考链接
[1].http://blog.jobbole.com/70907/
[2].https://blog.csdn.net/howeverpf/article/details/40743705
[3].https://blog.csdn.net/hzhsan/article/details/43453251
[4].https://jingyan.baidu.com/article/b87fe19e7603b75218356825.html