none
Как лучше сделать? RRS feed

  • Общие обсуждения

  • Опишу очень подробно.
    Работаю с сетевыми пакетами, для этого используется pcap и wrapper  для него. При приходе нового пакета срабатывает событие. В обработчике события, у меня вызывается метод который  реконструирует TCP сессии и разделяет данные на "Ответ" и "Запрос". Также присутствует в классе флаг завершена сессия или нет. Далее, мне необходимо парсить эти сессии. Я начинаю парсить, только если сессия [b]завершена[/b]. Соответственно, возникает проблема, например, при отправке почты через TheBat,  он не закрывает (почему то) сессию (нету флага FIN). Поэтому я не могу парсить, т.к разбор у меня только после завершения сессии. Сейчас я делаю так, я завел две переменные в классе, который реконструирует сессии: время начала и время последнего добавления данных.  Затем создаю таймер, который раз в 1 секунду проверяет время, если время последнего доступа было 15 секунд назад, то ставлю флаг завершения сессии. И здесь же в обработчике таймера проверяю, есть ли завершенные сессии, если да то смотрю какой протокол, и вызываю метод для парсинга у соответствующего класса (например smtp). Затем удаляю сессию. Проблема в том, что такой "кривой" метод работает для SMTP, для OSCAR(ICQ) уже будут проблемы, потому что там после авторизации устанавливается новое соединение, и потом, просто клиент шлет пакет KeepAlive, чтоб сервер не закрыл соединение.
    Также проблема, в UI приход почты отобразится только через 15 секунд. Поэтому, как можно переписать? тем более проверять раз в 1 секунду и парсить, скажется на производительности.
    1 февраля 2011 г. 22:03

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    7 февраля 2011 г. 10:06
    Модератор