LINUX.ORG.RU

История изменений

Исправление cruz7, (текущая версия) :

даже если ты не будешь эмулировать ось и у тебя уже готовый поток, то тебе надо принять какое-то решение, как ты будешь обрабатывать ситуации ошибок и перепосылок. например, могут быть посланы разные версии одного и того же пакета (например, испорченная и перепосылка правильной). и из-за этого тебе надо будет последующие пакеты отбрасывать и перестраивать.

Согласен. По хорошему конечно нужно все это поддерживать при анализе pcap-ов: что делать с дубликатами, ретрансмитами, проверять чексуммы и т.д.

По этой причине «в лоб» сортировать по SEQ и брать это в качестве цепочки reordered пакетов не получится.

Исходная версия cruz7, :

даже если ты не будешь эмулировать ось и у тебя уже готовый поток, то тебе надо принять какое-то решение, как ты будешь обрабатывать ситуации ошибок и перепосылок. например, могут быть посланы разные версии одного и того же пакета (например, испорченная и перепосылка правильной). и из-за этого тебе надо будет последующие пакеты отбрасывать и перестраивать.

Согласен. По хорошему конечно нужно все это поддерживать при анализе pcap-ов: что делать с дубликатами, ретрансмитами, проверять чексуммы и т.д.

По этой причине «в лоб» сортировать по SEQ и брать это в качестве цепочки reordered пакетов не получится. Родился вот такой псевдокод:

[code=c] for flow in flows {

берем самый первый пакет flow

по идее это должен быть SYN с initial sequence number

nextseq = pkt->nextseq for pkt in flow { # цикл для всех остальных пакетов цепочки if pkt->seq != nextseq { # тут могут быть варианты: либо зановой посланный пакет # либо пакет из будущего, т.е. есть потерянный сегмент # все это надо как-то обработать …. } nextseq = pkt->seq … } } [/code]

Как-то так…