raw sockets как должен выглядить пакет

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by je0n, 12 Jul 2006.

  1. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Я хочу отправить GET запрос на 80 порт через raw-sockets. Но кое-чего не понимаю. Как должен выглядить пакет. Я понял вот так:
    сначала идет IP-пакет, сразу после него идет TCP-пакет, а вот куда писать GET / HTTP 1.o\r\n\r\n я че-то не втыкну.
    Сразу после Ip и TCP пакетов сувать HTTP запрос?
     
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    механизм установки tcp соединения такой ( С - клиент, S - сервер): пакет №1: C -> S SYN запрос на соединение. пакет№2: С <- S SYN/ACK (подтверждаю) пакет№3: C -> S ACK ( оке ). С выравниванием номеров последовательностей, пересчетом контрольных сумм и тд.
    Теперь соединение установлено.Отправлять данные в хвосте tcp заголовка с указанием в соответствующих полях портов, размеров, номеров последовательностей, пересчета контрольных сумм и тд. структура пакета: [IPv4][TCP][payload]... терь решай нужен ли те необоснованный гимор...
     
    #2 sn0w, 13 Jul 2006
    Last edited: 13 Jul 2006
    1 person likes this.
  3. Rabid Rabbit

    Rabid Rabbit Elder - Старейшина

    Joined:
    31 Aug 2003
    Messages:
    161
    Likes Received:
    15
    Reputations:
    -9
    изза 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.
     
    #3 Rabid Rabbit, 13 Jul 2006
    Last edited: 13 Jul 2006
  4. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Спасибо. Я хотел делать Get запросы с левого Ip. Понял, что фиг че получиться из-за подтверждения соединения. Косяк, было бы прикольно.
     
  5. Rabid Rabbit

    Rabid Rabbit Elder - Старейшина

    Joined:
    31 Aug 2003
    Messages:
    161
    Likes Received:
    15
    Reputations:
    -9
    Если хочешь делать хттп-запросы с левого ИП - заюзай хттп-прокси.
     
  6. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    не-е-е-е, мне просто надо в большом количестве и каждое соединение с другого Ip. Ну и запрос должен отличаться некоторыми символами
     
  7. da_ff

    da_ff Elder - Старейшина

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    Если тебе неважно какой именно ip то можно собрать большой список проксей.
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    Если задача состоит в имитации распределенной дос атаки сервера хттп запросами с целью загрузки вычислительной мощности, то как вариант подходят SYN и тд штормы со спуфингом ip адреса, тк тут играет роль загрузкиа tcp стека атакуемой машины. Правда не все провы пропускают левые пакеты, но у меня это позволяет имитировать до 65000 машин подсети.
     
  9. Rabid Rabbit

    Rabid Rabbit Elder - Старейшина

    Joined:
    31 Aug 2003
    Messages:
    161
    Likes Received:
    15
    Reputations:
    -9
    sn0w Чет я не понял эту твою фразу (выделено красным):
    Ты хоть соображаешь какую околесицу ты несешь?

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