嗅探器观看Youtube,到目前为止我还不错。但是计算TCP标头让我想知道为什么会这样。
!(http://web.deu.edu.tr/doc/oreily/networking/firewall/figs/fire0603.gif)
这是一些问题。
例如,假设data [0]为11010010,则版本必须为1101,IHL为0010。但是根据我编写的代码,版本将为00101101,IHL为00001000。无法了解其工作原理。
此语法有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:]