Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Конечно, не TCP поток. На raw сокете ты получишь IP. А... 20.01.09 07:07 Число просмотров: 1364
Автор: void <Grebnev Valery> Статус: Elderman
|
> Если собранный TCP поток - то уже начинаю искать пепел, > чтобы посыпать голову :-) Конечно, не TCP поток. На raw сокете ты получишь IP. А дальше посыпать пеплом голову будет тот, кто будет делать всё дальше. Сделать нориальный софт здесь - непросто и многодельно. Вкратце и в первом приближении надо:
1) фильтровать IP пока не получишь первые 4 TCP пакета хендшейка (SYN, SYN ACK, ACK, ACK) для http порта интересующего хоста.
2) фильтровать начальные пакеты TCP с установкой опций инициализации и настройки соединения (SACK и т.д.), что впрочем бывает весьма редко. Можно и не фильтровать - всё расно длина данных TCP будет = 0. Т.е. это только заголовки IP+заголовки TCP.
3) фильтровать TCP пайлоад - учитывать IP пакеты содержащие TCP в битами PUSH или PUSH ACK от ремоут хоста. ACK пакеты можно отбрасывать (там длина данных = 0).
4) вести вектор буферов аналогично списку TCB TCP c анализом последовательности байт из заголовка TCP отправителя. Если соединение хорошее (например локальная сеть), то в простейшем случае повторых передач не должно быть. И кроме того в простейшем и благоприятном случае очерёдность пакетов отправителя будет соответствовать правильной последовательности байт TCP стрима - тогда просто дописывам пайлоад в конец буфера и инкриментируем свои счётчики последовательности принятых байт.
5) продолжать это безобразие пока:
- соединение не завершено (флаги FIN, FIN ACK)
или
- аварийно прекращено одной из сторон (флаги RST в пакете отправителя или получателя)
или
- таймаут (сервер или клиент умерли)
Короче остаётся только посыпаться пеплом, если это (потуги) окажется неизлечимо ;) Но за нормальное денежное вознаграждение можно.
|
|
|