精华内容
下载资源
问答
  • 数据包解析

    2020-04-06 20:32:33
    数据包解析数据包理解七层协议详解OSI七层协议中每一层的特征数据包解析如何改变文本的样式TCP数据包结构: 数据包理解 从专业的角度来说,(网络协议)OSI就是一个开放的通信系统互联参考模型,也是一个定义的很好的...

    数据包理解

    从专业的角度来说,(网络协议)OSI就是一个开放的通信系统互联参考模型,也是一个定义的很好的协议规范。OSI模型有7层结构,每层都可以有几个子层。OSI的7层从下到上分别是7-应用层、6-表示层、5-会话层、4-传输层、3-网络层、2-数据链路层、1-物理层。

    七层协议详解

    物理层:是参考模型的最低层。该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。主要跟功能是:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。
    数据链路层:四参考模型的第二层。主要功能是:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
    网络层:是参考模型的第三层。主要功能是:为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。
    传输层:是参考模型的第四层。主要功能是:向用户提供可靠地端到端服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。传输层向高层屏蔽了下层数据通信的细节。因此,它是计算机通信体系结构中关键的一层。
    会话层:是参考模型的第五层。主要功能是:负责维扩两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。
    表示层:是参考模型的第六层。主要功能是:用于处理在两个通信系统中交换信息的表示方法,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
    应用层:是参考模型的最高层。主要功能是:为应用软件提供了很多服务,比如文件服务器、数据库服务、电子邮件与其他网络软件服务。

    OSI七层协议中每一层的特征

    第一层:物理层
    机械性能:接口的形状,尺寸的大小,引脚的数目和排列方式等;
    电气性能:接口规定信号的电压、电流、阻抗、波形、速率好平衡特性等;
    工程规范:接口引脚的意义、特性、标准。
    工作方式:确定数据位流的传输方式,如:半双工、全双工等。
    物理层协议:美国电子工业协会(EIA)的RS232/RS422/RS423等;
    国际电报电话咨询委员会(CCITT)的X.25/X.21等;
    物理层的数据单位是位(BIT),典型设备时集线器HUB。
    这主要是和硬件有关,与软件关系不大。
    第二层:链路层
    链路层屏蔽传输介质的物理特征,使数据可靠传送。
    内容包括介质访问控制、连接控制、顺序控制、流量控制、差错控制和仲裁协议等。
    链路层协议有:协议有面向字符的通讯协议(PPP)和面向位的通讯协议(HDLC)。
    仲裁协议:CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、Token Bus、Token Ring
    链路层数据单位是帧,实现对MAC地址的访问,典型设备是交换机SWITCH。
    第三层:网络层
    网络层管理连接方式和路由选择。
    连接方式:虚电路和数据报服务。
    虚电路是面向连接的,数据通讯一次路由,通过会话建立的一条通路。数据报是非连接的,每个数据报都有路由能力。网络层的数据单位是包,使用的是IP地址,典型设备时路由器Router。
    这一层可以进行流量控制,但流量控制更多的是使用第二层或第四层。
    第四层:传输层
    提供端到端的服务,可以实现流量控制、负载均衡。
    传输层信息包括端口、控制字和校验和。
    传输层协议主要是TCP和UDP。
    传输层位于OSI的第四层,这层使用的设备时主机本身。
    第五层:会话层
    会话层主要内容时通过 绘画进行身份验证、绘画管理和确定通讯方式。一旦建立连接,会话层的任务就是管理会话。
    第六层:表示层
    表示层主要是解释通讯数据的意义,如代码转换、格式变换等,使不同的终端可以表示。
    还包括加密与解密、压缩与解压等。
    第七层:应用层
    应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序,比如www、FTP、DNS、POP3和SMTP等都是应用层服务。
    数据再发送时是数据从应用层至物理层的一个大包的过程,接收时是数据从物理层至应用层的一个解包过程。
    从功能角度可以分为三组:1/2层解决网络通信问题,3/4层解决传输问题,5/6/7层处理对应用进程的访问。
    从控制角度可分为二组:1/2/3层是通信子网,4/5/6/7是主机控制层。

    数据包解析

    在这里插入图片描述

    如何改变文本的样式

    如图,一个刻度表示1个二进制位(比特)。

    1-1.版本号4位,表示版本号号,眼下最广泛的是4=B1000,即常说的IPv4;相信IPv6以后会广泛应用,它能给世界上每一个纽扣都分配

       一个IP地址。
    

    1-2.头长4位,数据包头部长度。它表示数据包头部包含多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

    1-3.服务类型,包含8个二进制位,每一个位的意义例如以下:

       过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)
    
       延迟字段:1位,取值:0(正常)、1(期特低的延迟)
    
       流量字段:1位,取值:0(正常)、1(期特高的流量)
    
       可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
    
       成本字段:1位,取值:0(正常)、1(期特最小成本)
    
       保留字段:1位 ,未使用
    

    1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最大仅仅能是65535,及64KB。

    2-1.重组标识16位,发送主机赋予的标识,以便接收方进行分片重组。

    2-2.标志3位,他们各自的意义例如以下:

       保留段位(2):1位,未使用
    
       不分段位(1):1位,取值:0(同意数据报分段)、1(数据报不能分段)
    
       很多其它段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有很多其它的包)
    

    2-3.段偏移量13位,与很多其它段位组合,帮助接收方组合分段的报文,以字节为单位。

    3-1.生存时间8位,常常ping命令看到的TTL(Time To Live)就是这个,每经过一个路由器,该值就减一,到零丢弃。

    3-2.协议代码8位,表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

    3-3.头检验和16位,是IPv4数据包头部的校验和。

    4-1.源始地址,32位4字节,我们常看到的IP是将每一个字节用点(.)分开,如此而已。

    5-1.目的地址,32位,同上。

    6-1.可选选项,主要是给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉,普联(TP_LINK)的TL-ER5110路由就能这么做。

    7-1.用户数据。
    强调文本 强调文本

    TCP数据包结构:

    在这里插入图片描述

    1-1.源始port16位,范围当然是0-65535啦。

    1-2.目的port,同上。

    2-1.数据序号32位,TCP为发送的每一个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。

    3-1.确认序号32位,为了安全,TCP告诉接受者希望他下次接到数据包的第一个字节的序号。

    4-1.偏移4位,类似IP,表明数据距包头有多少个32位。

    4-2.保留6位,未使用,应置零。

    4-3.紧急比特URG—当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

    4-3.确认比特ACK—仅仅有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。參考TCP三次握手

    4-4.复位比特RST(Reset) —当RST=1时,表明TCP连接中出现严重差错(如因为主机崩溃或其它原因),必须释放连接,然后再又一次

       建立运输连接。參考TCP三次握手
    

    4-5.同步比特SYN—同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。參考TCP三次握手

    4-6.终止比特FIN(FINal)—用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完成,并要求释放运输连接。

    4-7.窗体字段16位,窗体字段用来控制对方发送的数据量,单位为字节。TCP连接的一端依据设置的缓存空间大小确定自己的接收窗体

       大小,然后通知对方以确定对方的发送窗体的上限。
    

    5-1.包校验和16位,包含首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

    5-2.紧急指针16位,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

    6-1.可选选项24位,类似IP,是可选选项。

    6-2.填充8位,使选项凑足32位。

    7-1.用户数据……

    能够看出,每一个IP包至少要20字节的头部长度,这些与下载内容无关,加上眼下多数传输,包含http协议(就是IE直接下载),都是基于

    TCP协议的,所以IP包裹还要从用户数据中扣除20字节的TCP包头,这里已经是40字节,加上其它程序的连接,状态确认等等包裹,因

    而算出来要比理论值要小。

    另外网络环境(包含稳定因素和传输节点的转发率)也是影响下载速度的重要原因……

    python链接:https://www.cnblogs.com/baihualin/p/10730513.html
    转自:https://baijiahao.baidu.com/s?id=1623342279899809678&wfr=spider&for=pc
    转自:https://blog.csdn.net/qq_36607836/article/details/88627956

    展开全文
  • UDP数据包解析解析UDP数据包

    热门讨论 2009-12-11 13:06:11
    UDP数据包解析解析UDP数据包,可以用C#实现UDP数据包的解析
  • GPS数据包格式及数据包解析

    万次阅读 2018-06-16 18:51:55
    GPS数据包解析GPS数据包解析目的GPS数据类型及格式数据格式数据解释解析代码结构体定义GPRMC解析函数GPGGA解析函数测试样例输出 gps数据包格式 gps数据解析 车联网目的任务很简单就是将从串口获取的GPS数据包提取...

    GPS数据包解析

     


     

     gps数据包格式 gps数据解析 车联网

    目的

    任务很简单就是将从串口获取的GPS数据包提取你需要的gps数据信息,过滤掉不用的数据即可.

    GPS数据类型及格式

    GPS数据信息类型有下面几类:

    类别描述
    GPGSV可见卫星信息
    GPRMC推荐最小定位信息
    GPVTG地面速度信息
    GPGGAGPS定位信息
    GPGSA当前卫星信息

    数据格式

    网上找的一串数据样例: 
    $GPRMC,092927.000,A,2235.9058,N,11400.0518,E,0.000,74.11,151216,,D*49 
    $GPVTG,74.11,T,,M,0.000,N,0.000,K,D*0B 
    $GPGGA,092927.000,2235.9058,N,11400.0518,E,2,9,1.03,53.1,M,-2.4,M,0.0,0*6B 
    $GPGSA,A,3,29,18,12,25,10,193,32,14,31,,,,1.34,1.03,0.85*31 
    $GPGSV,3,1,12,10,77,192,17,25,59,077,42,32,51,359,39,193,49,157,36*48 
    $GPGSV,3,2,12,31,47,274,25,50,46,122,37,18,45,158,37,14,36,326,18*70 
    $GPGSV,3,3,12,12,24,045,45,26,17,200,18,29,07,128,38,21,02,174,*79

    当然我们不需要全部每个数据都去解释出它的含义,gps当然最重要的就是要知道它的地理位置啦,然后还有就是海拔高度,航速以及时间,找到这些然后提取即可.


    数据解释

    以下数据解释内容转自 : http://www.cnblogs.com/csMapx/archive/2011/11/02/2232663.html

    GPRMC 最小定位信息: 
    数据详解:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh 
      <1> UTC 时间,hhmmss(时分秒)格式 
      <2> 定位状态,A=有效定位,V=无效定位 
      <3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输) 
      <4> 纬度半球N(北半球)或S(南半球) 
      <5>经度dddmm.mmmm(度分)格式(前面的0也将被传输) 
      <6> 经度半球E(东经)或W(西经) 
      <7>地面速率(000.0~999.9节,前面的0也将被传输) 
      <8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输) 
      <9> UTC 日期,ddmmyy(日月年)格式 
      <10>磁偏角(000.0~180.0度,前面的0也将被传输) 
      <11> 磁偏角方向,E(东)或W(西) 
      <12>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

    解析内容: 
    1.时间,这个是格林威治时间,是世界时间(UTC),我们需要把它转换成北京时间(BTC),BTC和UTC差了8个小时,要在这个时间基础上加8个小时。

    1. 定位状态,在接收到有效数据前,这个位是‘V’,后面的数据都为空,接到有效数据后,这个位是‘A’,后面才开始有数据。
    2. 纬度,我们需要把它转换成度分秒的格式,计算方法:如接收到的纬度是:4546.40891 
        4546.40891/100=45.4640891可以直接读出45度, 4546.40891–45*100=46.40891, 可以直接读出46分 
        46.40891–46 =0.40891*60=24.5346读出24秒, 所以纬度是:45度46分24秒。
    3. 南北纬,这个位有两种值‘N’(北纬)和‘S’(南纬)
    4. 经度的计算方法和纬度的计算方法一样
    5. 东西经,这个位有两种值‘E’(东经)和‘W’(西经) 
      7.速率,这个速率值是海里/时,单位是节,要把它转换成千米/时,根据:1海里=1.85公里,把得到的速率乘以1.85。
    6. 航向,指的是偏离正北的角度
    7. 日期,这个日期是准确的,不需要转换

    GPGGA GPS定位数据 
    数据详解:GPGGA:起始引导符及语句格式说明(本句为GPS定位数据); 
      <1> UTC 时间,格式为hhmmss.sss; 
      <2> 纬度,格式为ddmm.mmmm(第一位是零也将传送); 
      <3> 纬度半球,N 或S(北纬或南纬) 
      <4> 经度,格式为dddmm.mmmm(第一位零也将传送); 
      <5> 经度半球,E 或W(东经或西经) 
      <6> 定位质量指示,0=定位无效,1=定位有效; 
      <7>使用卫星数量,从00到12(第一个零也将传送) 
      <8>水平精确度,0.5到99.9 
      <9>天线离海平面的高度,-9999.9到9999.9米M指单位米 
      <10>大地水准面高度,-9999.9到9999.9米M指单位米 
      <11>差分GPS数据期限(RTCMSC-104),最后设立RTCM传送的秒数量 
      <12>差分参考基站标号,从0000到1023(首位0也将传送)。

    解析内容: 
      第9,10 个字段,海平面高度和大地水准面高度,单位是米

    GPVTG 地面速度信息    
    $GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh 
      <1> 以正北为参考基准的地面航向(000~359度,前面的0也将被传输) 
      <2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输) 
      <3> 地面速率(000.0~999.9节,前面的0也将被传输) 
      <4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输) 
      <5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效

    GPGSV 可视卫星状态 
      例:GPGSV,(1),(2),(3),(4),(5),(6),(7),…(4),(5),(6),(7)*hh(CR)(LF)  
    各部分含义为: 
      (1)总的GSV语句电文数;2; 
      (2)当前GSV语句号:1; 
      (3)可视卫星总数:08; 
      (4)PRN码(伪随机噪声码) 也可以认为是卫星编号 
      (5)仰角(00~90度):33度; 
      (6)方位角(000~359度):240度; 
      (7)信噪比(00~99dB):45dB(后面依次为第10,16,17号卫星的信息);   *总和校验域;    hh 总和校验数:78;   (CR)(LF)回车,换行。    
    注:每条语句最多包括四颗卫星的信息,每颗卫星的信息有四个数据项,即: 
        (4)-卫星号,(5)-仰角,(6)-方位角,(7)-信噪比。   

    例: 
      $GPGSV,3,1,10,24,82,023,40,05,62,285,32,01,62,123,00,17,59,229,28*70 
      每条语句包含四部分内容,例如:第一部分是“24,82,023,40”,第二部分是“05,62,285,32”等等。 
    每部分的第一个词为PRC,第二个词为卫星高程,跟着为方位角和信号强度。 
      这个语句里最重要的指标应该算是“信号躁声比(signal-to-noise ratio)”(以下简称为SNR)。 
    这个数值标示卫星信号的接收率。我们知道,卫星是以相同的强度发射信号,但是传播过程中难免会遇到诸如树和墙之类的 障碍物,这样就影响了信号的识别。 
    典型的SNR值在0到50之间,其中50表示非常好的信号。(SNR可以达到99)。

    GPGSA 当前卫星信息 
      例:GPGSA,语句ID,表明该语句为GPS DOP and Active Satellites(GSA)当前卫星信息    
    字段1:定位模式,A=自动手动2D/3D,M=手动2D/3D    
    字段2:定位类型,1=未定位,2=2D定位,3=3D定位    
    字段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)    
    字段15:PDOP综合位置精度因子(0.5 - 99.9)    
    字段16:HDOP水平精度因子(0.5 - 99.9)    
    字段17:VDOP垂直精度因子(0.5 - 99.9)    
    字段18:校验值


    解析代码

    结构体定义

    typedef struct _date{
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
    }date;
    typedef struct _gps_info{
    double latitude; //经度
    double longitude; //纬度
    int latitude_degree; //度
    int latitude_cent; //分
    int latitude_second; //秒
    int longitude_degree; //度
    int longitude_cent; //分
    int longitude_second; //秒
    double speed; //速度
    double direction; //航向
    double height; //海拔高度
    int satellite; //卫星编号
    unsigned char ns;
    unsigned char ew;
    date time;
    }gps_info;

    GPRMC解析函数

    GPRMC包含了几乎我需要的所有信息,位置时间,地面速率等等.


    /**
    * @gprmc_analysis
    *
    * @brief 解析gprmc
    *
    * @param[out] p
    * 输出到p指向的结构体
    * @param[in] str
    * 包含逗号的原始字符串.
    *
    * @return
    * SUCCESS 0
    * FAILURE <0.
    */
    int gprmc_analysis(gps_info *p, unsigned char *str)
    {
    unsigned char buf[32][128];
    int i;
    if(str[5] != 'C') //非GPRMC
    {
    return -1;
    }
    if(str[18] != 'A') //无效数据
    {
    return -2;
    }
    data_filter(buf, str);
    for(i=0; i < 13; i++)
    {
    printf("%s ",buf[i]);
    }
    printf("\n");
    p->ns = buf[4][0];
    p->ew = buf[6][0]; //经度半球
    p->latitude = atof(buf[3]);
    p->longitude = atof(buf[5]); //经纬度
    p->latitude_degree = (int)p->latitude/100; //转换成度分秒
    p->latitude_cent = (int)( p->latitude - p->latitude_degree * 100);
    p->latitude_second = (int)(((p->latitude - p->latitude_degree*100) - p->latitude_cent) * 60);
    p->longitude_degree = (int)p->longitude/100; //转换成度分秒
    p->longitude_cent = (int)( p->longitude - p->longitude_degree * 100);
    p->longitude_second = (int)(((p->longitude - p->longitude_degree*100) - p->longitude_cent) * 60);
    p->speed = atof(buf[7]); //地面速率
    p->speed *= 1.85;
    p->direction = atof(buf[8]); //航向
    p->time.year = (buf[9][4] - '0') * 10 + buf[9][5] - '0'; //时间
    p->time.month = (buf[9][2] - '0') * 10 + buf[9][3] - '0';
    p->time.day = (buf[9][0] - '0') * 10 + buf[9][1] - '0';
    p->time.hour = (buf[1][0] - '0') * 10 + buf[1][1] - '0';
    p->time.minute = (buf[1][2] - '0') * 10 + buf[1][3] - '0';
    p->time.second = (buf[1][4] - '0') * 10 + buf[1][5] - '0';
    return 0;
    }

    GPGGA解析函数

    GPGGA用来获取海拔高度和卫星编号.

    /**
    * @gpgga_analysis
    *
    * @brief 解析gpgga
    *
    * @param[out] p
    * 输出到p指向的结构体
    * @param[in] str
    * 包含逗号的原始字符串.
    *
    * @return
    * SUCCESS 0
    * FAILURE -1.
    */
    int gpgga_analysis(gps_info *p, unsigned char *str)
    {
    unsigned char buf[32][128];
    int i;
    if(str[4] != 'G')
    {
    return -1;
    }
    data_filter(buf, str);
    for(i=0; i < 13; i++)
    {
    printf("%s ",buf[i]);
    }
    printf("\n");
    p->height = atof(buf[9]);
    p->satellite = atoi(buf[7]);
    return 0;
    }

    测试样例输出

    unsigned char tmp[128] = "$GPRMC,092927.000,A,2235.9058,N,4546.40891,E,31.14,74.11,150618,,N*49";
    unsigned char tmp2[128] = "$GPGGA,092927.000,2235.9058,N,11400.0518,E,2,9,1.03,53.1,M,-2.4,M,0.0,0*6B";
    gps_info gps_st;
    memset(&gps_st, 0, sizeof(gps_st));
    gprmc_analysis(&gps_st, tmp);
    gpgga_analysis(&gps_st, tmp2);
    printf("%c %c\n",gps_st.ns,gps_st.ew);
    printf("%d度%d分%d秒\n",gps_st.latitude_degree, gps_st.latitude_cent, gps_st.latitude_second);
    printf("%d度%d分%d秒\n",gps_st.longitude_degree, gps_st.longitude_cent, gps_st.longitude_second);
    printf("%lf %lf\n", gps_st.speed, gps_st.direction);
    printf("%d年%d月%d日%d时%d分%d秒\n",gps_st.time.year, gps_st.time.month, gps_st.time.day, gps_st.time.hour, gps_st.time.minute, gps_st.time.second);
    printf("海拔高度 %lf, 卫星编号 %d", gps_st.height, gps_st.satellite);

    data_filter()是个简单的逗号过滤函数,这里不给出了。

    展开全文
  • GPS数据包解析

    2013-05-01 10:07:06
    详细的gps数据包解析;介绍了每一种数据的格式等等。 例如GPRMC,GPGAA等等;
  • SNMP数据包解析方法

    2011-03-03 14:51:39
    SNNMP 数据包 解析 BER编码规则
  • C++语言实现IP数据包解析程序,程序注释很详细。
  • netflow_v9:生锈的netflow v9数据包解析
  • BLE数据包解析

    2016-06-21 12:03:22
    对蓝牙搜索到的数据包进行初步解析,便于查找
  • 网络数据包解析 TCP/IP协议数据包,一般由应用层、传输层、网络层、数据链路层封装而成。 四层协议各自的作用:  数据链路层实现了网卡接口的驱动程序。  网络层实现了数据包的选路和转发。  传输层为两台...

    Itsad

    网络数据包解析

    TCP/IP协议数据包,一般由应用层、传输层、网络层、数据链路层封装而成。

    四层协议各自的作用:

      数据链路层实现了网卡接口的驱动程序。

      网络层实现了数据包的选路和转发。

      传输层为两台主机上的应用程序提供端到端(end to end)的通信。

      应用层负责处理应用程序的逻辑。

    #1先封装的协议头是传输层,传输层有TCP、UDP、TLS 、DCCP 、SCTP 、RSVP 、PPTP,常用的有TCP,UDP

    TCP头的结构(tcp头总长度为 20个字节+options可选选项)

    (1)TCP源端口(Source Port):16位的源端口包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

    (2)TCP目的端口(Destination Port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

    (3)序列号(Sequence Number):32位 TCP连线发送方向接收方的封包顺序号。

    (4)确认序号(Acknowledge Number):32位 接收方回发的应答顺序号。

    (5)头长度(Header Length):偏移量(4bit)和保留(4bit)总共8位  。 表示TCP头的双四字节数,如果转化为字节个数需要乘以4。

    (6)保留(2bit)和标记(6bit)总共8位。

     标记位: 

      URG:是否使用紧急指针,0为不使用,1为使用。

      ACK:请求/应答状态。0为请求,1为应答。

      PSH:以最快的速度传输数据。  

      RST:连线复位,首先断开连接,然后重建。

      SYN:同步连线序号,用来建立连线。

      FIN:结束连线。如果FIN为0是结束连线请求,FIN为1表示结束连线。

    (7)窗口大小(Window):16位  目的机使用16位的域告诉源主机,它想收到的每个TCP数据段大小。

    (8)校验和(Check Sum):16位  这个校验和和IP的校验和有所不同,不仅对头数据进行校验还对封包内容校验。

    (9)紧急指针(Urgent Pointer):16位  当URG为1的时候才有效。TCP的紧急方式是发送紧急数据的一种方式。

    (10)可选选项(options)24位,类似IP,是可选选项。填充8位,使选项凑足32位。

    UDP头的结构

    源端口(2字节)

    目的端口(2字节)

    封报长度(2字节)

    校验和(2字节)

    数据

    (1)源端口(Source Port):16位的源端口域包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

    (2)目的端口(Destination Port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

    (3)封包长度(Length):16位  UDP头和数据的总长度。

    (4)校验和(Check Sum): 16位 和TCP和校验和一样,不仅对头数据进行校验,还对包的内容进行校验。

    #2、然后封装的是网络层,网络层主要是IP协议,还有ICMP协议,IGMP协议等

    IP协议头(ip头总长度根据IP头的头长来计算。一般IP没有可选选项,长度为20字节,也就是对应头长等于5):

     

    1-1.版本4位,表示版本号,目前最广泛的是4=B1000,即常说的IPv4;相信IPv6以后会广泛应用,它能给世界上每个纽扣都分配

           一个IP地址。

    1-2.头长4位,数据包头部长度。它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

      这个字段表示了IP头部的总长度,但它不是直接表示,因为它只占了4比特,最大也就15,实际的IP头部长度等于首部长度字段表示的          值乘以4,单位是字节,也就是首部最长为15×4=60字节,一般IP数据报首部都没有选择项,长度为20字节,也就是对应头长等于5。

    1-3.服务类型,包括8个二进制位,每个位的意义如下:

           过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

           延迟字段:1位,取值:0(正常)、1(期特低的延迟)

           流量字段:1位,取值:0(正常)、1(期特高的流量)

           可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

           成本字段:1位,取值:0(正常)、1(期特最小成本)

           保留字段:1位 ,未使用

    1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最大只能是65535,及64KB。

    2-1.重组标识16位,发送主机赋予的标识,以便接收方进行分片重组。

    2-2.标志3位,他们各自的意义如下:

           保留段位(2):1位,未使用

           不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)

           更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

    2-3.段偏移量13位,与更多段位组合,帮助接收方组合分段的报文,以字节为单位。

    3-1.生存时间8位,经常ping命令看到的TTL(Time To Live)就是这个,每经过一个路由器,该值就减一,到零丢弃。

    3-2.协议代码8位,表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

    3-3.头检验和16位,是IPv4数据包头部的校验和。由发送端填充,接收端对其使用CRC算法检验IP数据报头部在传输过程中是否损坏。

    4-1.源始地址,32位4字节,我们常看到的IP是将每个字节用点(.)分开,如此而已。

    5-1.目的地址,32位,同上。

    6-1.可选选项,主要是给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉,普联(TP_LINK)的TL-ER5110路由就能这么做。

    ICMP协议头

    ICMP报文就像是IP报文的小弟,总顶着IP报文的名头出来混。因为ICMP报文是在IP报文内部的:

     

     

    ICMP所有报文的前4个字节都是一样的,但是剩下的其他字节不相同。

    前四个字节统一的格式:类型(8位),代码(8位),校验和(16位)

    类型和代码决定了ICMP报文的类型。常见的有:

      类型8, 代码0 ==> 表示回显请求(ping请求)

      类型0, 代码0 ==> 表示回显应答(ping应答)

      类型11,代码0 ==> 超时

    检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。

     ICMP报文具体分为查询报文差错报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)

    #3、最后封装的是数据链路层,即以太网头和FCS

    以太网头(总长度为14个字节)是由  6字节的目的MAC地址 + 6字节的源MAC地址 + 2字节的类型  组成。

    以太的各种类型:

    以太类型

    协议

    0x0800

    Internet协议版本4(IPv4

    0x0806

    地址解析协议(ARP

    0x8035

    反向地址解析协议(RARP

    三个数值

    AppleTalk(Ethertalk)

    0x80f3

    AppleTalk地址解析协议(AARP)

    为0x8100

    IEEE 802.1Q标签帧

    三个数值

    Novell IPX(alt)

    0x8138

    Novell公司

    0x86DD

    Internet协议版本6(IPv6

    0x8819

    CobraNet技术

    0x88a8

    提供商桥接(IEEE 802.1ad

    0x8847

    MPLS单播

    0x8848

    MPLS多播

    0x8863

    PPPoE发现阶段

    0x8864

    PPPoE会话阶段

    0x888E

    EAP over LAN(IEEE 802.1X

    0x889A

    HyperSCSI(以太网SCSI)

    0x88A2

    以太网ATA

    0x88A4

    EtherCAT协议

    0x88CD

    SERCOS-III

    0x88D8

    以太网电路仿真服务(MEF-8

    0x88E5

    MAC安全(IEEE 802.1AE

    0x8906

    以太网光纤通道

    0x8914

    FCoE初始化协议

    0x9100

    Q-in-Q的

    0xCAFE

    Veritas低延迟传输(LLT)

    在不定长的数据字段(以太网头后面的数据)后是4个字节的帧校验序列(FCS)

     

    分类: 网络编程

    展开全文
  • SRIO数据包解析.rar

    2020-05-05 15:34:38
    在仿真RapidIO核的过程中,使用VB.NET编写的简单工具(含exe及对应源码),能够对Xilinx SRIO的传输层数据包(仅HELLO格式)、物理层数据包进行解析,便于理解数据包。 开发环境:VS2005
  • 蓝光3D视频数据包解析及转码,陈兴喆,杨波,随着人们对3D电影热爱的加剧和对在线视频需求的不断提升,在线观看3D电影将是未来极具发展潜力的领域。但现阶段可供流媒体播放的3D
  • #思路: ###没啥好说的 #解答: package bupt; import java.util.Scanner; /* *@author:Totoro ...public class IP数据包解析 { public static void main(String[] args) { Scanner cin=...

    在这里插入图片描述

    思路:

    图都没有,还好初试有计算机网络

    解答:

    package bupt;
    
    import java.util.Scanner;
    
    /*
    *@author:Totoro
    *@createDate:2020年3月18日下午5:54:34
    */
    public class IP数据包解析
    	{
    
    	public static void main(String[] args)
    		{
    		Scanner cin=new Scanner(System.in);
    		int T=cin.nextInt();
    		cin.nextLine();
    		String head_package;
    		String[] head;
    		for(int t=1;t<=T;++t)
    			{
    			head_package=cin.nextLine();
    			head=head_package.split(" ");
    			int len=Integer.valueOf(head[2]+head[3],16);
    			int[] source=new int[4];
    			for(int i=0;i<4;++i)
    				source[i]=Integer.valueOf(head[12+i],16);
    			int[] destination=new int[4];
    			for(int i=0;i<4;++i)
    				destination[i]=Integer.valueOf(head[16+i],16);
    			int source_port=Integer.valueOf(head[20]+head[21],16);
    			int destination_port=Integer.valueOf(head[22]+head[23],16);
    			System.out.println("Case #"+t);
    			System.out.println("Total length = "+len+" bytes");
    			System.out.println("Source = "+source[0]+"."+source[1]+"."+source[2]+"."+source[3]);
    			System.out.println("Destination = "+destination[0]+"."+destination[1]+"."+destination[2]+"."+destination[3]);
    			System.out.println("Source Port = "+source_port);
    			System.out.println("Destination Port = "+destination_port);
    			System.out.println();
    			}
    		}
    
    	}
    
    
    展开全文
  • 单通道ECG数据包解析

    2018-10-10 13:30:22
    print('-------------单通道ECG 数据包 解析!--------------------') with open('C:/Users/Liu/Desktop/abcd.txt','r') as file: list = file.readlines() #去掉每行的末尾'\n' # 判断包是否合法 for i,val in ...
  • 本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法。背景技术:计算机系统和网络的大量普及使用使全球跨入了信息化时代。但是,正由于现代社会中几乎一切都在“计算机化”,如经济活动...
  • pcap数据包解析及数据特征提取

    千次阅读 2017-10-26 16:41:54
    pcap数据包解析及数据特征提取 #include #include #include #include #include #pragma pack(1) #define BUFSIZE 1526 #define STRSIZE 1024 typedef int bpf_int32; typedef unsigned int bpf_u_...
  • PysharkPyshark是一款针对tshark的Python封装器,在Pyshark的帮助下,广大研究人员可以使用wireshark的解析器来进行Python数据包解析。扩展文档:【Pyshark】虽然目前社区也有多款针对Python包的解析模块,但Pyshark...
  • PcapPlusPlus是一个多平台C 网络嗅探和数据包解析和制作框架。 PcapPlusPlus旨在轻量化,高效,易于使用。 它是一个流行的引擎,如libpcap,WinPcap,DPDK和PF_RING的C 包装器
  • UDP数据包解析

    千次阅读 2020-07-07 14:19:10
    在如何封装一个数据包上,是一个非常细致的问题,而利用UDP协议来封装的话,是比较简单,让我们一步步来分析典型的TCP/IP协议。一般来说一个典型的一个数据包,包括以太网MAC头+网络层IP数据头+传输层UDP头+要传输的...
  • // 题是不难,但是重要的是理解题意!先求IP头部长度 #include #include int num(char *c){ // 字符转换为数字   if(*c>='0'&&*c  else return *c-'a'+10; } int sum1(char *p){ // 求地址  ... return
  • 由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同包的域结构不同,介绍如下: 1、令牌包 分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,...
  • [整理]GPS数据包解析

    2017-10-17 23:14:30
    GPS数据包解析 GPS 上电后,每隔一定的时间就会返回一定格式的数据,数据格式为: $信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x每行开头的字符都是‘$’,接着是信息类型,后面是数据,以逗号分隔开。 一行...
  • 内核数据包解析 前言 本文主要目的是在内核驱动中解析出dhcp报文 关于结构体struct sk_buf *skb 内核中sk_buff结构体在各层协议之间传输不是用拷贝sk_buff结构体,而是通过增加协议头和移动指针来操作的。如果是...
  • c#开发的网络IP数据包解析程序

    热门讨论 2009-07-18 19:51:13
    用C#开发的简单IP数据包解析程序,一个完整VS2005项目,下载解压之后打开相关文件即可运行或用VS2005打开。
  • 剥皮:树中的动态数据包解析:evergreen_tree::deciduous_tree::palm_tree:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,226
精华内容 1,690
关键字:

数据包解析