使用Wireshark分析网络数据
一、
Wireshark中查看TCP的三次握手和四次挥手:
上面的数据发送和接收两部分的info提示都是 [TCP segment of a reassembled PDU],网上的解释是TCP分片的提示,但我只是发送和接收了十几个字节数据,远未超过MSS值。后来换了服务器模式(原来用的是简单阻塞模式的TCP socket服务器模型,现在换成了异步完成端口模型),发现数据发送和接收两部分的info提示变成了[PSH, ACK],如下图,暂时还不知道为什么会有这种区别。
从上图可以看到:
1、刚开始双方数据的序号都为0(seq=0),然后会随着发送数据的增长而增长,因为序号就是本数据报的第一个数据字节在整个发送数据流中的偏移量。而SYN和FIN包虽然一般不携带数据但他们占一个字节的数据流空间,ACK包则不占用数据流空间,所以在发送SYN/FIN/SYN+ACK/FIN+ACK包后seq会加1,而发送ACK包后seq不变。一般情况下报文的确认号(ack)会与下次收到的对方发来数据的序号(seq)相同,除非发生了乱序。
2、ACK包是可以和SYN、PSH、FIN和并发送以节省时间的(TCP帧头中对应标志位置1),比如三次握手中的SYN+ACK,四次挥手中的FIN+ACK,发送数据中的PSH+ACK。注意这里的第三次挥手也为FIN+ACK,而这里我没看出前面有什么数据要进行确认,还有第一次发送数据的时候也是这样,多了一个ACK标志,为PSH+ACK,为什么会这样呢?我个人猜测可能是这样做就不用判断前面还有没有数据要确认:对于数据传输报文和关闭连接报文不管前面有没有要确认的数据都将ACK标志置1,方便快捷,也不会带来什么问题。
PSH强调的是尽快将数据交付给上层,TCP接收方在收到PSH置位的数据报文后会立即将缓冲区中数据发送给上层,而如果TCP接收方收到的是PSH没有置位的报文,则会等待缓冲区满才将缓冲区中数据发送给上层。那么什么时候PSH位会被置1呢?经我测试发现,如果不是分片数据或者是最后一个分片数据,PSH会被置位,标志位为PSH+ACK,如果是分片数据但不是最后一个分片数据,PSH不会被置位,标志位只有ACK。
3、报文信息中的Len表示携带数据的大小;Win是本端"接收窗口"的大小,用来告知对端,从而控制对端"发送窗口"的大小,以达到控制传输流量。
4、MSS称为最大分段大小,在上图中可以看到在双方连接的时候会发送自身MSS值,而这个MSS值是根据本机MTU计算而来的:MSS = MTU - IP报文头的20bytes - TCP报文头的20bytes,TCP协议会选择双方较小的mss作为TCP分片的大小。因为以太网MTU是1500或者大于1500,所以用Wareshark查看TCP三次握手中双方发送的MSS值都为1460。
二、
过滤器分为两种,一种是捕捉过滤器,一种是显示过滤器。下面是Wireshark中一些常用的显示过滤器设置:
过滤IP地址、源IP地址、目的IP地址:ip.addr == 192.168.0.38、ip.src==1.1.1.1、ip.dst==192.168.101.8。
标识过滤:显示包含TCP SYN标志的封包:tcp.flags.syn == 0x02`。
端口过滤、目的端口过滤、源端口过滤:tcp.port==6000、tcp.dstport==6000、tcp.srcport==6000。
协议过滤(直接输入协议名):tcp、http。
使用连接符and(&&)、or(||):ip.src==1.1.1.1 and tcp.port==6000、ip.src==1.1.1.1 or ip.src==2.2.2.2。
http模式过滤,如过滤get方法:http.request.method=="GET";过滤整个URL:http.request.full_uri == "http://www.sac.net.cn/tzgg/";过滤所有http请求:http.request==1;过滤所有http响应:http.response==1;过滤URL中包含指定内容:http.request.full_uri contains "www.sac.net";过滤域名:http.host == "www.sac.net.cn",http.host contains "sac";
三、
Wireshark中TCP常见错误状态:
TCP Previous segment not captured 乱序包
TCP Retransmission 重传包
TCP fast retransmission 快速重传包
TCP Dup ACK 报文丢失ACK
使用Wireshark分析网络数据的更多相关文章
- 用python探索和分析网络数据
Edited by Markdown Refered from: John Ladd, Jessica Otis, Christopher N. Warren, and Scott Weingart, ...
- wireshark分析https数据包解密前后的特点
wireshark分析https数据包解密前后的特点 (一)https解密前 1.协议种类:2种(1)TCP(第四层,传输层)(2)SSL/TLS(第五层,应用层,加解密)2.应用层数据所在数据包特点 ...
- wireshark 分析过滤数据
1.过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1. ...
- Android 性能优化(6)网络优化( 2) Analyzing Network Traffic Data:分析网络数据
Analyzing Network Traffic Data 1.This lesson teaches you to Analyze App Network Traffic Analyze Netw ...
- 如何用 Python 和 API 收集与分析网络数据?
摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...
- Wireshark分析网络慢
tcp.analysis.retransmission tcp.flags.reset==1
- LINUX下的远端主机登入 校园网络注册 网络数据包转发和捕获
第一部分:LINUX 下的远端主机登入和校园网注册 校园网内目的主机远程管理登入程序 本程序为校园网内远程登入,管理功能,该程序分服务器端和客户端两部分:服务器端为remote_server_udp. ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
随机推荐
- c++实现循环队列
#include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; ;// ...
- jquery实现元素高度变化页面变化
试了几种方法包括有资料说的h5新特性,都没能满足我的需求.我的需求如下: 元素高度是动态可变的,比如可拖动teatarea元素 最后用到了指针监听事件解决了 @参考文档 $(document).mou ...
- swift - 3D 视图,截图,关键字搜索
1.xib 上的 3D效果 按钮 2. import UIKit //1.导入框架 import MapKit class ViewController: UIViewController { @IB ...
- AngularJS——第6章 作用域
第6章 作用域 在AngularJS中使用过滤器格式化展示数据,在"{{}}"中使用"|"来调用过滤器,使用":"传递参数. 6.1 内置过 ...
- Python 安装pyautogui
在Python中使用PyAutoGui模拟键盘和鼠标操作 一.系统环境 操作系统:win10 64位 Python版本:Python 3.7.0 二.安装参考 1.使用pip进行安装,pip inst ...
- iOS 集成极光推送
最近极光推送更新到V3版本之后,推送又不成功!配合服务器联调了半天,发现是服务器环境配置有问题. 想着就把极光推送的步骤给记录下来. 一.配置push证书 这个可以到极光文档里写,很详细 二.导入必要 ...
- Socket(转自 阿里云)
摘要:Socket-C/S Socket又称"套接字",应用程序 通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. ...
- tiny4412 启动方式
1.iROM(BL0):是指Exynos4412的iROM中固化的启动代码,其作用是初始化系统时钟,设置看门狗,初始化堆和栈,加载8kb的bl1到Exynos4412的一个64kb大小内部sram(I ...
- python pyMysql 自定义异常 函数重载
# encoding='utf8'# auth:yanxiatingyu#2018.7.24 import pymysql __all__ = ['Mymysql'] class MyExcept(E ...
- python 面向对象编程 之 上下文管理协议
with open('path', 'r' ,encoding='utf-8') as f: 代码块 上述就叫做上线文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 ...