Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   raw sockets как должен выглядить пакет (https://forum.antichat.xyz/showthread.php?t=21656)

je0n 12.07.2006 19:47

raw sockets как должен выглядить пакет
 
Я хочу отправить GET запрос на 80 порт через raw-sockets. Но кое-чего не понимаю. Как должен выглядить пакет. Я понял вот так:
сначала идет IP-пакет, сразу после него идет TCP-пакет, а вот куда писать GET / HTTP 1.o\r\n\r\n я че-то не втыкну.
Сразу после Ip и TCP пакетов сувать HTTP запрос?

sn0w 13.07.2006 13:14

механизм установки tcp соединения такой ( С - клиент, S - сервер): пакет №1: C -> S SYN запрос на соединение. пакет№2: С <- S SYN/ACK (подтверждаю) пакет№3: C -> S ACK ( оке ). С выравниванием номеров последовательностей, пересчетом контрольных сумм и тд.
Теперь соединение установлено.Отправлять данные в хвосте tcp заголовка с указанием в соответствующих полях портов, размеров, номеров последовательностей, пересчета контрольных сумм и тд. структура пакета: [IPv4][TCP][payload]... терь решай нужен ли те необоснованный гимор...

Rabid Rabbit 13.07.2006 14:57

изза GET мутить ТАКОЕ? ты лучше скажи зачем? Если ты начитался "умных" статей про спуфинг то забудь, для TCP не покатит. Впрочем как хочешь, на вот, лови:
Код:

//Подробно 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.

je0n 14.07.2006 12:17

Спасибо. Я хотел делать Get запросы с левого Ip. Понял, что фиг че получиться из-за подтверждения соединения. Косяк, было бы прикольно.

Rabid Rabbit 14.07.2006 16:29

Если хочешь делать хттп-запросы с левого ИП - заюзай хттп-прокси.

je0n 14.07.2006 19:05

не-е-е-е, мне просто надо в большом количестве и каждое соединение с другого Ip. Ну и запрос должен отличаться некоторыми символами

da_ff 14.07.2006 22:07

Цитата:

Сообщение от je0n
не-е-е-е, мне просто надо в большом количестве и каждое соединение с другого Ip

Если тебе неважно какой именно ip то можно собрать большой список проксей.

sn0w 19.07.2006 11:12

Если задача состоит в имитации распределенной дос атаки сервера хттп запросами с целью загрузки вычислительной мощности, то как вариант подходят SYN и тд штормы со спуфингом ip адреса, тк тут играет роль загрузкиа tcp стека атакуемой машины. Правда не все провы пропускают левые пакеты, но у меня это позволяет имитировать до 65000 машин подсети.

Rabid Rabbit 27.07.2006 15:21

sn0w Чет я не понял эту твою фразу (выделено красным):
Цитата:

Если задача состоит в имитации распределенной дос атаки сервера хттп запросами с целью загрузки вычислительной мощности, то как вариант подходят SYN и тд штормы со спуфингом ip адреса <скип>
Ты хоть соображаешь какую околесицу ты несешь?

1. СИН запросы с подменой адреса на данный момент не эффективны. Почему? Да потому, например, что есть такое поле как TTL и брэндмауэр при обнаружении большого к-ва запросов на открытие соединения пусть даже с разных ИП но с одинаковым значением TTL распознает такую атаку. Во-вторых можно подкопаться под поля идентификатора IP-пакета, порт источника, ISN (Initial SeqNumb).
2. SYN-пакеты практически вовсе не загружают вычислительную мощность. Если даже они прорвутся через п.1. на вычислительную мощность это очень мало повлияет.
Почему? Да, очередь полуоткрытых соединений очень быстро заполнится, но тогда ядро включит механизм SYN-coocies, позволяющий нормально (при достаточной ширине канала) функционировать серверу (без использования очереди) даже в условиях жестокого SYN-флуда.
3. Нагрузить вычислительную мощность сервера можно заставив его выполнить какойнибудь трудоемкий запрос, но для этого требуется установленное соединение: т.е. сочетание терминов СИН и ХТТП здесь неуместно.


Время: 20:42