我试图通过使用数据包的原始信息来过滤HTTP Get请求数据包,以确定哪个数据包是Get请求,哪个不是,但我找不到解码数据包的原始部分的方法,看起来像这样(不确定该数据包是否为HTTP Get请求):
<Raw `load="\x17\x03\x03\x00m\xb8G\xdb\n\xff\x94s\x90y\xe3y\xfa\xa1\x81[-\x05\xf8'Jpq\xf3\x98\xa0\x04d\x08N\xf6\x08\x93\xb1\xd9\xed\xc4^;\xc15\xf2D\xa7\xb4_\x95\x8f\x14l5~[9\xb0\x9f^EI\xbb\xcd\x89\x06\x11`\xa2\xbf\xdd\x8b\x14y!\xae\xbe-D&DW\x96\xf7\xcf\x19\xb0_\xba\xe80b\x9c\xe6\xee\x9c\xf3\xbb\r\x87c\xff\xf9G\xf6K\x8fn\rS\x83?\x05" |>`有没有一种已知的方法来做到这一点。我已经尝试了下一个过滤器:
def http_get_filter(packet):
return (TCP in packet and Raw in packet and
str(packet[Raw]).startswith('GET'))但它没有起作用,并引发了下一个异常:
WARNING: Calling str(pkt) on Python 3 makes no sense!
WARNING: Calling str(pkt) on Python 3 makes no sense!
WARNING: more Calling str(pkt) on Python 3 makes no sense!
WARNING: Calling str(pkt) on Python 3 makes no sense!
WARNING: Calling str(pkt) on Python 3 makes no sense!
WARNING: more Calling str(pkt) on Python 3 makes no sense!我使用的是python 3.6版本和scapy 2.4.4rc2版本。
谢谢你的帮助。
发布于 2021-08-04 19:27:54
这个警告是针对packet.py源代码的,不是针对python编译器的:
警告(“在Python3上调用str(pkt)毫无意义!”)
然后,基于源代码,bytes函数返回一个可分析的字节数组,而不会触发警告:
...
if six.PY2:
def __str__(self):
# type: () -> str
return self.build()
else:
def __str__(self):
# type: () -> str
warning("Calling str(pkt) on Python 3 makes no sense!")
return str(self.build())
def __bytes__(self):
# type: () -> bytes
return self.build()
...与其使用字符串(数据包),不如使用字节(数据包)
对于将字节数组转换为字符串:
packetstr = "".join(map(chr, bytes(packet)))发布于 2021-08-14 08:08:13
你可以尝试一些类似的东西:
if packet.haslayer(Raw):
data = str(packet.getlayer(Raw))https://stackoverflow.com/questions/63321812
复制相似问题