http - Python Scapy - 拦截和修改本地主机上的 http 数据包

标签 http code-injection scapy intercept

我在本地主机上运行了 apache2,我想拦截和修改来自本地主机的 http 请求。通过修改,我想将 header 的 Accept-Encoding 属性更改为“身份”。使用 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'

已编码。

有人可以帮忙吗?

最佳答案

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

关于http - Python Scapy - 拦截和修改本地主机上的 http 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38893427/

相关文章:

php - 这是过滤数据和防止 SQL 注入(inject)和其他攻击的安全方法吗?

python - 检测应用层协议(protocol),python?

python - 无法导入 Scapy ssl_tls 库

python - 如何确定客户端是否需要 JSON 响应

java - 从静态类接收数据

c# - HTTP 范围 : bytes with WebClient C#

c# - base64 编码 HttpPostedFileBase

sql - cakephp - sql注入(inject)测试总是显示失败

javascript - 需要帮助使用 js 制作按钮然后将其链接到函数和 css 代码

python - Scapy - 在其他两个层之间插入数据包层