我是nfqueue的新手,并且正在尝试使用它来更改数据包的有效负载。
然而,当我从'set-ed'数据包中轮询有效负载(在下面的代码片段中简称为'packet')时,我会在更改之前获得数据包的原始有效负载。
偶然 - 虽然我读scapkt[TCP].payload
时它有正确的有效载荷。
我哪里做错了? (change_image是回调)
def change_image(packet):
scapkt = IP(packet.get_payload())
#is a TCP packet
if scapkt.proto == 6:
data = str(scapkt[TCP].payload)
getImage = re.search('GET [a-zA-Z0-9/]{1,}\.(jpg|JPG|jpeg|JPEG|png|PNG) HTTP/1.1\r\nHost: [a-zA-Z0-9\.]{1,}', data)
if getImage != None:
original_len = len(scapkt[TCP].payload)
data = data.replace(getImage.group(), 'GET ' + image + ' HTTP/1.1\r\nHost: ' + host)
scapkt[TCP].payload = data
postMod_len = len(scapkt[TCP].payload)
scapkt[IP].len = original_len + (postMod_len - original_len)
del scapkt[IP].chksum
del scapkt[TCP].chksum
packet.set_payload(str(scapkt))
print packet.get_payload()
packet.accept()
我正在使用令人敬畏的fqrouter
的NetfilterQueue分叉仅供参考:我知道这段代码可能无法按预期工作,但我正在学习使用nfqueue并尝试编写一个简单的PoC