Разбираюсь с pcap и написанием сниферов, перехватывать и выводить в консоль tcp пакеты научился, не могу разобраться как обрезать заголовки пакетов, что бы остались только tcp данные. Первой мыслью было обрезать определенное количество байт в начале пакета но насколько я понял заголовки ethernet/ip/tcp не постоянной длинны. Есть что нибудь готовое и удобное?
реализовать снифер с восстановлением тцпшной сессии нетривиальная задача. тут передется поддержать как минимум переупорядочивание пакетов( в рамках окна они могут приходить в произвольном порядке - вплодь до данных после фина ), нормализацию пакетов( данные в пакетах могут перекрываться ), логика работы с окном, логика открытия/закрытия/сброс сессии, фрагментация, таймеры, поддержка icmp, разные экзотические рфц( данные на сине, данные на фине ) - эт только что вспомнил. также нужно задуматься по необходимости и о безопасности самого снифера - защита от синфлуда, лимиты на данные - без лимитов атакующий может выжрать 4гига оперативы на одну тцп сессию.гугли tcp reassembler ну и слово ids туда по желанию приписать.
чьи исходники смотрел:
- bro - реализует почти все что описал( реализация убога, хоть сам бро и популярен )
- snort - вроде как достаточно полная реализация тцп стека для ids ну и сам пакет достоен уважения
- lwip - позицианируют себя как легковесный ип-стек для встраиваемых систем. заточен на наименьшее потребление ресурсов в жертву производительность( песец наступает прямопропорционально количеству тцп сессий ). достаточно тривиально перезатачивается на производительность.
- и что-то там про vortex-ids и ряд других уже не помню. гугли.