我不明白这个计算

时间:2019-07-26 11:31:12

标签: python tcp packet-sniffers

嗅探器观看Youtube,到目前为止我还不错。但是计算TCP标头让我想知道为什么会这样。

!(http://web.deu.edu.tr/doc/oreily/networking/firewall/figs/fire0603.gif

这是一些问题。

  1. 例如,假设data [0]为11010010,则版本必须为1101,IHL为0010。但是根据我编写的代码,版本将为00101101,IHL为00001000。无法了解其工作原理。

  2. 此语法有4个变量

    ttl, proto, src, target = struct.unpack('! 8x B B 2x 4s 4s', data[:20])

但是为什么引号内有6个值?而且效果很好

#sniffer_demo.py

def ipv4_packet(data) :
    version_header_length = data[0]
    version = version_header_length >> 4
    header_length = (version_header_length & 15) * 4
    ttl, proto, src, target = struct.unpack('! 8x B B 2x 4s 4s', data[:20])
    return version, header_length, ttl, proto, ipv4(src), ipv4(target), data[header_length:]

0 个答案:

没有答案