【问题标题】:Intermediate C : String search in a large file中级 C:大文件中的字符串搜索
【发布时间】:2017-12-14 09:35:32
【问题描述】:

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

P.S : 文件可能非常大,取决于捕获的数据包数量。

【问题讨论】:

  • 为什么要在写入后搜索文件,传入的数据包正在写入缓冲区,我猜,你不能只搜索吗?
  • 难道你的 TCP 数据包不允许连续包含多个 \n 字节作为有效负载吗?
  • Err.... 是的,有可能。
  • @SouravGhosh 缓冲区包含整个数据包(带有以太网、ip 和 tcp 标头)我打算提取 URL 并打印它。
  • @MichaelWalz 你能告诉我它是怎么做的吗?

标签: c network-programming file-handling packet-capture packet-sniffers


【解决方案1】:

逐行读取文件并使用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);
}

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2011-01-31
    • 2015-06-08
    • 2010-12-10
    • 2012-10-01
    • 2014-06-01
    • 2018-08-05
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多