Фон
Привет.
Я пишу программу, которая анализирует пакеты на предмет конкретных слов, содержащихся в них.Мне нужно проанализировать исходящую почту, 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;
}
Например, мыищем слово "финансы".Затем, если мы откроем какой-либо веб-сайт и появится слово «финансы», пакет будет заблокирован.
Второй вопрос: Как определить, что это электронная почта?
Спасибо и извините за мой английский.