Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

Winsock2 подключение и использование.

Posted on 2 декабря, 20138 августа, 2017 by admin

Здорова господа!

Напишем небольшую шпору по такой фигне как Winsock, это такая фигня с помощью которой создаются сетевые приложения, с помощью Winsock можно строить клиент-серверные приложения. Мы с вами разберем сначала как и что подключить и напишем простое приложение для отправки почты на smtp сервер.

[tip]Windows Sockets API (WSA), название которого было укорочено до Winsock. Это техническая спецификация, которая определяет, как сетевое программное обеспечение Windows будет получать доступ к сетевым сервисам, в том числе, TCP/IP. Он определяет стандартный интерфейс между клиентским приложением (таким как FTP-клиент или веб-браузер) и внешним стеком протоколов TCP/IP. Он основывается на API модели сокетов Беркли, использующейся в BSD для установки соединения между программами.[/tip]

1.Подключение.

И так, что же такое Winsock и с чем его едят? Если сказать в «двух словах», то Winsock это интерфейс, который упрощает разработку сетевых приложений под Windows. Всё что нам нужно знать, это то что Winsock представляет собою интерфейс между приложением и транспортным протоколом, выполняющим передачу данных.

Для того что бы подключить winsock нужно прописать в файле следующие строки:

1
2
3
//подключаем winsoch в отдельном пространстве, что бы имена не конфликтовали
#pragma comment(lib,"Ws2_32.lib")
#include <WinSock2.h>

Это походу winsock2 подключаются, чем он отличается от просто winsock я не знаю не сильно интересовался.

 

Честно скажу что то мне не сильно ахота расписывать как и что работает, наверное я просто скину сюда свой закомментированный кусок кода, он просто отправляет smtp сообщение с авторизацией. Щас его проверю получиться ли отправить, меня просто мэйл.ру забанил, типо с моего ак шлется спам и ни за шо я просто попробовал отправить на 15 мэйлов письма подряд, и из за этого появился бан и наверно по айпи, ну что то я не так явно сделал, нужно пробовать другой какой нить smtp сервер. Щас проверяю и просто кидаю примерчик кода, просто лень реально расписывать и делать как бы учебный пример. В принципе тут нечего заучивать не нада, а просто главное использовать код и все.

Короче банит меня возвращает сервер ошибку 500 и что вроде у меня с ак спам рассылался хоть с какого яб не послал, реально нихочу редактировать и делать норм пример, так что выложу всю кучу мусора:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
#pragma comment (lib,"Ws2_32.lib")
#include <winsock2.h>
#include <string>
using std::wstring;
using std::string;
#include <fstream>
using std::wifstream;
using std::ofstream;
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
 
/*void base64_encode(char *in, int inlen, char *out, int outlen)
{
static const char b64str[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
while(inlen && outlen)
{
*out++ = b64str[to_uchar (in[0]) >> 2];
if (!--outlen)
break;
*out++ = b64str[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f];
if(!--outlen)
break;
*out++ = (inlen ? b64str[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '=');
if(!--outlen)
break;
*out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
if(!--outlen)
break;
if(inlen)
inlen--;
if(inlen)
in += 3;
}
if(outlen)
*out = '\0';
}*/
 
int main()
{
int error(0);
//1.Инициализация Winsock
WSADATA ws;//содержит информацию о проинициализированной версии WinsocAPI
//MAKEWORD( 1, 1 ) - связывает версию версия 1.1
//WSAStartup() функция которая инициализирует Winsock
if (FAILED (WSAStartup (MAKEWORD( 2, 2 ), &ws) ) )
{
// Error...
error = WSAGetLastError();
cout <<"error1= "<<error<<endl;
exit(1);
}
 
//2.Создание сокета
//PF_INET-протокол семейства интернет
//SOCK_STREAM-надежный потоковый сокет
//IPPROTO_TCP-тсp протокол
SOCKET sock;
if(INVALID_SOCKET==(sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)))//создаем дескриптор сокета
{
error=WSAGetLastError();
cout <<"error2= "<<error<<endl;
exit(1);
}
 
//3.Установка соединения
struct sockaddr_in smtp_addr; //структура адресс
memset( &smtp_addr, 0, sizeof( struct sockaddr_in ) );//устанавливает в 0 все байты структуры
smtp_addr.sin_family = AF_INET;//хз. протокол какой то или ТСП или ЮДП у нас ТСП
smtp_addr.sin_addr.s_addr = inet_addr("94.100.177.1");//Устанавливаем адрес сервера
smtp_addr.sin_port = htons(587);//smtp порт для сервера обязательно 25 (80-http,23-fttp и т.д. мы должны знать на какой порт передавать данные иначе не будет соединения)
if(SOCKET_ERROR==connect( sock, ( struct sockaddr* )&smtp_addr, sizeof(smtp_addr)))
{
error=WSAGetLastError();
cout <<"error3= "<<error<<endl;
exit(1);
}
//exit(1);
// 4.Посылаем данные
char *msg[] =
                        {
                        "HELO vac9\r\n",
"AUTH LOGIN\r\n",
"xxxxxxx\r\n",//тут в мессто крестиков вводите ваш емэйл адресс в кодировкt base64
"xxxx\r\n",//тут вместо крестиков вводите ваш пароль закодирован в base64
                        "MAIL FROM:<neovich@mail.ua>\r\n",
                        "RCPT TO:<neovich@mail.ua>\r\n",
                        "DATA\r\n",
                        "Subject:hello\r\n",
                        "Hellow world gacpada \r\n\n.\r\n",
                        "CRLF.CRLF\r\n",
"QUIT\r\n"
                        //тукст самого сообщения
                        };
