TCP: Как генерируются числа seq/ack?

В настоящее время я работаю над программой, которая обнюхивает пакеты TCP, которые отправляются и принимаются на и с определенного адреса. То, что я пытаюсь выполнить, - это отвечать на индивидуальные индивидуальные пакеты на определенные принятые пакеты. У меня уже есть синтаксический анализ. Я уже создал корректные Ethernet, IP и, по большей части, TCP-пакеты.

Единственное, что я не могу понять, это определить значения seq/ack.

В то время как это может быть неуместно для проблемы, программа написана на С++ с использованием WinPCap. Я прошу какие-либо советы, статьи или другие ресурсы, которые могут мне помочь.

Ответ 1

Когда установлено соединение TCP, каждая сторона генерирует случайное число в качестве своего начального порядкового номера. Это строго случайное число: существуют проблемы с безопасностью, если кто-либо в Интернете может угадать порядковый номер, так как он может легко подделать пакеты для внедрения в поток TCP.

После этого для каждого переданного байта порядковый номер будет увеличиваться на 1. Поле ACK - это порядковый номер другой стороны, отправляемый обратно для подтверждения приема.

RFC 793, оригинальная спецификация протокола TCP, может оказать большую помощь.

Ответ 2

У меня такая же работа. Во-первых, исходное seq # будет генерироваться случайным образом (0-4294967297). Затем приемник будет считать длину полученных данных и отправит ACK от seq# + length = x отправителю. Последовательность будет х, и отправитель отправит данные. Точно так же приемник будет считать длину x + length = y и отправить ACK как y и т.д.... Как он генерируется seq/ack...

Если вы хотите показать, что он практически пытается обнюхать пакет в Wireshark и следить за потоком TCP и видеть сценарий...

Ответ 3

Если вы правильно поняли - вы пытаетесь установить атаку TCP SEQ для прогнозирования. В этом случае вы захотите изучить особенности вашего целевого генератора Initial Sequence Number.

Широко распространены уязвимости в значительной степени все основные ОС, что их генераторы ISN являются предсказуемыми. Я не следил за последствиями, но я понимаю, что большинство вендоров выпустили исправления для рандомизировать свои интервалы ISN.

Ответ 4

Похоже, что остальные ответы объясняли почти все, где найти подробную и официальную информацию об ACK, а именно TCP RFC

Вот более практичная и "понятная" страница, которую я обнаружил, когда я делал подобные реализации, которые также могут помочь Анализ TCP - Раздел 2: Последовательность и Номера подтверждений

Ответ 5

RFC 793 раздел 3.3 охватывает порядковые номера. В прошлый раз, когда я писал код на этом уровне, я думаю, что мы просто сохранили счетчик для повторяющихся порядковых номеров.

Ответ 6

Эти значения ссылаются на ожидаемые смещения начала полезной нагрузки для пакета относительно начального порядкового номера для соединения.

Ссылка

Номер последовательности (32 бит) - имеет двойную role Если флаг SYN установлен, то это - начальный порядковый номер. порядковый номер фактического первого тогда байт данных будет такой последовательностью число плюс 1. Если флаг SYN не set, то это порядковый номер первого байта данных

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

Ответ 7

Номера произвольно сгенерированы с обеих сторон, а затем увеличиваются по количеству байтов (байтов).

Ответ 8

Последовательные номера увеличиваются после установления соединения. Исходный порядковый номер на новом соединении идеально выбирается случайным образом, но многие ОС имеют некоторый полуслучайный алгоритм. RFC - лучшее место, чтобы узнать больше TCP RFC.