使用原始套接字的python数据包嗅探器

时间:2013-08-22 06:37:47

标签: python python-2.7 network-programming packet-sniffers raw-sockets

试图在python中使用原始套接字创建数据包嗅探器,并希望使用struct.unpack方法解析完整的TCP头,但是一些字段如HLEN(4bits)和offset,URG,ACK,PST,RST,SYN,FIN在tcp标头中的位不是字节。所以我的问题是如何从头部解析这些值!

1 个答案:

答案 0 :(得分:0)

您可以使用:

以下是一个例子:

from ctypes import c_int32, c_uint32, Structure, Union

class _bits(Structure):
    _fields_ = [
        ("odd", c_uint32, 1),
        ("half", c_uint32, 31),
    ]

class Int(Union):
    _fields_ = [
        ("bits", _bits),
        ("number", c_uint32),
    ]


a = Int(number=12345)
a.bits.odd, a.bits.half

结果:

>>> a = Int(number=12345)
>>> a.bits.odd, a.bits.half
(1L, 6172L)