/* if (SOCKET_ERROR == ( send(sock, (char* ) & buff), 512, 0 ) )
{
Error...
error = WSAGetLastError();
...
}*/
int res(0);
int snum=(0);
/*fd_set read_s;
FD_ZERO (&read_s); // Обнуляем мнодество
FD_SET (sock, &read_s); // Заносим в него наш сокет
timeval time_out; // Таймаут
time_out.tv_sec = 4;
time_out.tv_usec = 5; //Таймаут 0.5 секунды.*/
//   if (SOCKET_ERROR == (res = select (0, &read_s, NULL, NULL, &time_out) ) )return -1;
 
cout <<"msg[num]= "<<msg[snum]<<endl;
    if( send( sock, msg[snum], strlen(msg[snum]), 0 )<0 )
{
 
error=WSAGetLastError();
cout <<"error4= "<<error<<endl;
closesocket( sock );
WSACleanup();
exit(1);
    }
int actual_len = 0;
char buff[3000];
//cout <<"sizeof(buff)= "<<sizeof(buff)<<endl;
memset(buff,'\0',sizeof(buff));
if (SOCKET_ERROR == (actual_len = recv (sock, buff, 3000, 0 ) ) )
{
// Error...
error = WSAGetLastError();
cout <<"error5= "<<error<<endl;
exit(1);
// ...
}
cout <<"buff= "<<buff<<endl;
 
    snum++;
 
