История изменений
Исправление 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]
Как-то так…