• WireShark抓包工具使用


    WireShark是一款网络封包分析软件,它抓取网络封包,并尽可能显示出最详细的封包资料。

    wireshark的准备工作

    安装wireshark

    sudo apt-get install wireshark

    在non-root下使用wireshark

    由于sudo下使用wireshark太过aggressive,所有需要解决wireshark普通权限下访问网卡的问题。

    1.添加wireshark用户组

    sudo groupadd wireshark

    2.将dumpcap更改为wireshark用户组

    sudo chgrp wireshark /usr/bin/dumpcap

    3.让wireshark用户组有root权限使用dumpcap

    sudo chmod 4755 /usr/bin/dumpcap

    4.将需要使用的用户名yourname加入wireshark用户组

    sudo gpasswd -a yourname wireshark

    参考资料:http://www.cnblogs.com/ddtpower/archive/2012/12/20/ubuntu_wireshark_dumpcap.html

    开始抓包

    打开wireshark软件:

    wireshark &

    image

    过滤器设置

    wireshark过滤语法总结:http://blog.csdn.net/cumirror/article/details/7054496

    wireshark有两种顾虑器,捕捉过滤器(Capture Filters)和显示过滤器(Dispaly Filters)。

    配置带抓取网络接口,Capture Filter设置为只抓取主机和10.41.71.8之间的网络封包:

    host 10.41.70.8
    等价于src or dst host 10.41.70.8

    image

    显示过滤器设置:

    image

    分析抓取的网封包

    参考资料:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html,感谢TankXiao。

    从上到下依次是:

    1. Main Toolbar(工具栏),一系列工具按钮。

    2. Display Filter(显示过滤器),  用于过滤

    3. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

    4. Packet Details Pane(封包详细信息), 显示封包中的字段

    5. Dissector Pane(16进制数据)

    6. Miscellanous(地址栏,杂项)

    image

    封包详细信息与OSI对应

    TCP三次握手

    TCP包和协议中TCP报文格式对应:

    TCP三次握手:

    打开wireshark, 打开浏览器输入 http://www.cnblogs.com/tankxiao

    在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream",

    这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

    图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

    第一次握手数据包

    客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图

    第二次握手的数据包

    服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图

    第三次握手的数据包

    客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

    就这样通过了TCP三次握手,建立了连接。

    彩蛋

    如果协议使用的端口号不规范,比如https使用34128怎么办?

    参考文档:《协议的分用以及wireshark对协议的识别

    在TCP/IP详解一书中谈到了协议的分用,书中的图1-8如上。图1-8可以很好地解释在互联网的分层结构中,底层的协议头是如何承载上层的不同的协议的。对于链路层而言,以太网首部中有不同帧类型用于表示以太网帧内的数据。在IP数据包的首部,也有专门的8位协议类型,用于表示IP包中的上层协议类型,网址http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml中给出了IETF规定的详细的协议类型号,其中TCP是6,UDP是17,ICMP是1。不过在传输层的两个常用协议TCP和UDP首部中,并没有协议类型的字段,TCP和UDP包内的应用程协议的类型依靠的是TCP和UDP包首部的端口号来进行区分。对于一些常用的应用层协议IETF都规定了相应的熟知端口号,在网址http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml中有一份详细的列表。TCP和UDP报头的16比特端口号给应用层协议的设计提供了足够的设计空间(65535个)和足够的灵活度。

    查询网址可知https的端口号对应:

    image

    理解了协议的分用之后,就比较容易理解wireshark是如何将数据包识别和展示出来的了。wireshark的工作原理的简单介绍可以参见http://gaia.cs.umass.edu/wireshark-labs/Wireshark_Intro_v6.0.pdf。概括地说,就是wireshark是一款建立在已有的包捕捉工具上的一款数据包分析软件。常见的抓包的库有libpcap、jpcap、winpcap等等,这些抓包工具将主机的网卡设置为混杂模式,从而可以捕捉到目的MAC不是主机网卡的数据包。而wireshark基于这些库捕捉到的包进行识别和分析,将包中内容按照协议类型和层次展示出来。

      不过对于那些不采用熟知端口传输的应用层协议而言,wireshark就有可能出现无法识别的情况,这也是我最近遇到的一个场景。我在抓包的时候遇见了wireshark protocol一栏显示enttec,Info 一栏显示 unknown的情况。经过一段时间的分析,可以确定wireshark显示enttec和unknown的原因是TCP采用了非熟知端口发送HTTP报文。不过wireshark在设计中已经考虑到这样一种情况的出现,可以针对非熟知端口的已知应用层协议设置相应的解码方式。具体的方法是:选中无法识别的报文->右键单击->Decode As->选择相应的应用层协议。

    WireShark识别应用层协议的依据是端口号!!!

    背景:使用20001端口进行https握手和传输。

    抓包后看到的结果是这样的,显示的都是TCP。这种应该就是没有找到对应的应用层协议。但是下面的明明应该是https握手和传输。可以看出此时进行传输的端口号是34128.

    image

    在34124端口数据上右击,选择Decode As…->Transport,将34128<->80之间的TCP传输当成SSL协议。

    image

    再看看wireshark显示,可以看到相关的TLSv1.2的握手和传输都已经正确显示了。

    image

     

     

    参考资料

    Wireshark基本介绍和学习TCP三次握手:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

    Fiddler-http检测调试工具:http://www.cnblogs.com/dasn/p/3716726.html

    WEB/HTTP 调试利器 Fiddler 的一些技巧分享:http://www.open-open.com/lib/view/open1375954572906.html

    Http调试工具-Fiddler使用指引:https://my.oschina.net/u/1388024/blog/186886

    用Wireshark简单分析HTTPS传输过程-抓包过程:http://www.myhack58.com/Article/60/63/2014/51156.htm

    利用Fiddler对Android https请求进行监测:http://www.linuxidc.com/Linux/2014-02/97024.htm

    为什么Wireshark无法解密HTTPS数据:https://www.centos.bz/2015/12/why-wireshark-can-not-decrypt-https-data/

  • 相关阅读:
    ResultSet取结果集多少条记录方法及分页概要
    java ResultSet 结果集处理 createStatement() 里参数的意义(第一弹)
    提高mysql千万级数据SQL的查询优化30条总结
    WEBGL学习【十三】鼠标点击立方体改变颜色的原理与实现
    WEBGL学习【十二】鼠标操作场景
    WEBGL学习【十一】光照模型
    WEBGL学习【十】运动模型
    WEBGL学习【九】立方体贴不同的纹理
    WEBGL学习【八】模型视图投影矩阵
    WEBGL学习【七】画布绘图
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/6372214.html
Copyright © 2020-2023  润新知