Вот появилось свободное время, и хотелось бы продолжить дискуссию.
Мне как-то не очень понравилась мысль о создании своего формата снифа. Лучше немножко доработать существующий.
Сразу объясню почему:
1) Зачем плодить кучу форматов, потом писать конвертеры, потом опять чего-то. Это все лишний код.
2) Хоть снифы и не нужны широкому кругу пользователей, да и используются фактически только в определенными людьми, позиция многоформатности теряет свой смысл. Свой собственный формат следует вводить только в том случае, если хочется кардинально выделить свой "продукт" и сделать его "уникальным". В нашем случае это ненужно.
Я изначально за обобщенный, централизованный формат.
Давайте в этой тебе оставим свои "за" и "против" и согласуем надо а что не надо.
Саму архитектуру формата можно разделить на 3 уровня:
1. Имя файла
2. Заголовок
3. Тело
1) Как уже говорил
RomanRom2, имя файла должно носить информационных характер.
Код:
[build]_[datetime(yyyy-MM-dd_HH-mm-ss-ffff)]_[SessionIndex]_[LogIndex]_[RealmIP].[pkt | raw]
Я бы предложил стандартный формат (
yyyy-MM-dd_HH-mm-ss-ffff), если есть какие-то нюансы с формированием даты, хотелось бы услышать. (это более читабельно)
FirstClientOpcode - я даже не знаю, по большему счету будет всего 2 варианта, или же это CMSG_AUTH_SESSION или CMSG_REDIRECTION_AUTH_PROOF и особой информационной составляющей не носит, так как у меня раз получилось 4 сессии
фактически вышло получилось бы следующее:
Код:
ххх_CMSG_AUTH_SESSION_ххх
ххх_CMSG_REDIRECTION_AUTH_PROOF_ххх
ххх_CMSG_REDIRECTION_AUTH_PROOF_ххх
ххх_CMSG_REDIRECTION_AUTH_PROOF_ххх
Я бы предложил писать номер сессии, в формате
SessionIndex_LogIndex
почему так спросите вы? отвечу, наша прокси позволяет включать и выключать логирование трафика и
SessionIndex в данном случае это номер сессии, а
LogIndex это порядковый номер лога. (это опционально, но желательно, если запись в отдельный файл), правда в этом случае
FirstClientOpcode уже будут разные.
2) Заголовок, я думаю вполне хватит и вот этого:
Код:
[PKT | RAW]
Version
ClientBuild
ClientLanguage
SessionKey
так как я думаю, имя файла - это информация для человека, а хедер - это техническая информация для самой тулзы.
3) и само тело снифа.
Код:
(byte)Direction;
(uint)UnixTime
(uint)TickCount
(uint)Opcode
(byte)Flags // для того чтобы выделять что это за пакет (опционально, тоже можно договорится о спецификации)
(uint)Data.Length
(byte[])Data
Жду продолжения дискуссии, а в первый пост потом можно написать результат (готовый централизованный формат снифа)