C/C++:替换 HTTP header(在 TCP 数据包中)中的特定(匹配)字符串
C/C++: replace specific(matching) string in a HTTP header (in a TCP packet)
我有一个对 HTTP 数据包进行操作的程序,我想用新字符串替换 HTTP header 中的 IP 地址。
例如HTTPheader中有字符串“192.168.0.1”,我想将其替换为10.0.0.1。
所以如果在 HTTP header 中,主机字段是:
Host 192.168.0.1:8000
我想去
Host 10.0.0.1:8000
所以我的基本要求是在 HTTP header 字节上使用正则表达式(具体来说,现在我专注于 HTTP 请求),找到字符串并替换它。我想得到一个类似这样的函数:
http_str_replace(char *http_header, char *matching_str, char *new_str, void(*regrex)())
就我而言,它是
http_str_replace(char *http_header, "192.168.0.1", "10.0.0.1", void(*regrex)())
我有两个问题:
1) HTTP header 字节中是否存在 endianess 问题?如果有,如何处理
2) 如何确定HTTPheader长度
3) 有没有方便我使用的现有代码片段或正则表达式函数?
谢谢
- 不,HTTP headers 的字节顺序没有问题。 HTTP header 仅包含 ASCII 字节 ,而字节顺序主要是处理二进制结构化数据时的一个问题,例如 TCP header。在这种情况下,OS 将提供在主机和网络字节顺序之间转换数据的功能。
- 了解 HTTP header 长度的唯一可靠方法是全部接收。根据 section 4 of the RFC,HTTP headers 在找到的第一个空行处结束。您应该小心,因为找到使用 LF (
'\n'
) 换行而不是符合规范的 CRLF ('\r\n'
) 的客户端并不奇怪
- 有很多 C 正则表达式库,一个例子是 SLRE。在他们的网站上,您可以找到一个使用它解析 HTTP 请求的简单示例。此外,C++11 在其标准库中包含正则表达式!
我有一个对 HTTP 数据包进行操作的程序,我想用新字符串替换 HTTP header 中的 IP 地址。
例如HTTPheader中有字符串“192.168.0.1”,我想将其替换为10.0.0.1。 所以如果在 HTTP header 中,主机字段是:
Host 192.168.0.1:8000
我想去
Host 10.0.0.1:8000
所以我的基本要求是在 HTTP header 字节上使用正则表达式(具体来说,现在我专注于 HTTP 请求),找到字符串并替换它。我想得到一个类似这样的函数:
http_str_replace(char *http_header, char *matching_str, char *new_str, void(*regrex)())
就我而言,它是
http_str_replace(char *http_header, "192.168.0.1", "10.0.0.1", void(*regrex)())
我有两个问题:
1) HTTP header 字节中是否存在 endianess 问题?如果有,如何处理
2) 如何确定HTTPheader长度
3) 有没有方便我使用的现有代码片段或正则表达式函数?
谢谢
- 不,HTTP headers 的字节顺序没有问题。 HTTP header 仅包含 ASCII 字节 ,而字节顺序主要是处理二进制结构化数据时的一个问题,例如 TCP header。在这种情况下,OS 将提供在主机和网络字节顺序之间转换数据的功能。
- 了解 HTTP header 长度的唯一可靠方法是全部接收。根据 section 4 of the RFC,HTTP headers 在找到的第一个空行处结束。您应该小心,因为找到使用 LF (
'\n'
) 换行而不是符合规范的 CRLF ('\r\n'
) 的客户端并不奇怪
- 有很多 C 正则表达式库,一个例子是 SLRE。在他们的网站上,您可以找到一个使用它解析 HTTP 请求的简单示例。此外,C++11 在其标准库中包含正则表达式!