精华内容
下载资源
问答
  • ip首部解析

    2016-12-06 15:36:41
    最近在看 tcp/ip 卷1 ,其中 ip首部 涵盖的信息 比较多,为了 作为备忘录,特做一些笔记。 其中比较难理解的有  1.4位的首部长度,这个 表示 ip首部长度,其中 它 隐含了 它的单位是 32bit,即 4字节,...

    最近在看 tcp/ip 卷1 ,其中 ip首部 涵盖的信息 比较多,为了 作为备忘录,特做一些笔记。



    其中比较难理解的有 

    1.4位的首部长度,这个 表示 ip首部长度,其中 它 隐含了 它的单位是 32bit,即 4字节,所以 4位,最大可以表示15,所以ip首部最大是15*4 = 60字节

    2. 16位的总长度,这个长度的 单位是 1字节,所以最大可以表示65356个字节。(这是网络MTU的最大值。)

    3.16位标识,3位标志,13位偏移 ,这是由于 不同网络有 不同的 MTU,所以 ip地址需要 分片 和 重组。 

      讲 这三个标志 比较好的 网址: http://www.cnblogs.com/fly1988happy/archive/2012/11/05/2755346.html

    4.首部校验和,是最难理解的,我到现在 还 是一知半解。下面 这个网址 讲解了 IP 首部校验和。

     http://blog.chinaunix.net/uid-26739173-id-3260903.html


    展开全文
  • 文章目录一、前期准备1.1 IP首部组成1.2 struct处理二进制报文数据二、IP首部解析器的实现三、测试逻辑        在上一节搭建基础框架后本节我们真正实现对IP报文的解析,首先...


           在上一节 搭建基础框架
    后本节我们真正实现对IP报文的解析,首先通过下面这张图先了解一下数据报文组装的结构顺序,IP首部处于IP数据包的头部,每一行32位,共计5行,总长度为20字节。IP协议处于OSI七层模型的网络层,网络层的作用就是负责解决数据报在虚拟网络中传输路径的问题。
    在这里插入图片描述

    一、前期准备

    1.1 IP首部组成

           IP首部位于IP数据报的前20个字节,每一行有32比特位,共计5行。
    在这里插入图片描述
           第一行包括 4位IP-version 4位IP头长度 8位服务类型 16位报文总长度
           第二行包括 16位标识符 3位标记位 13位片偏移 (解析时不关注此行)
           第三行包括 8位TTL 8位协议 16位头部校验和
           第四行包括 32位源IP地址
           第五行包括 32位目的IP地址

    1.2 struct处理二进制报文数据

           通过设置下面的格式可以将二进制数据按照不同字节大小进行解析

    FORMATC TYPEPYTHON TYPESTANDARD SIZE
    Bunsigned charinteger1字节
    Hunsigned shortinteger2字节
    Lunsigned longinteger4字节
    schar[]string~

           大端字节序表示高位在前,低位在后,是网络通信中常用的顺序;小段字节序则相反,低位在前,高位在后,因为计算机电路在处理低位字节效率较高,常用于主机存储中。
           下面是struct包解析demo,其中>表示按照大端顺序进行解析。

    import struct
    
    bin_str = b'ABCDEFGH'
    print(bin_str)
    print(bin_str.decode())
    res = struct.unpack('>8B', bin_str)
    print(res)
    res2 = struct.unpack('>4H', bin_str)
    print(res2)
    res3 = struct.unpack('>2L', bin_str)
    print(res3)
    res4 = struct.unpack('>8s', bin_str)
    print(res4)
    

    测试结果:
    在这里插入图片描述

    二、IP首部解析器的实现

           创建net包 新建parser.py文件
           在IPParser中分别对头部报文的每一行进行解析。

    class IPParser:
    
        IP_HEADER_LENGTH = 20  # 报文前二十字节为ip头部
    
        @classmethod
        def parse_ip_header(cls, ip_header):
            """
            IP报文格式
            1. 4位IP-version 4位IP头长度 8位服务类型 16位报文总长度
            2. 16位标识符 3位标记位 13位片偏移 暂时不关注此行
            3. 8位TTL 8位协议 16位头部校验和
            4. 32位源IP地址
            5. 32位目的IP地址
            :param ip_header:
            :return:
            """
            line1 = struct.unpack('>BBH', ip_header[:4])  # 先按照8位、8位、16位解析
            ip_version = line1[0] >> 4  # 通过右移4位获取高四位
            # 报文头部长度的单位是32位 即四个字节
            iph_length = (line1[0] & 15) * 4  # 与1111与运算获取低四位
            packet_length = line1[2]
            line3 = struct.unpack('>BBH', ip_header[8: 12])
            TTL = line3[0]
            protocol = line3[1]
            iph_checksum = line3[2]
            line4 = struct.unpack('>4s', ip_header[12: 16])
            src_ip = socket.inet_ntoa(line4[0])
            line5 = struct.unpack('>4s', ip_header[16: 20])
            dst_ip = socket.inet_ntoa(line5[0])
    
            # 返回结果
            # ip_version ip版本
            # iph_length ip头部长度
            # packet_length 报文长度
            # TTL 报文寿命
            # protocol 协议号 1 ICMP协议 6 TCP协议 17 UDP协议
            # iph_checksum ip头部的校验和
            # src_ip 源ip
            # dst_ip 目的ip
            return {
                'ip_version': ip_version,
                'iph_length': iph_length,
                'packet_length': packet_length,
                'TTL': TTL,
                'protocol': protocol,
                'iph_checksum': iph_checksum,
                'src_ip': src_ip,
                'dst_ip': dst_ip
            }
    
        @classmethod
        def parse(cls, packet):
            ip_header = packet[:cls.IP_HEADER_LENGTH]
    
            return cls.parse_ip_header(ip_header)
    

    三、测试逻辑

           在ServerProcessTask中调用IPParser

    def process(self):
        """
        异步处理方法
        :return:
        """
        headers = {
            'network_header': None,
            'transport_header': None
        }
    
        ip_header = IPParser.parse(self.packet)
        headers['network_header'] = ip_header
        return headers
    

    测试结果:
    在这里插入图片描述

    展开全文
  • TCP/IP数据包首部解析

    千次阅读 2019-08-04 15:48:45
    TCP/IP数据包首部解析 从头开始学计网,记录一下笔记 ** 参考:《图解TCP/IP》** TCP数据包结构: 1-1.源始端口,16位,范围当然是0-65535啦。 1-2.目的端口,同上。 2-1.序列号:字段长32位,指发送数据的位置,...

    TCP/IP数据包首部解析

    从头开始学计网,记录一下笔记
    ** 参考:《图解TCP/IP》**
    在这里插入图片描述
    TCP数据包结构:
    在这里插入图片描述
    1-1.源始端口,16位,范围当然是0-65535啦。
    1-2.目的端口,同上。
    2-1.序列号:字段长32位,指发送数据的位置,TCP为发送的每个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。每发送一次数据,就累加一次该数据字节数的大小。
    序列号不会从0或1开始,会从随机数开始循环增加。(建立和断开连接的SYN与FIN包不携带数据,但也会作为字节增加序列号)
    3-1.确认应答号:TCP告诉接受者希望他下次接到数据包的第一个字节的序号,可以认为在这个序号前的数据已正常接收。
    4-1.数据偏移:4位,该字段表示TCP数据部分从包的那个部分开始(TCP包首部的长度)。字段长度单位为32位(4字节),最多表示16*32位。
    比如TCP首部20字节,5个32位,偏移为5,0101
    4-2.保留:一般为0,常被无视。
    4-3.控制位:8位
    1)CWR、ECE,与IP首部的ECN字段对应,ECE标志为1,则通知对方网络拥塞,已将拥塞窗口缩小。
    2)URG:urgent flag,置1是表示数据需要紧急处置
    3)ACK:acknowledgement flag,置1时,确认应答字段有效,除了建立连接的SYN包之外均应置1
    4)PSH:push flag,置1时,应立刻传给上层应用协议,PSH置0时,并不需要立刻传而是先缓存
    5)RST:reset flag,置1时表示TCP连接出现异常必须紧急断开连接。
    6)SYN:synchronize flag,用于建立连接,并在其序列号字段进行序列号初始值设置
    7)FIN:finish flag,置1时希望断开连接。
    4-4.窗口字段: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字节了。

    展开全文
  • IP首部分析

    2013-01-10 15:31:55
    计算机网络课程设计IP首部解析的代码,有兴趣的下下看看
  • IP首部数据报格式大解析

    千次阅读 2016-11-23 16:18:33
    IP首部数据报格式大解析
    P数据报首部格式 :
    
     

        TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram)。这是一个与硬件无关的虚拟包, 由首部和数据两部分组成,其格式如图所示。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IPv4协议地址。

    1、IP数据报首部的固定部分中的各字段 
     (1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。  

    (2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60 字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。 (#我们一般看到的版本和首部长度两个字段是十六进制45,就是版本号version=4,headlength=5,也就是首部长度是60个字节)。

    (3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。

    (4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。 #可以看这个以太网frame总长为336字节,而IP数据包Total length=322,336-322=14正好是Ethernet包头的长度,所以就可以看出这IP数据包总长度一值就是除去Ethernet头的剩余长度,也就是IP包头加数据的长度。在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

    (5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 

    (6)标志(flag) 占3位,但目前只有2位有意义。 
      ● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。 
      ● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。 

    (7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

    (8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把 TTL值减1。当TTL值为0时,就丢弃这个数据报。

    (9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。(在scapy中,下层的这个protocol一般可以从上曾继承而来,自动填充,我们一般可以省略不填此项)

    (10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

    (11)源地址 占32位。   

    (12)目的地址 占32位

    2、IP数据报首部的可变部分         
         IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。

         目前,这些任选项定义如下: 
      (1)安全和处理限制(用于军事领域) 
      (2)记录路径(让每个路由器都记下它的IP地址)   

    (3)时间戳(让每个路由器都记下它的IP地址和时间)   

    (4)宽松的源站路由(为数据报指定一系列必须经过的IP地址) 

    (5)严格的源站路由(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)










    展开全文
  • IP数据报首部解析

    2016-10-24 13:35:00
    IP数据报首部的格式,普通20字节。 4位版本号:当前4--IPv4。 4首部长度:首部长度 8位服务类型TOS: 3bits(优先权)+ 4bits(类型--最小延迟+最大吞吐量+最高可靠性+最小费用)+ 1bits(未用,置0)。...
  • IP首部各字段解析

    2019-11-30 15:58:10
    IP数据包格式及首部中的个字段 字段解释 第一行 4位版本号:代表的就是IP协议的版本号,如果是IPv4就是0100,如果是IPv6就是0110。 4位首部长度:IP头的长度,4位即1111,也就是15,而一行有32位即4个字节,所以...
  • IP数据报之首部长度解析

    万次阅读 2016-11-23 16:06:47
    IP数据报之首部长度解析
  • 对于接收的IP报文头部以16位为单位逐个求和;2. 若结果为1,则校验正确,否则出错丢弃; 原理很简单,接收方的计算对象是A和A的反的异或,结果当然是1了! 具体的程序实现例子如下:SHORT checksum(USHORT* b...
  • UDP首部解析

    万次阅读 2018-06-22 17:43:20
    UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。UDP数据报封装成一份IP数据报的格式如图所示:     UDP首部 UDP首部的各字段如图所示。   1)端口号表示发送进程...
  • 介绍了IP协议的概念和IP首部的内容,以及相关知识点,ICMP、ARP、port、DNS。
  • TCP首部解析

    千次阅读 2018-06-22 18:23:30
    TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个... TCP数据被封装在一个IP数据报中,与UDP相同,如图所示:   TCP首部的数据格式。如果不计任选字段,它...
  • IP协议首部详细分析

    千次阅读 2016-07-22 21:54:57
    IP协议首部详细解析
  • IP头部解析

    千次阅读 2015-06-15 16:29:15
    一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。 版本——占4位,指IP协议的版本,目前的IP...
  • IP首部校验和的理解

    千次阅读 2010-06-28 23:28:00
    (转)对IP首部检验和的理解 很多文章对ip首部检验和的计算介绍得很简略,在理解上常常会比较困难。这篇文章是我自己的一些理解。或许也有不正确的地方,希望大家指正。 这个问题一直困绕了我很长时间,...
  • 文章目录一、TCP首部解析器的实现二、测试逻辑        上一节解析了IP首部报文后,本节继续解析TCP报文首部。TCP协议处于OSI七层模型的传输层,传输层的作用就是负责管理端到端...
  • IP首部检验和原理:在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,将首部的所有16位字再使用...
  • 比如一个http请求,DNS在应用层解析出目的IP地址,传输层使用tcp,但是tcp报文结构里只有端口号而没有IP地址,那么传输层的下一层网络层是怎么知道的呢?...也就是说在应用层解析出的IP地址居然没出现在tcp首部
  •        上一节解析了TCP报文首部后,本节继续解析同样位于传输层的UDP报文首部。UDP作为一种无连接,不可靠的协议,其存在数据丢失不...一、UDP首部解析器的实现   ...
  • 20201217-IP报文解析

    千次阅读 2020-12-17 14:30:37
    20201215-IP报文解析 {1}报文结构 ![图片.png](https://img-blog.csdnimg.cn/img_convert/718558a49aa5479c6049e1ea7f93bbc0.png#align=left&display=inline&height=213&margin=[object Object]&...
  • IP数据报解析 转载:点击打开链接  TCP/IP协议定义了一个在局域网上传输的包,称为IP数据报(IP Datagram)。IP数据报由首部和数据两部分组成,首部部分包括版本,长度,IP地址等信息。数据部分一般用来存储上层...
  • IP、TCP、UDP首部详解

    千次阅读 2020-01-09 17:39:59
    IP首部 IP首部字段图 IP首部字段详情 4位版本: 协议版本号,IPv4是0100,IPv6是0110,目前基本都是IPv4版本。 4位首部长度: 指首部占32bit字的数目,包括选项区,也就是说单位是4个字节,如图1-1首部是20个字节,...
  • IP 协议首部格式以及(ARP,RARP,ICMP,IGMP)

    千次阅读 2018-04-15 11:13:35
    IP协议首部格式 地址解析协议 ARP 逆向地址解析协议 RARP 网际控制报文协议 ICMP 网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit;最低位在右边,记为31 bit 版本: 占 4 位,指 IP ...
  • ip/tcp 首部长度字段

    千次阅读 2014-02-26 23:25:39
    iphdr->ihl:ip首部长度; tcphdr->doff:TCP的首部长度; iiphdr结构详解: include struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_...
  • 基于C++和winpcap编写的网络程序,实现监听并解析IP数据包! 运行程序,按提示输入要选择的网卡序列,再次输入需要不活的IP数据包的个数,然后程序自动运行捕获。 捕获后开始解析,从数据链路层开始解析...
  • (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP) 目录 IP协议首部格式 地址解析协议 ARP 逆向地址解析协议 RARP 网际控制报文协议 ICMP 网际组管理协议IGMP IP 数据报首部 IP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,610
精华内容 10,244
关键字:

ip首部解析