• eth/tcp/ip 头的结构记录


    tcp头

     1         tcp_base_header_len = 20
     2         tcp_header = body[0:tcp_base_header_len]
     3         source_port, dest_port, seq, ack_seq, t_f, flags = struct.unpack(b'!HHIIBB6x', tcp_header)
     4         # real tcp header len
     5         tcp_header_len = ((t_f >> 4) & 0xF) * 4
     6 
     7         pack.flags = flags
     8         pack.fin = flags & 1
     9         pack.syn = (flags >> 1) & 1
    10         pack.rst = (flags >> 2) & 1
    11         pack.psh = (flags >> 3) & 1
    12         pack.ack = (flags >> 4) & 1
    13         pack.urg = (flags >> 5) & 1

    其中 tcp_header_len是这样的:

      在t_f中给出的是header长度占32bit的数目,也就是:  8 ==> 8x32 = 8*4*8 = 32 bytes

      其中 这一位可以取值范围是 4 bit 也就是 最大 1111 = 15 * 4* 8 = 60 bytes

      一般这个值是 5 也就是 20 bytes

    如果出于某些目的需要改写出一个异常的 header_len数据,则可以

    binary数据转 helixfy, 修改以后 unhelixfy 得到修改以后的包长信息,当然一般情况下这样做出来的packet包是错误的,可能无法在wireshark中被正确处理

     1     b = binascii.hexlify(p.tcp_header)
     2     # print b[25], b[24], b[26]
     3     if b[24]=='8':
     4         c = b[:24]+'5'+b[25:]
    14         new_tcp_header = binascii.unhexlify(c)
  • 相关阅读:
    Scrapy中间件
    Scrapy简介
    Scrapy解析器xpath
    postman
    yarn
    brew 安装 yarn 时候失败
    immutability-helper 用途+使用方法
    js 正则
    react redux 应用链接
    react 事件传参数
  • 原文地址:https://www.cnblogs.com/yeyong/p/6599286.html
Copyright © 2020-2023  润新知