中间C:大文件中的字符串搜索
我正在编写一个“C”代码,将捕获的数据包的TCP有效负载存储在一个文件中(每个数据包的有效负载由多个“\n”字符分隔)。使用C,是否可以在捕获所有数据包后搜索文件中的特定字符串中间C:大文件中的字符串搜索,c,network-programming,file-handling,packet-capture,packet-sniffers,C,Network Programming,File Handling,Packet Capture,Packet Sniffers,我正在编写一个“C”代码,将捕获的数据包的TCP有效负载存储在一个文件中(每个数据包的有效负载由多个“\n”字符分隔)。使用C,是否可以在捕获所有数据包后搜索文件中的特定字符串 注意:文件可能非常大,这取决于捕获的数据包的数量。逐行读取文件并使用strstr进行搜索 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE * fp; char * line
注意:文件可能非常大,这取决于捕获的数据包的数量。逐行读取文件并使用strstr进行搜索
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
char * pos;
int found = -1;
fp = fopen("filename", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1)
{
pos = strstr(line,"search_string");
if(pos != NULL)
{
found = 1;
break;
}
}
if(found==1)
printf("Found");
else
printf("Not Found");
fclose(fp);
if (line)
free(line);
exit(EXIT_SUCCESS);
}
#包括
#包括
#包括
内部主(空)
{
文件*fp;
char*line=NULL;
尺寸长度=0;
阅读;
char*pos;
int-found=-1;
fp=fopen(“文件名”、“r”);
如果(fp==NULL)
退出(退出失败);
while((read=getline(&line,&len,fp))!=-1)
{
pos=strstr(第行,“搜索字符串”);
如果(位置!=NULL)
{
发现=1;
打破
}
}
如果(找到==1)
printf(“发现”);
其他的
printf(“未找到”);
fclose(fp);
如果(行)
自由线;
退出(退出成功);
}
为什么要在写入文件后搜索该文件,传入的数据包正在写入缓冲区,我想,您不能只搜索它吗?您的TCP数据包不允许在一行中包含多个\n
字节作为有效负载吗?Errr。。。。是的,这是可能的。@SouravGhosh缓冲区包含整个数据包(带有以太网、ip和tcp头),我打算提取URL并打印出来。@MichaelWalz,你能告诉我是怎么做的吗?