Итак, мне было поручено создать инструмент для нашего отдела контроля качества, который мог бы считывать пакеты по проводам и правильно собирать сообщения (они не доверяют нашим журналам ... длинная история).
Приложение, общение с которым я пытаюсь прослушать, использует классы .NET TcpListener и TcpClient для взаимодействия.Перехват пакетов не является проблемой (я использую SharpPcap ).Тем не менее, правильно повторная сборка пакетов в сообщения уровня приложения оказывается немного трудной.
В некоторых пакетах есть конец одного сообщения и начало следующего сообщения, и я не могу понятьКак объект NetworkStream в .NET может сказать, где заканчивается одно сообщение уровня приложения и начинается другое.
Мне удалось выяснить, что любой пакет, содержащий конец сообщения уровня приложения, будет иметьЗаголовок TCP "PSH" (Push) включен.Но я не могу понять, как .NET знает, где именно конец сообщения находится внутри этого пакета.
Данные одного пакета могут выглядеть следующим образом:
/></Message><Message><Header fromSystem=http://blah
Какпоток знает, что отправлять только до конца </Message>
приложению и хранить оставшуюся часть до завершения остальной части сообщения?
Не установлены флаги уровня IP для фрагментации и сокеты .NETне знаю протокола прикладного уровня.Так что я нахожу это невероятно неприятным.Любое понимание будет оценено.