network sessions and capture files

Home Forums Discussions Support network sessions and capture files

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #5355
    sharok
    Participant

      Background

      Hi.
      I write a program that analyzes the packets for specific words contained therein. I need to analyze outgoing email, jabber, ICQ. If the words are found, the packet is blocked.I did it, but I have a problem with the files and sending email through the web.
      Problems

      Simple code:

      while (Ndisapi.ReadPacket(hNdisapi, ref Request))
      {
      // some work
      switch (protocol)
      {
      //....
      case "HTTP":
      // parse packet(byte[])
      HTTP.HttpField field = HTTP.ParseHttp(ret);
      if (field != null && field.Method == HTTP.HttpMethod.POST)
      {
      // analyze packet and drop if needed
      DoWork();
      }
      }

      The problem is the following. For example, I attach to email the file of 500 KB. The file will be split approximately in 340 packets. In the code above, DoWork() only for first packet will be executed.
      Ok, then I need to restore session completely and pass to whole session to DoWork(). I did it. But I can’t wait while session is finished, because other packet( http, arp, all packets) will be suspended (And after a couple of minutes the Internet is disconnected).
      Therefore, the first question:

      How to solve this problem (may be advice for design program)?

      Now the email, suppose this code:

      switch (protocol)
      {
      //....
      case "HTTP":
      // parse packet(byte[])
      var httpMimeMessage = Mime.Parse(ret);
      // analyze packet and drop if needed
      DoSomeWork();
      break;
      }

      For example, we are looking for word “Finance”. Then, if we open any website and there will be a word finance then packet is blocked.

      Second question: How do I determine that this is the e-mail?

      Thanks and sorry for my English.
      PS. Можно на русском

      #7029
      Vadim Smirnov
      Keymaster

        Не все тут просто, как минимум нужно сохранять какой-то контекст для каждой интересующей TCP сессии. Дальше есть два варианта:

        1) Кешировать пакеты сессии до тех пока не будет получен весь файл. Для этого придется генерировать ACK пакеты в обратном направлении. Как только файл получен проанализировать его и отправить соответствующие пакеты по назначению. В данном случае придется самостоятельно контроллировать доставку пакетов и делать ретрансмиты если пакеты теряются.

        2) Для каждой сессии сохранять ее текущее состояние и каждый следующий пакет анализировать с учетом состояния сессии. Как, например, при обнаружении метода POST сохранить контекст сессии (IP адреса и порты) и затем все пакеты проверять на принадлежность этой сессии. Если пакет принадлежит этой сессии то анализировать его с учетом того что это метод POST.

        Первый метод довольно сложный и я бы его не рекомендовал, а второй вполне реально реализовать. Придется конечно реализовать анализатор интересующего протокола, чтобы для каждого пакета понимать, что он содержит и как это должно быть проанализировано.

        #7030
        sharok
        Participant

          Спасибо за ответ. Как раз второй вариант и начал реализовывать.

        Viewing 3 posts - 1 through 3 (of 3 total)
        • You must be logged in to reply to this topic.