Я хочу отправить GET запрос на 80 порт через raw-sockets. Но кое-чего не понимаю. Как должен выглядить пакет. Я понял вот так: сначала идет IP-пакет, сразу после него идет TCP-пакет, а вот куда писать GET / HTTP 1.o\r\n\r\n я че-то не втыкну. Сразу после Ip и TCP пакетов сувать HTTP запрос?
механизм установки tcp соединения такой ( С - клиент, S - сервер): пакет №1: C -> S SYN запрос на соединение. пакет№2: С <- S SYN/ACK (подтверждаю) пакет№3: C -> S ACK ( оке ). С выравниванием номеров последовательностей, пересчетом контрольных сумм и тд. Теперь соединение установлено.Отправлять данные в хвосте tcp заголовка с указанием в соответствующих полях портов, размеров, номеров последовательностей, пересчета контрольных сумм и тд. структура пакета: [IPv4][TCP][payload]... терь решай нужен ли те необоснованный гимор...
изза GET мутить ТАКОЕ? ты лучше скажи зачем? Если ты начитался "умных" статей про спуфинг то забудь, для TCP не покатит. Впрочем как хочешь, на вот, лови: Code: //Подробно IP протокол описан в RFC за номером 791. typedef struct _IPHeader{ UCHAR len:4, ver:4; // версия и длина заголовка (4 бита версия и 4 бита длина) UCHAR tos; // тип сервиса USHORT length; // длина всего пакета USHORT id; // Id (идентификатор, используется для сборки фрагментов, все фрагменты имеют одинаковый id) USHORT offset; // флаги и смещения #define IP_DF 0x4000 // dont fragment flag #define IP_MF 0x2000 // more fragments flag UCHAR ttl; // TTL (time to live) - время жизни UCHAR proto; // протокол USHORT chksum; // контрольная сумма ULONG src; // IP-адрес отправителя ULONG dest; // IP-адрес назначения }sIPHeader, *pIPHeader; //далее идут параметры (до 320 бит) //далее идут данные (до 65535 быйт минус заголовок) - в твоем случае TCP-фрейм Поле pIPHeader->proto (определены в winsock.h = [1], только в winsock2.h - [2]): IPPROTO_IP // 0 [1] IPPROTO_ICMP // 1 [1] IPPROTO_IGMP // 2 [1] IPPROTO_GGP // 3 [1] IPPROTO_TCP // 6 [1] IPPROTO_PUP // 12 [1] IPPROTO_UDP // 17 [1] IPPROTO_IDP // 22 [1] IPPROTO_IPV6 // 41 [2] IPPROTO_ND // 77 [1] IPPROTO_ICLFXBM // 78 [2] IPPROTO_RAW // 255 [1] IPPROTO_MAX // 256 [1] //это просто си-константа, не более (макс значение чар=255) // TCP header. Per RFC 793, September, 1981. In Little Endian typedef struct _TCPHeader{ USHORT sport; // порт источника USHORT dport; // порт назначения ULONG sqn; // номер последовательности ULONG ack; // номер подтверждения UCHAR x2:4, off:4; // x2-не исп., off-смещение данных UCHAR flags; // флаги #define F_FIN 0x01 #define F_SYN 0x02 #define F_RST 0x04 #define F_PSH 0x08 #define F_ACK 0x10 #define F_URG 0x20 USHORT win; // окно USHORT chcksm; // контрольная сумма USHORT urp; // указатель важности (urgent pointer) ULONG opt1; // опции (необязательное) USHORT opt2; // опции (продолжение) USHORT res; // выравнимание до 32 UCHAR data[]; // данные }sTCPHeader, *pTCPHeader; Чем собирать пакеты с нуля, намного проще заюзать халявную (для некоммерческого использования) run-time либу WinpkFilter от ntkernel.com, которая позволяет реализовать прозрачную фильтрацию и обработку пакетов в user mode. Скачать её можно отсюда: WinpkFilter.
Спасибо. Я хотел делать Get запросы с левого Ip. Понял, что фиг че получиться из-за подтверждения соединения. Косяк, было бы прикольно.
не-е-е-е, мне просто надо в большом количестве и каждое соединение с другого Ip. Ну и запрос должен отличаться некоторыми символами
Если задача состоит в имитации распределенной дос атаки сервера хттп запросами с целью загрузки вычислительной мощности, то как вариант подходят SYN и тд штормы со спуфингом ip адреса, тк тут играет роль загрузкиа tcp стека атакуемой машины. Правда не все провы пропускают левые пакеты, но у меня это позволяет имитировать до 65000 машин подсети.
sn0w Чет я не понял эту твою фразу (выделено красным): Ты хоть соображаешь какую околесицу ты несешь? 1. СИН запросы с подменой адреса на данный момент не эффективны. Почему? Да потому, например, что есть такое поле как TTL и брэндмауэр при обнаружении большого к-ва запросов на открытие соединения пусть даже с разных ИП но с одинаковым значением TTL распознает такую атаку. Во-вторых можно подкопаться под поля идентификатора IP-пакета, порт источника, ISN (Initial SeqNumb). 2. SYN-пакеты практически вовсе не загружают вычислительную мощность. Если даже они прорвутся через п.1. на вычислительную мощность это очень мало повлияет. Почему? Да, очередь полуоткрытых соединений очень быстро заполнится, но тогда ядро включит механизм SYN-coocies, позволяющий нормально (при достаточной ширине канала) функционировать серверу (без использования очереди) даже в условиях жестокого SYN-флуда. 3. Нагрузить вычислительную мощность сервера можно заставив его выполнить какойнибудь трудоемкий запрос, но для этого требуется установленное соединение: т.е. сочетание терминов СИН и ХТТП здесь неуместно.