Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.
 
 Эта статья написана для того,что бы ознакомить вас с такой темой, как:программирование сырых(raw) сокетов(sockets)
 
 нахрена нам это нужно?.это даст вам больше возможностей в сетевом программировании,вы сможете писать разнообразные
 
 сканеры,спуферы итд. вы сможете получить полный контроль на передаваемыми пакетами.
 
 что бы понять ту пургу,которую я буду излагать дальше, вы должны обладать базовыми знаниями в программировании
 
 сокетов,если вы не имеете таковых советую прочитать 1 статью из 3-его Night Fall'a "Программирование сокетов"
 
 написанную napalmed'ом.
 
 ну что ж, поехали!
 
 как же открыть raw socket,да очень просто int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);
 
 далее структуры
 
 
 
   struct ip *iph = (struct ip *) datagram;
 
   struct tcphdr *tcph = (struct tcphdr *) datagram + sizeof (struct ip);
 
   struct sockaddr_in sin;
 
 
 
 теперь о структурах заголовков протоколов
 
 
 
 1.IP-протокол служащий для доставки пакетов до нужного адреса
 
 
 
 struct ipheader {
 
  unsigned char ip_hl:4, ip_v:4; это значит,что каждая часть 4 бита
 
  unsigned char ip_tos;
 
  unsigned short int ip_len;
 
  unsigned short int ip_id;
 
  unsigned short int ip_off;
 
  unsigned char ip_ttl;
 
  unsigned char ip_p;
 
  unsigned short int ip_sum;
 
  unsigned int ip_src;
 
  unsinged int ip_dst;
 
 };
 
 
 
  общая длина IP заголовков 20 байт
 
 -------------------------------------
 
 ip_hl:длина заголовка в 32 бита октет.это значение 5 для hl в 4 бита,бывают и другие значения
 
 в случае доп. опций в заголовке.
 
 
 
 ip_v: версия ip на момент написания статьи 4
 
 ip_tos:обычно 0. первые 3 бита представляют приоритеты роутинга,следующие тип сервиса.
 
 ip_len:общая длина ip датаграммы
 
 ip_id:id последовательности номера пакета
 
 ip_off:фрагментированный оффсет-определяющий переборку фрагментированных датаграм.
 
 первые 3 бита флаги фрагмента-первый=0,второй нефрагментируемый бит,третий для флагов или далее
 
 следующих фрагментированных пакетов
 
 ip_ttl: time to live
 
 ip_p:транспортный протокол(udp,tcp,icmp,igmp..)
 
 ip_sum:контрольная сумма
 
 ip_src:адрес отправителя
 
 ip_dst:адрес получателя
 
 
 
 2.ICMP-приложение к IP для контроля над посылаемыми и получаемыми сообщениями
 
 
 
 struct icmpheader {
 
  unsigned char icmp_type;
 
  unsigned char icmp_code;
 
  unsigned short int icmp_cksum;
 
  /* The following data structures are ICMP type specific */
 
  unsigned short int icmp_id;
 
  unsigned short int icmp_seq;
 
 };
 
  максимальная длина ICMP заголовка 8 байт
 
 --------------------------------------------
 
 icmp_type:тип ICMP сообщения(echo request..) остальные типы можно посмотреть в исходниках
 
 icmp_code:для сообщений типа(error) нужно большe? лезь в сорцы
 
 icmp_cksum:контрольная сумма
 
 icmp_id:для идентификации сообщений типа echo
 
 icmp_seq:для определения последовательности
 
 
 
 3.IGMP
 
 про спецификацию протокола IGMP можно будет прочитать в этом выпуске
 
 
 
 4.UDP-транспортный протокол передачи датаграм,нечто вроде tcp,но не имеет seq и этим плох или
 
 хорош(spoofing ;)
 
 
 
 struct udpheader {
 
  unsigned short int uh_sport;
 
  unsigned short int uh_dport;
 
  unsigned short int uh_len;
 
  unsigned short int uh_check;
 
 };
 
 
 
  общая длина заголовка 8 байт
 
 --------------------------------
 
 uh_sport:порт обмена данными клиента
 
 uh_dport:тоже самое для сервера
 
 uh_len:длина заголовка
 
 uh_check:контрольная сумма
 
 
 
 4.TCP-no comments
 
 
 
 struct tcpheader {
 
  unsigned short int th_sport;
 
  unsigned short int th_dport;
 
  unsigned int th_seq;
 
  unsigned int th_ack;
 
  unsigned char th_x2:4, th_off:4;
 
  unsigned char th_flags;
 
  unsigned short int th_win;
 
  unsigned short int th_sum;
 
  unsigned short int th_urp;
 
 };
 
 
 
  общая длина заголовка 20 байт
 
 ---------------------------------
 
 th_sport:порт клиента
 
 th_dport:порт сервера
 
 th_seq:последовательность tcp
 
 th_ack:сообщение подтверждения запроса на соединение
 
 th_x2:не используется(0)
 
 th_off:сегмент оффсета определяющий длину TCP заголовка
 
 th_flags:эта область состоит из шести двоичных флагов используемых в заголовках(th_flags=FLAG1)
 
 далее различные флаги из названия которых нетрудно догадаться их предназначение:
 
 
 
 TH_URG:,TH_ACK:,TH_PSH:,TH_RST:,TH_SYN:,TH_FIN:
 
 
 
 th_win:сумма байтов посылаемых прежде ACK
 
 
 
 th_sum:контрольная сумма
 
 
 
 к статье прилагается прога с демонстрацией полученных знаний
 
 
 
 
 
 p.s это статья писалась для BSD систем,но весь код можно с легкостью переколбасить под линукс
 
 
 
 
 
 


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS