Python Scapy - 拦截并修改localhost上的http数据包

时间:2016-08-11 10:11:57

标签: http code-injection scapy intercept

我在localhost上运行apache2,我想截取并修改来自localhost的http请求。通过修改我想将标题的Accept-Encoding属性更改为'identity'。使用Burp-Suite,它工作得很好。但是,使用我的scapy脚本似乎已经发送了数据包,因为http响应仍然是编码的。

scapy脚本:

from scapy.all import *

def intercept(pkt):

   if pkt.haslayer(Raw):
      http_content = pkt.getlayer(Raw).load

      http_content = http_content.replace("Accept-Encoding: gzip, deflate", "Accept-Encoding: identity")
      pkt[Raw].load = http_content         
      print pkt.show()
      send(pkt)

def main():
   sniff(iface='lo', filter='tcp port 80', prn=intercept)

if __name__ == '__main__':
   main() 

这是我作为回应得到的回复:

<skipped>
###[ Raw ]###
           load      = 'HTTP/1.1 200 OK\r\nDate: Thu, 11 Aug 2016 09:34:38 GMT\r\nServer: Apache/2.4.23 (Debian)\r\nLast-Modified: Thu, 11 Aug 2016 09:34:25 GMT\r\nETag: "7d-539c878b8f8fd-gzip"\r\nAccept-Ranges: bytes\r\nVary: Accept-Encoding\r\nContent-Encoding: gzip\r\nContent-Length: 103\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xb3\xc9(\xc9\xcd\xb1\xe3\xb2\xc9HML\xb1\xe3RPP\xb0)\xc9,\xc9I\xb5\xf3H\xcd\xc9\xc9W\x08\xcf/\xcaI\xb1\xd1\x87\x08q\xd9\xe8CT\xd9$\xe5\xa7TB\x14g\x18!\xabT\x04\xaa0\x82H\x14@\xc5\x13\xd3\x133\xf3\xf4\xf4\xf4l\xf4\x0b@\x06@t\x02\x95\x81m\x05\x00\x1c\x95F\x1d}\x00\x00\x00'

是编码的。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

据我所知,scapy并没有让你能够修改已经由你的系统创建的数据包。当然,您可以制作和检查数据包,但不能修改已创建的数据包。 正确指出here Scapy会在不干扰主机IP堆栈的情况下嗅探数据包。 但对于Linux,您可以尝试将 scapy nfqueue 模块结合使用。 nfqueue模块允许您修改(使用scapy)满足特定iptables规则的数据包。