сетевые сессии и отправка файлов - PullRequest
0 голосов
/ 15 мая 2011

Фон

Привет.
Я пишу программу, которая анализирует пакеты на предмет конкретных слов, содержащихся в них.Мне нужно проанализировать исходящую почту, jabber, ICQ.Если слова найдены, пакет блокируется. Я сделал это, но у меня проблема с файлами и отправкой электронной почты через Интернет.

Проблемы

Простой код:

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();
    }
}

Проблема в следующем.Например, я прикрепляю к электронной почте файл размером 500 КБ.Файл будет разбит примерно на 340 пакетов.В приведенном выше коде DoWork () будет выполняться только для первого пакета.
Хорошо, тогда мне нужно полностью восстановить сеанс и передать весь сеанс DoWork () .Я это сделал.Но я не могу дождаться окончания сеанса, потому что другой пакет (http, arp, все пакеты) будет приостановлен (и через пару минут интернет отключится).
Поэтому первый вопрос:

Как решить эту проблему (может быть, совет по разработке программы)?

Теперь по электронной почте, предположим этот код:

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

Например, мыищем слово "финансы".Затем, если мы откроем какой-либо веб-сайт и появится слово «финансы», пакет будет заблокирован.

Второй вопрос: Как определить, что это электронная почта?

Спасибо и извините за мой английский.

1 Ответ

0 голосов
/ 16 мая 2011

Чтобы иметь возможность анализировать более одного пакета / потока одновременно, вам необходимо провести рефакторинг своего решения, чтобы использовать многопоточность или какую-либо другую форму многозадачности, и поскольку ваша задача, как представляется, требует больших вычислительных ресурсов и требует интенсивной работы, вы, вероятно, захотите подробно рассмотреть, как использовать обработку событий на уровне операционной системы (select, epoll или эквивалент для вашей целевой платформы).

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

Как я уверен, вы уже знаете, проблема, которую вы пытаетесь решить, является очень сложной, требующей очень специализированных навыков, таких как программирование в реальном времени, глубокое знание сетевых протоколов и т. Д.

Конечно, уже есть несколько решений для "глубокой проверки пакетов", которые делают все это для вас (обычно используются государственными компаниями для выполнения нормативных требований, таких как Sarbanes-Oxley), но они довольно дорогие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...