【网络学习笔记】使用Wireshark抓取HTTP报文

前言

最近在学习计算机网络知识,学习过程中使用抓包工具Wireshark抓取网络数据包,来辅助理解网络协议。

Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

目录

文章目录

基本使用

下载地址https://www.wireshark.org/

支持系统:Windows、macOS

基本使用
基本使用
主要功能区

主要功能区:

  1. 显示过滤器
  2. 抓获的封包列表
  3. 封包详细信息
  4. 封包16进制数据

抓取HTTP报文

抓取http报文-目录

1.开启捕捉任务

2.浏览器访问http://www.lizhengyang.cn/

3.停止捕捉任务

4.设置显示过滤条件

开启捕捉任务后,封包列表可能会出现很多无用的数据包,设置显示过滤器过滤掉冗余数据。

如下图,在显示过滤器中输入:http and ip.addr == 39.107.127.222 (IP地址替换为目标网站的IP)

按回车键,只剩下两个数据包:请求包、响应包。

设置过滤条件

5.查看HTTP报文

在任意数据包上点击右键:追踪流-->HTTP流

弹出窗口就是完整的HTTP报文,红色字体为HTTP请求报文,蓝色字体为HTTP响应报文

查看HTTP报文

过滤器

如果不设置过滤器,会抓取很多杂乱冗余的数据,以至于很难找到自己需要的部分。使用过滤器可以帮助我们精准找到需要的信息。

过滤器分两种:

  • 捕捉过滤器。只捕捉符合过滤规则的封包,其它数据不会存在封包列表中。在捕捉前设置。
  • 显示过滤器。用来过滤抓取后的结果,可以随意更改过滤规则。

注意:两种过滤器的规则语法是不一样的,不要混淆。

捕捉过滤器

捕捉过滤器的语法与其它使用Lipcap(Linux)或者Winpcap(Windows)库开发的软件一样,比如著名的TCPdump。捕捉过滤器必须在开始捕捉前设置完毕,这一点跟显示过滤器是不同的。

设置捕捉过滤器的步骤是:
- 工具栏 -> 捕捉 -> 选项
- WLAN -> 捕捉过滤器中输入规则
- 点击开始(Start)进行捕捉

设置捕捉过滤器

过滤公式

语法: Protocol Direction Host(s) Value Logical Operations Other expression
例子: tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128

Protocol(协议):

可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp

如果没有特别指明是什么协议,则默认使用所有支持的协议。

Direction(方向):

可能的值: src, dst, src and dst, src or dst

如果没有特别指明来源或目的地,则默认使用 "src or dst" 作为关键字。

例如,host 10.2.2.2src or dst host 10.2.2.2是一样的

Host(s)

可能的值: net, port, host, portrange

如果没有指定此值,则默认使用"host"关键字。

例如,src 10.1.1.1src host 10.1.1.1`相同。

Logical Operations(逻辑运算):

可能的值:not, and, or

否(not)具有最高的优先级。或(or)和与(and)具有相同的优先级,运算时从左至右进行。

例如

  • not tcp port 3128 and tcp port 23(not tcp port 3128) and tcp port23相同。
  • not tcp port 3128 and tcp port 23not (tcp port 3128 and tcp port23)不同。

案例

//显示目的TCP端口为3128的封包。
tcp dst port 3128

//显示来源IP地址为10.1.1.1的封包。
ip src host 10.1.1.1

//显示目的或来源IP地址为10.1.2.3的封包。
host 10.1.2.3

//显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
src portrange 2000-2500

//显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
not imcp

//显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
src host 10.7.2.12 and not dst net 10.200.0.0/16

//显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包。
(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

//显示目的TCP端口为3128的封包。
tcp dst port 3128`

//显示来源IP地址为10.1.1.1的封包。
ip src host 10.1.1.1

//显示目的或来源IP地址为10.1.2.3的封包。
host 10.1.2.3

//显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
src portrange 2000-2500

//显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
not imcp

//显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
src host 10.7.2.12 and not dst net 10.200.0.0/16

显示过滤器

刚才抓取HTTP报文使用的就是显示过滤器。

过滤公式

语法: Protocol . String 1 . String 2 Comparisonoperator Value LogicalOperations Otherexpression
例子: http request uri == "/index" xor ip.dst != 10.4.5.6

看到这里有是不是有点蒙,每个符号都认识,但为啥要这样组合呢?

不要怕,这个公式不需要记住,熟悉一下公式的结构即可,因为Wireshark中可已通过表达式工具来动态生成规则。

动态生成过滤规则

点击“表达式”

表达式

弹出“显示过滤器表达式”窗口

滤器表达式窗口

上图圈住的五个模块对应着五个步骤:

第一步:搜索网络协议

第二步:选择协议(Protocol)

可以使用tcp、ip、udp等位于OSI模型第2至7层的协议。点击协议列表,可以选择需要参与过滤的协议。

举例:http.request.uri (http请求中的uri)

其中http为协议,request.uri是协议的子类,通过 .连接。Wireshark的官网提供了对各种 协议以及它们子类的说明

第三步:选择比较运算符(Comparison operators)

英文写法: C语言写法: 含义:
eq == 等于
ne != 不等于
gt > 大于
lt < 小于
ge >= 大于等于
le <= 小于等于
contains contains 包含
matches matches 正则表达式匹配
in in 在指定集中

第四步:选择比较的值

第五步:校验规则是否合法

以上的每一步操作都会在下方输入框自动生成过滤规则,合法的规则显示绿色背景,不合法的规则显示红色背景。

校验完成点击ok,显示过滤器规则设置完成。

多个过滤条件

若需要通过过个条件筛选数据,比如:只显示80端口和8080端口的封包。就要用到逻辑运算符(Logical expressions),把多个条件连接。

英文写法: C语言写法: 含义:
and && 逻辑与
or || 逻辑或
xor ^^ 逻辑异或
not ! 逻辑非

被程序员们熟知的逻辑异或是一种排除性的或。当其被用在过滤器的两个条件之间时,只有当且仅当其中的一个条件满足时,这样的结果才会被显示在屏幕上。
举个例子:

//只有当目的TCP端口为80或者来源于端口1025(但又不能同时满足这两点)时,这样的封包才会被显示。
tcp.dstport 80 xor tcp.dstport 1025

案例

//显示HTTP或UDP议封包
 http || udp

//显示来源或目的IP地址为10.1.1.1的封包
ip.addr == 10.1.1.1

//显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。换句话说,显示的封包将会为:
//来源IP:除了10.1.2.3以外任意;目的IP:任意
//以及
//来源IP:任意;目的IP:除了10.4.5.6以外任意
`ip.src != 10.1.2.3 or ip.dst != 10.4.5.6` 

//显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。换句话说,显示的封包将会为:来源IP:除了10.1.2.3以外任意;同时须满足,目的IP:除了10.4.5.6以外任意 
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6

//显示来源或目的TCP端口号为25的封包
tcp.port == 25

//显示目的TCP端口号为25的封包 
tcp.dstport == 25

//显示包含TCP标志的封包
tcp.flags    

//显示包含TCP SYN标志的封包
tcp.flags.syn == 0x02`

//显示HTPP域名中包含'baidu'的封包
http.host contains "baidu"

结束语

至此,Wireshark的基本功能和使用方法已经介绍完了。如果有错误的地方恳请留言指出。

参考资料

https://wiki.wireshark.org/DisplayFilters

https://wiki.wireshark.org/CaptureFilters

http://openmaniak.com/cn/wireshark.php

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容