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