Проектируем TCP/IP пакет

Протокол TCP является одним из базовых протоколов транспортного уровня сети Internet. Он производительный, распознает некоторые ошибки в маршрутизации и может их исправлять.

Для передачи данных по протоколу TCP, между двумя компьютерами в сети устанавливается виртуальный канал, по которому компьютеры обмениваются данными друг с другом.

Для идентификации TCР/IP пакета в TCP-заголовке существуют два 32-разрядных идентификатора: Sequence number и Acknowledgement number.

В заголовке IP существует также поле Identification, оно не такое длинное (в два раза меньше чем предыдущие), но чтобы осуществить атаку, взломщику надо также подобрать это поле.

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

В сети можно найти не мало генераторов пакетов с возможностью их дальнейшей отсылки, при нажатии на generate выводится около сотни байт с нулевыми значениями, далее вы меняете нули на цифры и отправляете. Очень часто, генераторы пакетов прилагаются к сниферам, это может помочь вам начать работу не с нулевого пакета, а с частично заполненного.

Для генерации пакетов, вам потребуются несколько программ:

Генератор пакетов (например, Packet Excalibur 1.0 или любой другой);

Bin-Hex-Dec Calculator (например, Макрокалкулятор 1.01, автор Мацкевич А.Г. mag3d@rambler.ru 2002)

Нулевой пакет должен выглядеть так:

________1__2__3__4__5__6__7__8__9_10_11_12_13_14_15_16

1 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ……………….

2 0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ……………….

3 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ……………….

4 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ……………….

Итак, вертикальные и горизонтальные ряды пронумерованы. Далее используется следующий формат для адресации байтов: <номер строки>;<номер байта>,<номер байта>…

Приступим к обьяснению.

1;1,2,3,4,5,6-сюда вписываем destination Mac address.

1;7,8,9,10,11,12-сюда Source mac address.

1;13,14 версия(тип) протокола Mac, обычно 1;13 имеет значение 08, а 1;14 остается 00.

1;15 тут прописывается версия протокола IP, сейчас по сети ходит четвертая, но я, встречается и шестая, при четвертой версии протокола IP, поле принимает значение 45.

1;16 определят тип сервиса протокола IP, он нам особенно не понадобится, так что оставьте 00.

2;1,2 тут прописывается длинна заголовка в байтах.

2;3,4 поле для идентификатора IP пакета.

2;5,6 поля фрагментации пакетов, обычные службы не фрагментируют пакеты передаваемые по сети, по этому 2;5 значение 40, а 2;6 остается 00.

2;7 это опция Time To Life, оно выставляется в секундах.

2;8 очень важная опция, она определяет базовый протокол (т.е. TCP, UDP), для TCP значение 06, для UDP значение 11 (тут приведены только часто используемые, если надо узнать какие значения имеют другие, смотрите RFC).

2;9,10 общая сумма IP заголовка в битах, должна быть правильная.

2;11,12,13,14 source ip address.

2;15,16 и 3;1,2 destination ip address.

Далее идет TCP заголовок:

3;3,4 source port.

3;5,6 destination port.

3;7,8,9,10 Sequence number.

3;11,12,13,14 Acknowledgement number.

3;15 длина заголовка в байтах.

3;16 это тоже очень важная строка, тут мы должны написать будет ли это syn-пакет или ack-пакет, для ack-пакета значение будет 10, для ack- push 18, ack- push- fin 19, ack- push-syn- fin 1 B, ack- push-reset 1c, ack- push-syn- reset 1 e, ack-syn- fin- push- reset 1 f, ack- fin 11, ack- syn 12, ack- syn- fin 13, ack- reset 14, ack- fin- reset 15, ack- syn-reset 16, fin 21, syn 22, syn- fin 23, reset 24, syn- reset- fin 27.

4;1,2 это window pointer, счетчик пакетов и еще кое-что чего я не знаю, можете оставить на нуле, или написать че-нить типа 40 E8.

4;3,4 контрольная сумма, или так называемые контрольные весы, которые взвешивают пакет перед передачей, как я ранее сказал, протокол TCP может распознавать ошибки и исправлять их, так что можете вписать сюда что-нибудь от фонаря.

4;5,6 это urgent pointer, его мы затрагивать не будем, оставляем 00 00.

Все на этом стандартный пакет заканчивается, правда есть еще tcp options, но бывают они редко, и место их положение не всегда одинаково, за tcp options идет Data field, в котором может передаваться абсолютно все, от рисунка до текста.

Ну вот мы и рассмотрели структуру пакета tcp/ip, надеюсь вы извлекли из этой работы максимум пользы. Желаю удачи в генерировании пакетов.