gpt4 book ai didi

c - 数据包中的字符串搜索并打印数据包数据

转载 作者:行者123 更新时间:2023-11-30 15:06:09 25 4
gpt4 key购买 nike

如何在 C 语言中对数据包(包括 header 和负载)进行字符串搜索?我尝试使用 strstr(),但由于我的目标 MAC 地址以 0x00 开头,因此 strstr() 函数似乎无法进一步深入数据包。此外,数据包内可能存在更多 0x00 字节。我需要逐字节搜索,还是有更快的方法?

另外,我可以使用%s打印数据包数据吗?我尝试了以下方法,但没有输出。

while ((rc = pcap_next_ex(pcap, &pkthdr, &data)) >= 0)
printf("%s\n", data);

最佳答案

打印:

您无法使用 printf("%s", data) 打印数据包。这是因为当出现 NULL 字节('\0')时打印就会终止,这在引用传输数据时非常常见。您可以使用以下命令从 %str 中打印 %len 字节,同时忽略 NULL 字节,但它不会让您走得太远,因为大多数字节是不可见的:

// len = pkthdr.len
printf("%.*s", len, str);

对于搜索,可以使用非标准函数 strnstr :

#include <stdio.h>
#include <string.h>

char *strnstr(const char *haystack, const char *needle, size_t len)
{
int i;
size_t needle_len;

/* segfault here if needle is not NULL terminated */
if (0 == (needle_len = strlen(needle)))
return (char *)haystack;

for (i=0; i<=(int)(len-needle_len); i++)
{
if ((haystack[0] == needle[0]) &&
(0 == strncmp(haystack, needle, needle_len)))
return (char *)haystack;

haystack++;
}
return NULL;
}

int main()
{
char big_str[] = "abc\0cde\0efg\0";

printf("%s", strnstr(big_str, "efg", 12));

return 0;
}

但请阅读:https://stackoverflow.com/a/25705264/6814540

关于c - 数据包中的字符串搜索并打印数据包数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402511/

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