C/C++ : replace specific(matching) string in a HTTP header (in a TCP packet)

标签 c regex http http-headers

我有一个对 HTTP 数据包进行操作的程序,我想用新字符串替换 HTTP header 中的 IP 地址。

例如,HTTP header 中有字符串“192.168.0.1”,我想将其替换为10.0.0.1。 因此,如果 HTTP header 中的 Host 字段为:

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 字节中是否存在字节序问题?如果有,如何处理

2)如何确定HTTP头长度

3)是否有任何现有的代码片段或正则表达式函数方便我使用?

谢谢

最佳答案

  1. 不,HTTP header 的字节顺序不存在问题。 HTTP header 仅包含 ASCII 字节,而字节顺序主要是处理二进制结构数据(如 TCP header )时的问题。在这种情况下,操作系统将提供在主机和网络字节顺序之间转换数据的功能。
  2. 了解 HTTP header 长度的唯一可靠方法是接收全部 header 。 HTTP header 以找到的第一个空行结束,根据 section 4 of the RFC 。您应该小心,因为找到使用 LF ('\n') 换行而不是符合规范的 CRLF ('\r\n') 的客户端并不奇怪
  3. 有很多 C 正则表达式库,一个例子是 SLRE 。在他们的网站中,您可以找到一个用它解析 HTTP 请求的简单示例。此外,C++11 在其标准库中包含正则表达式!

关于C/C++ : replace specific(matching) string in a HTTP header (in a TCP packet),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33249490/

相关文章:

java - 使用 Java Servlet 进行长时间登录的最佳方式

c - 确定用户输入值的数据类型

c++ - SDK 库 c/c++ Dropbox

python - 使用命名组和替换使用 python 正则表达式剖析字符串

java - 正则表达式检索字符串中不包含字符串的部分

HTTP ETag 复制

mysql - C 中的函数返回 MYSQL_RES

压缩数组的每一行

javascript - 当有波斯语字符时,如何改变文本区域的方向?

http - Linkedin 获取用户提要