Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在数据呈现在浏览器中之前拦截http请求并修改数据(例如使用regex替换内容)?如果是,怎么做?_C++_C_Network Programming - Fatal编程技术网

C++ 是否可以在数据呈现在浏览器中之前拦截http请求并修改数据(例如使用regex替换内容)?如果是,怎么做?

C++ 是否可以在数据呈现在浏览器中之前拦截http请求并修改数据(例如使用regex替换内容)?如果是,怎么做?,c++,c,network-programming,C++,C,Network Programming,今天我偶然发现了Wireshark,它能够截获您电脑上的所有网络流量。我想知道是否有可能在请求后修改数据(以便将发送回电脑的数据)并使用regex进行修改?在浏览器中呈现数据之前,是否替换数据中的文字和图案?(例如:将单词mad替换为happy或将整个网站替换为“停止拖延”) 如果可能的话: 我应该如何实施它?哪些功能是必不可少的 有没有开源库可以帮助我实现这一点 在实现此功能之前,我是否应该事先阅读 请注意,这个平台将是Windows,我将尝试在C++中执行此操作,您所描述的称为“透明代理

今天我偶然发现了Wireshark,它能够截获您电脑上的所有网络流量。我想知道是否有可能在请求后修改数据(以便将发送回电脑的数据)并使用regex进行修改?在浏览器中呈现数据之前,是否替换数据中的文字和图案?(例如:将单词mad替换为happy或将整个网站替换为“停止拖延”)

如果可能的话:

  • 我应该如何实施它?哪些功能是必不可少的
  • 有没有开源库可以帮助我实现这一点
  • 在实现此功能之前,我是否应该事先阅读

请注意,这个平台将是Windows,我将尝试在C++

中执行此操作,您所描述的称为“透明代理”。(假设您没有修改浏览器)。您通常需要操作系统的帮助才能进入浏览器和网络之间,或者需要在单独的路由器中实现代理。在linux中,这可以通过iptables实现。我想windows也有类似的功能。

对于windows 7/vista,您可以使用windows筛选平台(WFP),它允许您在不同的层插入钩子,访问这些数据包,修改它们,并将它们重新注入tcp/ip堆栈。 对于Mac OS,您可以将divert socket与ipfw一起使用。因此,您在ipfw上设置了一个规则,将某些数据包转移到“转移套接字”,进行修改,然后重新注入

顺便说一句,wireshark并没有真正拦截流量,它只是转储流量~

您可以使用(LGPL)实现此目的(免责声明:WinDivert是我的项目)。WinDivert是一个用户模式API,它将一些内核模式WFP调出驱动程序功能提升到用户空间

伪代码如下所示:

HANDLE handle = DivertOpen(
    "inbound && "                // Inbound packets
    "tcp.SrcPort == 80 && "      // HTTP
    "tcp.PayloadLength > 0",     // Data
    0, 0, 0);
while (TRUE)
{
    // Capture a packet.
    DivertRecv(handle, buf, size, &addr, &len);

    // Modify the packet.
    ...

    // Re-inject modified packet.
    DivertSend(handle, buf, len, &addr, NULL);
}

请注意,WinDivert是数据包级别的,因此HTTP流可能被拆分为多个数据包,这可能会使事情变得复杂。

我能告诉您的是这是可能的。一个类似的概念是mitm攻击。我想代理解决方案是最简单的方法。对于windows,您需要选择驱动程序路径(NDIS/TDI),通过分层套接字提供程序进行用户级扩展,或使用浏览器扩展连接到捕获和修改数据所需的任何通道。这听起来像是可以为此修改隧道适配器。如果你走这条路线,请阅读L2TP、PPTP、IP over IP。http代理可以做到这一点,就像nginx()。可以过滤(更改)内容-