这里有两个问题:
- 如果内容被编码怎么办:gzip...
- 我是否还需要更改标头部分以使 HTTP 数据包有效(如果有校验和?)
更新
有实际经验的人可以详细说明所涉及的步骤吗?
我正在使用winpcap
和 bpftcp and src port 80
来过滤流量,所以我的工作在于这个回调函数:
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
这里有两个问题:
更新
有实际经验的人可以详细说明所涉及的步骤吗?
我正在使用winpcap
和 bpftcp and src port 80
来过滤流量,所以我的工作在于这个回调函数:
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
WinPcap 不允许您更改已发送的数据包。
如果数据包已发送,WinPcap 不会阻止它到达目的地。
如果您想发送另一个响应 - 除了已发送的响应之外 - 我不确定您要实现什么。
Content-Encoding
标头并添加Content-Length
代表新长度的标头(以字节为单位)。也就是说,为了获得更好的答案,您需要在问题中提供更多上下文。这就是气味。您想要实现什么,并且您认为修改 HTTP 响应是正确的解决方案?
libpcap
用于捕获。如果您想修改和注入网络数据包,您需要另一个库,例如libnet
.
winpcap 是尝试修改 TCP 流的一种奇怪方法 - 您没有解释为什么要尝试这样做,但您应该可以通过编写自己的 HTTP 代理来实现这一点。这样,您将获得一个直接的数据流,您可以截取、记录和修改您心中的内容。一旦你这样做了,从请求标头中去掉 Accept-Encoding,那么你就不需要首先处理 gzipped 响应。
没有 HTTP 校验和,但较低层有校验和;通过在应用程序级别上作为代理服务器运行,您可以让网络堆栈为您处理所有这些。