cout <<"msg[1]= "<<msg[1]<<endl;
send( sock, msg[1], strlen(msg[1]), 0 );
memset(buff,'\0',3000);
recv (sock,buff, 3000, 0 );
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[2]= "<<msg[2]<<endl;
send(sock,msg[2],strlen(msg[2]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[3]= "<<msg[3]<<endl;
send(sock,msg[3],strlen(msg[3]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[4]= "<<msg[4]<<endl;
send(sock,msg[4],strlen(msg[4]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[5]= "<<msg[5]<<endl;
send(sock,msg[5],strlen(msg[5]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[6]= "<<msg[6]<<endl;
send(sock,msg[6],strlen(msg[6]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[7]= "<<msg[7]<<endl;
send(sock,msg[8],strlen(msg[7]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[8]= "<<msg[8]<<endl;
send(sock,msg[8],strlen(msg[8]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[9]= "<<msg[9]<<endl;
send(sock,msg[9],strlen(msg[9]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
cout <<"msg[10]= "<<msg[10]<<endl;
send(sock,msg[10],strlen(msg[10]),0);
memset(buff,'\0',3000);
recv(sock,buff,3000,0);
cout <<"buff= "<<buff<<endl;
 
closesocket( sock );
cout <<"done"<<endl;
 
return 0;
}
 
/*
#include <winsock2.h>
#include <stdio.h>
#include <cstdlib>
using std::exit;
#include <iostream>
using std::cout;
using std::endl;
 
#pragma comment(lib, "ws2_32.lib")
 
#define host "smtp.mail.ru"
#define port 587
#define clit "TESTCLIENT"
#define user "neovich@mail.ua"
#define pass "mazday"
#define from "neovich@mail.ua"
#define to "neovich@mail.ua"
#define theme "This is theme"
#define mail "This is mail. You read this mail? I'am Ok? da ebanui vrot"
 
SOCKET s;//сокет
char debug[8192];//просто буфер
bool stopdebug = false;//какой то флаг
 
//похоже принимает два указателя на чар и возвращает сам хост в виде ip вторым параметром
BOOL GetIpByHostName(PCHAR pHostName, PCHAR pIp, DWORD dwIpSize)
{
hostent *pHosten;
if(!(pHosten = gethostbyname(pHostName)))
{
return 0;
}
 
//это важная походу строка
//inet_ntoa() преобразует интернет адрес в десятично-тосечный формат
//PCHAR-указатель на char
//если
if((unsigned int)lstrlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize)
{
return 0;
}
//функция копирования в pIp адреса
lstrcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
 
return 1;
}
 
char to_uchar(char ch)
{
return ch;
}
 
void base64_encode(char *in, int inlen, char *out, int outlen)
{
static const char b64str[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
while(inlen && outlen)
{
*out++ = b64str[to_uchar (in[0]) >> 2];
if (!--outlen)
break;
*out++ = b64str[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f];
if(!--outlen)
break;
*out++ = (inlen ? b64str[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '=');
if(!--outlen)
break;
*out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
if(!--outlen)
break;
if(inlen)
inlen--;
if(inlen)
in += 3;
}
if(outlen)
*out = '\0';
}
 
void SendCommand(char *cmd)
{
cout <<"cmd= "<<cmd<<endl;
char command[1024];memset(command,'\0',1024);
sprintf(command,"%s\r\n",cmd);
 
send(s,command,strlen(command),0);
if(!stopdebug)
{
memset(command,'\0',1024);
 
recv(s,command,sizeof(command),0);//получаем ответ от сервера
cout <<"command= "<<command<<endl;
strcat(debug,command);
 
if(command[0]=='3'&&command[1]=='5'&&command[2]=='4')
stopdebug = true;
}
 
Sleep(150);
}
 
int main()
{
WSAData wsaData;//объект Winsock
sockaddr_in ssin;//адрес куда будет отправляться запрос
char user64[256],pass64[256];//имя и пароль в кодировке base64 (переменные для них)
base64_encode(user,strlen(user),user64,256);//переводим логив в base64
base64_encode(pass,strlen(pass),pass64,256);//переводим пароль в base64
char cIp[17];//адресс сервера
memset((char *)&ssin,0,sizeof(ssin));//заполняем нулями адресс ssin в 0 бит
memset(cIp,'\0',17);//заполняем нулями адресс сервера
WSAStartup(MAKEWORD(2,2),&wsaData);//производим инициализацию Winsock
GetIpByHostName(host,cIp,17);//получаем ip адресс хоста именно в виде ip
 
s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//создаем сокет
//делаем адресс
ssin.sin_family = AF_INET;
ssin.sin_port = htons(port);
ssin.sin_addr.s_addr = inet_addr(cIp);//нужно инициализировать именно строкой
connect(s,(SOCKADDR *)&ssin,sizeof(ssin));//создаем соединение
 
char buff[3000];
char g[1024];memset(g,'\0',1024);//создаем буфер и делаем его строкой
 
sprintf(g,"HELO %s\r\n",clit);//записываем в буфер название клиента
cout <<"g= "<<g<<endl;
send( s, g, strlen(g), 0);
memset(buff,'\0',sizeof(buff));
recv (s,buff, 3000, 0 );
cout <<"buff= "<<buff<<endl;
 
//SendCommand(g);//отправляем буфер
//SendCommand("AUTH LOGIN");//отправляем две строки
//SendCommand(user64);
//SendCommand(pass64);
//exit(1);
Sleep(150);
memset(g,'\0',1024);
sprintf(g,"AUTH LOGIN");
// sprintf(g,"%s\r\n",g);
cout <<"g= "<<g<<endl;
// send( s, g, strlen(g), 0);
memset(buff,'\0',sizeof(buff));
// recv(s,buff,sizeof(buff),0);
cout <<"buff= "<<buff<<endl;
 
char* cmd=g;
cout <<"cmd= "<<cmd<<endl;
char command[1024];memset(command,'\0',1024);
sprintf(command,"%s\r\n",cmd);
 
send(s,command,strlen(command),0);
if(!stopdebug)
{
memset(command,'\0',1024);
 
recv(s,command,sizeof(command),0);//получаем ответ от сервера
cout <<"command= "<<command<<endl;
strcat(debug,command);
 
if(command[0]=='3'&&command[1]=='5'&&command[2]=='4')
stopdebug = true;
}
Sleep(150);
 
cout <<"done"<<endl;
// exit(1);
 
//SendCommand("AUTH LOGIN");//отправляем две строки
SendCommand(user64);
SendCommand(pass64);
 
memset(g,'\0',1024);
sprintf(g,"MAIL FROM:<%s>",from);
SendCommand(g);
 
memset(g,'\0',1024);
sprintf(g,"RCPT TO:<%s>",to);
SendCommand(g);
 
SendCommand("DATA");
 
memset(g,'\0',1024);
sprintf(g,"From: %s",from);
SendCommand(g);
 
memset(g,'\0',1024);
sprintf(g,"To: %s",to);
SendCommand(g);
 
memset(g,'\0',1024);
sprintf(g,"Reply-To: %s",from);
SendCommand(g);
 
memset(g,'\0',1024);
sprintf(g,"Subject: %s",theme);
SendCommand(g);
 
SendCommand("\r\n");
 
SendCommand(mail);
 
SendCommand("\r\n.");
 
SendCommand("QUIT");
 
closesocket(s);
 
WSACleanup();
 
MessageBox(0,debug,"DEBUG",0);
 
return 0;
}*/

 

Кстати скажу эта прога рабочая в ней нужно только свой логи и пароль закодировать в  base64 кодировке и подставить в smtp запрос. Кто захочет тот в этом коде разберется пусть хоть он и грязный с разными дополнительными фигнями закомментированными зато полный.

Есть еще у меня прога мини бот так сказать для мэйл, я его тоже видимо весь код выложу в свободный доступ, меня правда и забанили мой мэйл когда я им рассылал.

От вообщем ссылка на него БОТ ДЛЯ MAIL.RU .

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (37)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant