C/ c++:替换HTTP头(在TCP包中)中的特定(匹配)字符串



我有一个在HTTP数据包上操作的程序,我想用新的字符串替换HTTP头中的IP地址。

例如,HTTP头中有字符串"192.168.0.1",我想将其替换为10.0.0.1。所以如果在HTTP报头中Host字段是:

Host 192.168.0.1:8000

我想把它改成

Host 10.0.0.1:8000

所以我的基本要求是在HTTP头字节(具体来说,现在我关注的是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头字节?如果是,如何处理

2)如何确定HTTP头长度

3)是否有任何现有的代码片段或后悔函数,这是方便我的使用?

谢谢

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

最新更新