如何添加HTTP头包使用Scapy的嗅了嗅(how to add http headers to a

2019-07-01 19:39发布

我试图嗅出一个走出去利用Scapy的HTTP数据包,在里面添加了一些新的HTTP标头和提前发送。 这样做的目的是在保持完整的数据包只插入新标题。 在最高如果需要任何重新计算校验和应该做的。

已通过对等几乎所有的问题,但并没有完全得到解决。

以下是我做了什么。

def parse(pkt):

    if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
        pkt = pkt / "New Header:value\r\n\r\n"

        # OR i tried this
        #pkt = pkt.getlayer(Raw).load / Raw.load(load="New Header:value\r\n\r\n")

        #pkt.getlayer(Raw).load("New Header:value\r\n\r\n")
        pkt.show()
        #del pkt[IP].chksum
        send(pkt)
#end parse function

# start sniffing
a=sniff(filter="tcp and ( port 80 )", prn=parse)

的问题是,上面的代码中插入一个新的原始有效载荷部分,而不是添加一个纯报头。 已经有一个双换行符\ r \ n \ r \ n按HTTP标准,以指示终止标头。

要通过做如下克服这一点,我试图消除最后\ r \ n

   #pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")

但是,这条所有先前存在的头,只有“新头”的遗体。

我已经试过这对Linux Mint的。

更新:我想创建一个新的HTTP有效载荷,其中将包括先前的头,我会增加一些。 可以将部分一个扶着如何移除现有图层

Answer 1:

如果我理解正确的话,您遇到的问题是,你要更新一个新的头现有的HTTP请求。 你需要的是更新的地方一个字符串,Python不能直接做(string是不可改变的)。

所以,你应该做的是把HTTP标头:

old_hdr = pkt[Raw]old_hdr = pkt[TCP].payload

并操纵它像一个字符串:

new_hdr = 'New Header: value'
hdr = old_hdr.split('\r\n') # This is a crappy hack. Parsing HTTP headers
hdr.insert(new_hdr, 2)      # is a [solved problem][1].
send_hdr = '\r\n'.join(hdr)
pkt[TCP].payload = send_hdr

如果您发现校验和不更新,发送数据包之前将其删除:

del pkt[TCP].chksum

和Scapy的将它们放回你,用正确的价值观。

编辑:我只注意到我的链接是失败的。 下面是如何解析HTTP头。



文章来源: how to add http headers to a packet sniffed using scapy