Kus*_*ush 5 c c++ network-programming
今天,我偶然发现了能够拦截您PC上所有网络流量的Wireshark。我想知道是否可以在请求后修改数据(因此将数据发送回PC)并使用正则表达式进行修改?像在浏览器中呈现数据之前替换数据中的单词和图案吗?(例如:将mad替换为happy或将整个网站替换为“停止拖延”)
如果可能的话:
请注意,该平台将是Windows,我将尝试使用C ++进行。
为此,可以使用WinDivert(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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,WinDivert是数据包级别的,因此HTTP流可能会拆分为多个数据包,这可能会使事情复杂化。
您所描述的称为“透明代理”。(假设您没有修改浏览器)。您通常需要操作系统的一些帮助才能进入浏览器和网络之间,或者需要在单独的路由器中实现代理。在 Linux 中,这可以通过 iptables 来完成。我想windows也有类似的功能。