Search code examples
cnetwork-programmingfile-handlingpacket-capturepacket-sniffers

Intermediate C : String search in a large file


I'm writing a 'C' code that stores the TCP payload of captured packets in a file (payload of each packet is separated by multiple "\n" characters). Using C, is it possible to search for a particular string in the file after all the packets are captured?

P.S : The file can be very large, depending upon the number of captured packets.


Solution

  • Read the file line by line and search using 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);
    }