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

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


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

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



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Пример, связи с smtp-сервером.

 
 #include <windows.h>
 
 #include <winsock.h>
 
 #include <stdio.h>
 
 
 
 WSADATA ws;
 
 SOCKET s;
 
 struct sockaddr_in addr;
 
 hostent *d_addr;
 
 char text[1024];
 
 
 
 int main()
 
 {
 
   // инициализируем сокеты
 
   if (FAILED (WSAStartup (MAKEWORD( 1,1 ), &ws)))
 
   {
 
     printf("Error in WSAStartup(...)\n");
 
     return 1; }
 
 
 
   // создаем сокет
 
   s = socket (AF_INET, SOCK_STREAM, 0);
 
   if (s == INVALID_SOCKET)
 
   {
 
     printf("Error in socket(...)\n");
 
     return 1;  }
 
 
 
   // получаем адрес сервера
 
   d_addr = gethostbyname ("smtp.mail.ru");
 
   if (d_addr==NULL)
 
   {
 
     printf("Error in gethostbyname(...)\n");
 
     return 1;  };
 
 
 
   // заполняем параметры адреса
 
   addr.sin_family = AF_INET;
 
   addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
 
   addr.sin_port = htons (25);
 
 
 
   // устанавливаем соединение
 
   if (SOCKET_ERROR == (connect (s, (sockaddr *) &addr,
 
                        sizeof (addr))))
 
   {
 
     printf("Error in connect(...)\n");
 
     return 1; }
 
 
 
   // ждем ответ от сервера
 
   recv(s,text,sizeof(text),0);
 
   printf("recv - %s", text);
 
 
 
   // приветствуем сервер
 
   strcpy(text,"HELO smtp.mail.ru\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // ждем подтверждение от сервера
 
   recv(s,text,sizeof(text),0);
 
   printf("recv - %s", text);
 
 
 
   // начинаем отправлять конверт состоящий из полей
 
   // MAIL FROM: и RCPT TO: После каждого поля ждем
 
   // подтверждение
 
 
 
   // сообщаем отправителя
 
   strcpy(text,"MAIL FROM: sender@mail.ru\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // ждем подтверждение от сервера
 
   recv(s,text,sizeof(text),0);
 
   printf("recv - %s", text);
 
 
 
   // сообщаем получателя
 
   strcpy(text,"RCPT TO: receiver@mtu-net.ru\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // ждем подтверждение от сервера
 
   recv(s,text,sizeof(text),0);
 
   printf("recv - %s", text);
 
 
 
   // подаем команду, что готовы начать передачу письма
 
   strcpy(text,"DATA\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // ждем подтверждение от сервера
 
   recv(s,text,sizeof(text),0);
 
   printf("recv - %s", text);
 
 
 
   // передаем заголовок
 
 
 
   // от кого письмо
 
   strcpy(text,"FROM: sender@mail.ru\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // кому письмо
 
   strcpy(text,"TO: receiver@mtu-net.ru\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // тема письма
 
   strcpy(text,"SUBJECT: test\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // текст письма
 
   strcpy(text,"Hi!\nIt is a message for you\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // говорим, что закончили
 
   strcpy(text,"\r\n.\r\n");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
   recv(s,text,sizeof(text),0);
 
   printf("recv - %s", text);
 
 
 
   // прощаемся с сервером
 
   strcpy(text,"QUIT");
 
   send(s,text,strlen(text),0);
 
   printf("send - %s", text);
 
 
 
   // закрываем сокет
 
   closesocket(s);
 
 
 
   return 0;
 
 }
 
 


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

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




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



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


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