Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
中间C:大文件中的字符串搜索_C_Network Programming_File Handling_Packet Capture_Packet Sniffers - Fatal编程技术网

中间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

我正在编写一个“C”代码,将捕获的数据包的TCP有效负载存储在一个文件中(每个数据包的有效负载由多个“\n”字符分隔)。使用C,是否可以在捕获所有数据包后搜索文件中的特定字符串


注意:文件可能非常大,这取决于捕获的数据包的数量。

逐行读取文件并使用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,你能告诉我是怎么做的吗?