C 解析HTTP头的子集以标识主机web地址

C 解析HTTP头的子集以标识主机web地址,c,http,network-programming,C,Http,Network Programming,HTTP协议都包含在TCP数据包的数据部分中 作为一个赋值,我需要解析HTTP HealEdfield(为了这个问题,只考虑主机Web地址),只使用字符串解析函数,我不能使用任何现有的库来完成。我试图找到HTTP头的按位分段,但失败了。我真的不知道现在该怎么办。有什么建议吗 先谢谢你 我已经做的是提取以太网、IP和TCP报头信息,并以十六进制形式解析数据,即 资料 MeNa展示了分离HTTP头字段的技巧。但要做到这一点,我需要将数据有效负载转换为字符串。我尝试了以下方法: unsigned ch

HTTP协议都包含在TCP数据包的数据部分中

作为一个赋值,我需要解析HTTP HealEdfield(为了这个问题,只考虑主机Web地址),只使用字符串解析函数,我不能使用任何现有的库来完成。我试图找到HTTP头的按位分段,但失败了。我真的不知道现在该怎么办。有什么建议吗

先谢谢你

我已经做的是提取以太网、IP和TCP报头信息,并以十六进制形式解析数据,即

资料

MeNa展示了分离HTTP头字段的技巧。但要做到这一点,我需要将数据有效负载转换为字符串。我尝试了以下方法:

unsigned char * data;
data = (unsigned char *)(packet + ETHERNET_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE);
int length = header_length - (ETHERNET_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE);

char string[length];
for (i = 0; i < length; i++) {  
    string[i] = (char)data[i];
}
printf("%s ", string);
无符号字符*数据;
数据=(无符号字符*)(数据包+以太网标头大小+IP标头大小+TCP标头大小);
int length=头文件长度-(以太网头文件大小+IP头文件大小+TCP头文件大小);
字符字符串[长度];
对于(i=0;i

这将打印出一个字符串,但大部分是小正方形,而不是字符:(

我认为HTTP头没有按位分段。在HTTP中,每个头都以“\r\n”结尾。因此,您只需查找下一个“\r\n”并将其挑选出来

比如:

char httpRe[] ="GET / HTTP/1.1\r\nHost: http://stackoverflow.com/\r\nReferer: https://www.google.com/\r\n\r\n";
char * parser = strtok (httpRe,"\r\n");
while (parser != NULL){
   printf ("%s\n",parser);
   parser = strtok (NULL, "\r\n");
}

这就是您要找的?

您所说的“HTTP头的按位表示”是什么意思?如表中的TCP标头分段将问题中的表示形式更改为分段,这更有意义,对不起,请告诉我成功与否。您的代码正常工作,但现在我正在努力将数据从十六进制转换为字符串,扩展我的问题请粘贴十六进制输入,内容如
数据中所示有疑问的数据有效载荷让我们
char httpRe[] ="GET / HTTP/1.1\r\nHost: http://stackoverflow.com/\r\nReferer: https://www.google.com/\r\n\r\n";
char * parser = strtok (httpRe,"\r\n");
while (parser != NULL){
   printf ("%s\n",parser);
   parser = strtok (NULL, "\r\n");
}