gpt4 book ai didi

c - 如何检测 u_char 类型缓冲区中的 "\r\n"?

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:31 28 4
gpt4 key购买 nike

我正在尝试使用 C 从数据包嗅探构建 HTTP 内容。现在,我能够将所有数据包保存在一个文件中,但我想删除第一个数据包中的 header 。 header 也被保存,因为它们是 TCP 有效负载的一部分。 header 后的实际主体在 HTTP 响应中的双“CR, LF”或 “\r\n\r\n” 之后开始。

如何检测 "\r\n" 以便我可以只保存它后面的缓冲区部分?缓冲区是 u_char 类型。我无法弄清楚命令。我查看了 Google 和其他地方,但我主要找到 C# 命令 - C 中没有任何内容。

我正在使用这个功能

void strtofcntnt(const u_char * Biffer, int size)
{
unsigned short iphdrlen;
struct iphdr *iph = (struct iphdr *)(Buffer + sizeof(struct ethhdr));
iphdrlen = iph->ihl*4;

struct tcphdr *tcph = (struct tcphdr*)(Buffer + iphdrlen + sizeof(struct ethhdr));

char data[] = *(Buffer);
char rdata[] = strstr(data, "\r\n\r\n");
unsigned int i;
for (i=0;i<=sizeof(data);i++)
{
fprintf(logfile,"%c",(unsigned int)data[i]);
}}

但它在编译期间在 chara data[] 和 char rdata[] 行中给出错误。错误说无效的初始值设定项。

最佳答案

u_charnot a standard datatype .您应该查看定义它的 header ,但肯定它只是一个 unsigned char

由于数据中可以嵌入空字节,strstr将无法找到 "\r\n\r\n"。您必须编写某种搜索方法:

const char* memsearch(const char* haystack, size_t haystack_len,
const char* needle, size_t needle_len)
{
const char* p;

for (p = haystack; p < (haystack + haystack_len - needle_len); p++) {
if (memcmp(p, needle, needle_len) == 0)
return p;
}
return NULL;
}

关于c - 如何检测 u_char 类型缓冲区中的 "\r\n"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17289086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com