Kselax.ru

Hacker Kselax — the best hacker in the world

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

Небольшой парсер бот для mail.ru

Posted on 2 декабря, 20133 декабря, 2013 by admin

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

Рассмотрим парсер бот для mail.ru, ну это обычная прога она парсит мэйлы с определенных страниц сайта mail.ru и затем устанавливает соединение с smtp-сервером и рассылает на эти спарсенные мэйлы сообщения.Я вообще думал написать там несколько статей, хотел сделать акцент на некоторых деталяк curl, да и вообще эта тема такая смутная, curl вообще не такое универсальное средство как оказалось. Ладно буду описывать своими словами, так что как получиться так получиться. Я просто опишу саму программку что она делает, а дальше код выложу в конце, пока не забыл что она делает, лучше сразу задокументирую. В общем начнем.

Что этотот бот-прога делает, она делает авторизацию на сайте mail.ru с помощью curl, curl отправляет http запрос на сайт mail.ru страницу обработчика формы авторизации. http запрос отправляется post, для того что бы определить на какой url отправлять этот запрос нужно смотреть http заголовки которые отправляет браузер серверу mail.ru. У меня например установлен браузер firefox в нем я установил плагин для просмотра http зоголовков называется он LiveHTTPHeaders, устанавливайте его и смотрите какие заголовки отправляет ваш браузер на ваши клики мышки, просто это нам нужно что бы определить реальные обработчики, на которые нам нужно будет программно посылать запросы, мы просто их подделаем.

Ну от я определил нужный мне урл это: https://auth.mail.ru/cgi-bin/auth?from=splash , от на этот урл мы отправляем post- запрос для авторизации, с помощью curl отправляем, дальше после авторизации мы просто уже переходим на нужную страницу с которой будем парсить данные. Мне нужно было перейти на страницу с ответами на вопросы раздел «карьера работа» категория «подработка» ну я точно не помню как оно звучит, в общем есть страница с которой мы будем парсить данные, на нее перейти нужно. Тут мне конечно пришлось повозиться, при парсе этой страницы я ее считывал да базара нет, но увы данные которые мне были нужны они подгружались с помощью аякс и я их не мог получить, так как мой код не мог выполнить javascript код и подгрузить так же как браузер данные с аякс запроса. Долго я мучился над этой проблемой, пришлось в ручную просматривать http заголовки браузера, те заголовки который он отправляет, и в ручную по ним переходить, по каждому заголовку, это нужно для того что бы определить урл нужных нам данных, да таким несложным макаром я определил нужный мне урл, на который нужно переходить после авторизации. Опять же для того что бы перейти на этот урл нужно curl поменять настройки что б он уже отправлял get запрос, а потом уже переходить на этот урл, потому что этот урл get урл.

Ну что ж считываю я с этого урла нужные мне данные, это данные оказываются с вопросами от пользователей, там пользователь задает вопросы и там можно посмотреть mail-ы каждого пользователя и спарсить их. Получается можно спарсить мэйлы целевой аудитории и отослать им свои сообщения, в общем считал я все данный записал в файл и сохранил на диск. Короче все mail-ы сохранил на диск.

Дальше мне нужно было отправить на эти мэйлы сообщения. Да пытался я в тот же самый файл подкючить и winsock да от увы ничего не получилось, просто конфликт имен получается, ну если конфликт имен удавалось подавить мы просто создаем новое пространство имен, то увы макросы конфликтовали, у них как на зло были одни и те же имена что у curl что и у winsock2.h так что я решил создать новый класс который будет отсылать сообщения на спарсеные мэйлы.

Да класс удачно создал, подключил в нем winsock. Вызывал я этот класс после работы класса с curl. Почему я не отправлял письма с помощью curl спросите вы! Да я вас скажу не получилось, я видел пример формирования curl-запроса для отправки smtp, но увы там у меня не определялись некоторые curl переменные, которые нужно устанавливать для отправки smtp, да я и не сильно смотрел почему все так происходит и не работает, конечно пытался гуглить, но мне хотелось еще и winsock поиспользовать, тем более я до этого разбирал примеры кода с его использованием для отправки писем.

Ну что ж создал я этот новый класс который будет читать файл со спарсеными мэйл и должен отсылать на них сообщение. Да мэйл отсылал с помощью winsock, и меня как назло забанили я от отослал наверно быстро несколько мэйлов ну примерно 15 — 20 и сразу бан получить и уже 2 дня я не могу отослать с помощью этой программки письма. Я думаю видимо я не правильно подделал smtp запрос, его нужно имитировать, что б он был таким как будто эти сообщения рассылает какой нить почтовый клиент, нужно было максимально сымитировать запрос под какой нить известный smtp клиент, там нужно отправлять серверу все те заголовки которые ему б отправляла программа, но она у меня некоторые отправляла, я боюсь что не все, просто простейший запрос был. Да еще была небольшая проверка с отправкой ссылок, я поэтому и хочу задокументировать эту программку, что б потом можно было если что подсмотреть, у меня просто не получалось отправить сообщение в виде html кода, простой текст отправлялся, но там оказывается что б отправить сообщение в виде html кода нужно в тело сообщения добавить строки Content-type text/html, ну я точно не помню какие там в примере посмотрите, это просто делаю акцент на важных моментах проги.

И еще скажу что можно эту прогу использовать да меня сервер smtp.mail.ru забанил, но мы можем через другой сервер рассылать сообщения например через google или яндекс почту ну либо какой нить другой, я честно после этого не сильно понимаю как работает почта ну да ладно выскажу свои мысли возможно позже. Итак меня забанили короче, но код проги я выложу просто для шпоры. Код конечно сырой, скажем так дилетантом писан, требует конечно доработок. Это я делаю что б он случайно у меня на компе не пропал и был всегда под рукой в инете если понадобиться. все больше не буду добавлять ни чего, статья и так походу большая получается, да еще и своими словами писаная, короче можно сказать бред, но я и не ставил целью вас все понять, а тем более новичков.

От класс для парса mail.ru, файл class_mail.h:

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
#ifndef CLASS_MAIL_H
#define CLASS_MAIL_H
 
#include <string>
using std::string;
#include <vector>
using std::vector;
 
//подключаем curl
#include "curl/curl.h"
#pragma comment(lib,"curllib.lib")
 
class Mail
{
CURL* curl; //объект curl
CURLcode res; //код ошибки после запроса
 
string url_dologin; //адрес куда нужно делать запрос (url-авторизации)
string url_user; //url-куда мы будем переходить после авторизации
string user_name; //e-mail
    string password; //pass
string post_data; //данные пост запроса
string str_web; //переменная для считанных данных
 
void pars_mail(); //функция читает текстовый файл и парсит с него мэйлы и затем сохраняет их в файл
 
public:
Mail();
//функция которая производит авторизацию
void Autentificated();
//функция которая управляет программой
void start();
};
 
#endif

 

Файл class_mail.cpp:

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
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
using std::ostream;
#include <fstream>
using std::ofstream;
using std::ifstream;
#include <sstream>
using std::stringstream;
#include <Windows.h>
#include <cstdlib>
using std::rand;
#include <regex>
using std::regex;
using std::regex_replace;
using std::regex_search;
using std::smatch;
#include <vector>
using std::vector;
#include <map>
using std::map;
#include <algorithm>
using std::unique;
 
//подключаем curl
#include "curl/curl.h"
#pragma comment(lib,"curllib.lib")
 
#include "class_mail.h"
 
//переводит int в string
string int_to_string(int n)
{
stringstream s;
string str;
s <<n;
s >>str;
return str;
}
 
static size_t write_data(char* ptr, size_t size, size_t nmemb, string* data)
{
    if(data)
    {
        data->append(ptr,size*nmemb);
        return size*nmemb;
    }
    else return 0;
}
 
static size_t write_head(char* ptr, size_t size, size_t nmemb, ostream* stream)
{
    (*stream)<< string(ptr, size*nmemb);
    return size*nmemb;
}
 
//функция читает текстовый файл и парсит с него мэйлы и затем сохраняет их в файл
void Mail::pars_mail()
{
ifstream ifs("text.txt",ifstream::in);
if(!ifs){cerr <<"dont't open file: 'text.txt'"<<endl; exit(1);}
string s,text;
while(getline(ifs,s)) text+=s;
ifs.close();
 
vector<string> v;
smatch sm;
while(regex_search(text,sm,regex("\"([^\"]*@mail\\.[^\"]*)\"",std::regex_constants::icase)))
{
v.push_back(sm[1].str());
text=sm.suffix().str();
}
sort(v.begin(),v.end());
vector<string>::iterator it;
it=unique(v.begin(),v.end());
v.resize(std::distance(v.begin(),it));
 
ofstream ofs("text1.txt",ofstream::out);
if(!ofs){cerr <<"don't open file: 'text1.html'"<<endl;exit(1);}
for(int i=0;i<v.size();i++)ofs <<v[i]<<endl;
ofs.close();
}
 
Mail::Mail()
{
ofstream ofs("text.txt",ifstream::out);
//ifs1 <<" "<<endl;
if(ofs)ofs.close();
 
ifstream ifs("config.txt",ifstream::in);
if(!ifs){cerr <<"don't open file 'config.txt'"<<endl;exit(1);}
ifs.ignore(255,' ');
ifs >>url_dologin;
ifs.ignore(255,' ');
ifs >>user_name;
ifs.ignore(255,' ');
ifs >>password;
ifs.ignore(255,' ');
ifs >>url_user;
if(url_dologin.size()==0||user_name.size()==0||password.size()==0||url_user.size()==0)
{cerr <<"error whatever is empty"<<endl;exit(1);}
//создание строки пост-запроса
post_data+="Domain=mail.ua";
    post_data+="&Login="+user_name;
    post_data+="&Password="+password;
    post_data+="&new_auth_form=1";
    post_data+="&saveauth=1";
}
 
//функция которая производит аутентификацию
void Mail::Autentificated()
{
curl_easy_setopt(curl,CURLOPT_URL,url_dologin.c_str());// задаем урл хоста
//сохроняем html код страницы в строку content
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&str_web);
 
//Заголовок ответа сервера выводим в консоль
curl_easy_setopt(curl,CURLOPT_HEADERFUNCTION,write_head);
curl_easy_setopt(curl,CURLOPT_WRITEHEADER,&cout);
 
//автоперенаправление
curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1);//включаем перенаправление
//max 5 перенаправлений
curl_easy_setopt(curl,CURLOPT_MAXREDIRS,10);//10 перенаправлений максимум
//разрешаем использовать cookie (разрешает куки использовать в текущем curl)
curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"");//установить куки
 
//не проверять ssl - сертификат
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,0);//без проверки SSL сертификатов
//не проверять хост ssl - сертификата
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0);//без проверки хоста SSL
 
/* POST - запрос с авторизацией (происходит получение кукисов)*/
curl_easy_setopt(curl,CURLOPT_POSTFIELDS, post_data.c_str());
curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,post_data.length());
 
//Отправка запроса
res=curl_easy_perform(curl);
}
 
//функция которая управляет программой
void Mail::start()
{
//инициализация curl
    curl=curl_easy_init();
if(curl)
{
//да создался объект curl посылаем запрос аутентификации
Autentificated();
//проверяем успешность выполнения запроса
if(res!=CURLE_OK)
        {
            cout <<curl_easy_strerror(res)<<endl;
            getchar();
return;
        }
//Проверяем успешно ли авторизовались
        if(str_web.size()!=0)
        {
            cout <<"Autentificated!"<<endl;
//меняем post режим на get
curl_easy_setopt(curl,CURLOPT_POST,0);
curl_easy_setopt(curl,CURLOPT_HTTPGET,1);
//меняем url
str_web="";
curl_easy_setopt (curl, CURLOPT_URL, (url_user+int_to_string(0)).c_str());
res=curl_easy_perform(curl);
 
int n(0);
while(str_web.length()>200&&res==CURLE_OK)
{
ofstream ofs("text.txt",ofstream::out|ofstream::app);
ofs<<str_web;
ofs.close();
Sleep(rand()%4000+1000);
cout <<"---------------------------------------------"<<endl;
str_web="";
n+=20;
curl_easy_setopt(curl,CURLOPT_URL,(url_user+int_to_string(n)).c_str());
res=curl_easy_perform(curl);
}
 
if(res!=CURLE_OK)
{
cout <<curl_easy_strerror(res)<<endl;
exit(1);
}
 
pars_mail(); //разбираем мэйлы и сохраняем их в файл
cout <<"Done!"<<endl;
        }
        else
        {
            cout <<"Non-autentificated!"<<endl;
            curl_easy_cleanup(curl);
            getchar();
exit(1);
        }
}
curl_easy_cleanup(curl);//уничтожаем объект curl
}

 

Класс для отправки почты send_mail.h:

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
#ifndef SEND_MAIL_H
#define SEND_MAIL_H
 
#include <string>
using std::string;
#include <vector>
using std::vector;
 
class send_mail
{
int port; //порт для smpt-соединения
string smpt_host; //имя сервера smpt;
string smpt_login; //логин для авторизации smpt;
string smpt_pass; //пароль smpt сервера
string theme; //тема сообщения
string send_my_mail; //куда будет отослано сообщение для проверки отсылания
vector<string> massage; //вектор сообщений которые будут случайно выбраны и отправлены
vector<string> mail; //вектор мэйлов
 
void get_massage_and_mail(); //функция заполняет массив с сообщениями для отправки vector<string> massege;
public:
send_mail();
void start(); //функция начинает отправлять сообщения
};
 
#endif

И файл send_mail.cpp:

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
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <regex>
using std::regex;
using std::regex_search;
using std::smatch;
#include <cstdlib>
using std::exit;
 
//подключаем winsoch в отдельном пространстве, что бы имена не конфликтовали
#pragma comment(lib,"Ws2_32.lib")
#include <WinSock2.h>
 
#include "send_mail.h";
 
//записывает слова в файл
void fwrite(string s, string data,int flag)
{
if(flag==0)
{
ofstream ofs(s,ofstream::out);
if(!ofs){cerr <<"don't open file: "<<s<<endl;exit(1);}
else
ofs <<data;
ofs.close();
}
else if(flag==1)
{
ofstream ofs(s,ofstream::out|ofstream::in|ofstream::app);
if(!ofs){cerr <<"don't open file: "<<s<<endl;exit(1);}
else
ofs <<data;
ofs.close();
}
}
 
//копирует чар
char to_uchar(char ch)
{
return ch;
}
 
//преобразование в кодировку base64_encode
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';
}
 
//похоже принимает два указателя на чар и возвращает сам хост в виде ip вторым параметром
bool GetIpByHostName(char* pHostName, char* pIp, DWORD dwIpSize)
{
hostent *pHosten;
if(!(pHosten = gethostbyname(pHostName)))
{
return false;
}
 
//это важная походу строка
//inet_ntoa() преобразует интернет адрес в десятично-тосечный формат
//PCHAR-указатель на char
//если
if((unsigned int)strlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize)
{
return 0;
}
//функция копирования в pIp адреса
strcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
 
return true;
}
 
//функция заполняет массив с сообщениями для отправки vector<string> massege;
void send_mail::get_massage_and_mail()
{
ifstream ifs("massage.txt",ifstream::in);
if(!ifs){cerr <<"don't open file: 'massage.txt'"<<endl;exit(1);}
char c;
string temp;
while(ifs.get(c)) temp+=c;
ifs.close();
smatch sm;
while(regex_search(temp,sm,regex("<<<<<((?:\n|\r|.)*?)<<<<<")))
{
massage.push_back(sm[1].str());
temp="<<<<<"+sm.suffix().str();
}
if(massage.size()==0){cerr <<"massage is empty"<<endl;exit(1);}
 
//читаем мэйлы и инициализируем вектор mail
ifs.open("text1.txt",ifstream::in);
if(!ifs){cerr <<"don't open file1: 'text1.txt'"<<endl;exit(1);}
while(getline(ifs,temp))mail.push_back(temp);
mail.push_back(send_my_mail);
if(mail.size()==0){cerr <<"mail is empty"<<endl;exit(1);}
 
ifs.close();
}
 
//конструктор
send_mail::send_mail()
{
ifstream ifs("config.txt",ifstream::in);
if(!ifs){cerr <<"dont open file 'config1.txt'"<<endl;exit(1);}
ifs.ignore(1000,'<');
ifs.ignore(255,' ');
ifs >>port;
//port=25;
ifs.ignore(255,' ');
ifs >>smpt_host;
//smpt_host="";
ifs.ignore(255,' ');
ifs >>smpt_login;
//smpt_login="";
ifs.ignore(255,' ');
ifs >>smpt_pass;
//smpt_pass=";
ifs.ignore(255,' ');
getline(ifs,theme);
ifs.ignore(255,' ');
ifs >>send_my_mail;
// cout <<"send_my_mail= "<<send_my_mail<<endl;
//exit(1);
//theme="hello gacpada";
get_massage_and_mail();
 
}
 
//функция начинает отправлять сообщения
void send_mail::start()
{
//cout <<"mail[mail.size()-1]= "<<mail[mail.size()-1]<<endl;
//exit(1);
mail.clear();
mail.push_back("viner.86@mail.ru");
// mail.push_back("neovich@mail.ua");
// mail.push_back("neovich@mail.ua");
//4.Посылаем данные
string temp;
char user64[256],pass64[256];//имя и пароль в кодировке base64 (переменные для них)
base64_encode((char*)smpt_login.c_str(),smpt_login.length(),user64,256);//переводим логив в base64
base64_encode((char*)smpt_pass.c_str(),smpt_pass.length(),pass64,256);//переводим пароль в base64
for(int i=0;i<mail.size();i++)
{
int error(0);
//1.Инициализация Winsock
WSADATA ws;//содержит информацию о проинициализированной версии WinsocAPI
//MAKEWORD( 2, 2 ) - связывает версию версия 1.1
//WSAStartup() функция которая инициализирует Winsock
if (FAILED (WSAStartup (MAKEWORD( 2, 2 ), &ws) ) )
{
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;//хз. протокол какой то или ТСП или ЮДП у нас ТСП
char cIp[17];//адресс сервера
GetIpByHostName((char*)smpt_host.c_str(),cIp,17);//получаем ip адресс хоста именно в виде ip
smtp_addr.sin_addr.s_addr = inet_addr(cIp);//Устанавливаем адрес сервера
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);
}
cout <<"___________________________________"<<endl;
//формируем запрос
vector<string> v;
v.push_back("HELO vac9\r\n");
v.push_back("AUTH LOGIN\r\n");
v.push_back(string(user64)+"\r\n");
v.push_back(string(pass64)+"\r\n");
v.push_back("MAIL FROM:<"+smpt_login+">\r\n");
v.push_back("RCPT TO:<"+mail[i]+">\r\n");
v.push_back("DATA\r\n");
v.push_back("Subject:"+theme+"\r\n");
v.push_back("Content-Type: text/html; charset=windows-1251\r\n"+
massage[rand()%massage.size()]+"\r\n\n.\r\n");
v.push_back("QUIT\r\n");
 
cout <<"mail: "<<mail[i]<<endl;
for(int j=0;j<v.size();j++)
{
char buff[3000];
memset(buff,'\0',sizeof(buff));
strcpy(buff,v[j].c_str());
// cout <<"buff1= "<<buff<<endl;
if(SOCKET_ERROR==send( sock, buff, strlen(buff), 0 ))
{cout <<"error01= "<<WSAGetLastError()<<endl;exit(1);}
memset(buff,'\0',sizeof(buff));
if(SOCKET_ERROR==recv(sock,buff,sizeof(buff),0))
{cout <<"error02= "<<WSAGetLastError()<<endl;exit(1);}
// cout <<"buff= "<<buff<<endl;
cout <<buff;
fwrite("tt.txt",buff,1);
}
cout <<"---------------------------------------"<<endl;
fwrite("tt.txt","---------------------------------------\r\n",1);
Sleep(rand()%60000+60000);
}
 
cout <<"Done!"<<endl;
}

 

И файл mail.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdlib>
using std::srand;
#include <ctime>
using std::time;
#include <iostream>
using std::cout;
using std::endl;
 
#include "class_mail.h"//класс который парсит mail
#include "send_mail.h"//класс который отправляет письма
 
int main()
{
srand(time(0));//засеваем генератор
setlocale(LC_ALL, ".1251");
 
Mail m;
m.start();
 
send_mail sm;
sm.start();
 
    return 0;
}

 

Да еще еще есть текстовые файлы я их содержимое тоже перечислю, там несколько важных файлов, ну от например файл config.txt:

1
2
3
4
5
6
7
8
9
10
11
url_dologin https://auth.mail.ru/cgi-bin/auth?from=splash
user_name *****@mail.ua
password *****
url_user http://otvet.mail.ru/api/v2/questlist?salt=MVv8v0&state=A&cat=job_partly&n=100&p=
<<<<<
port 25
smpt_host smpt.mail.ru
smpt_login *****v@mail.ua
smpt_pass *****
theme hello gacpada
echo adfasdfasd@mail.ru

И файл с видами сообщений massege.txt:

1
2
3
4
5
6
7
8
9
10
11
12
<<<<<
Дорогой друг!!!<br>
Я вам присылаю сообщение от Неовича.ру.<br>
<a href="http://kselax.ru">kselax.ru</a>.
<<<<<
Хеллоу господа!!! Это мое новое сообщение!!!<br>
Ебта бля мазафака бичь<br>
<a href="http://kselax.ru">kselax.ru</a>.
<<<<<
Привет Чукчи!!!<br>
<a href="http://kselax.ru">kselax.ru</a>.
<<<<<

 

Ну скажем все. Еще раз повторюсь это я так выложил просто что б если что можно было подсмотреть, если что мне понадобиться я возьму и подсмотрю. Да проблема этой проги одна не получается нормально отсылать почту, ну будем учиться, будем разбирать сам протокол, пытаться разобрать как все таки отправляется почта, вообще схема всей почты интернета, ну например я от ни пойму зачем нужна авторизация, ну да я авторизуюсь на smtp.mail.ru да ок, но если я туда отправлю сообщение допустим на адрес adfsf@gmail.ru и как это сообщение smtp.mail.ru передаст на smtp gmail? от скажите как он его туда доставить? От как он авторизуется с gmail.ru? Я вообще не понимаю организации почты в инете, да вижу схему, но как оно передается меж соседними серверами я не пойму, хотя пишут что так же само с авторизацией, ну я читал чуток организацию почты.

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

[youtube]http://www.youtube.com/watch?v=Kkx8iqCuscc[/youtube]

2 thoughts on “Небольшой парсер бот для mail.ru”

  1. Тима:
    8 ноября, 2017 в 12:59

    А можно таким макаром нужные вопросы выдергивать? Например мне нужны темы с вопросом что такое Егрюль.

    Ответить
    1. admin_kselax:
      20 ноября, 2017 в 18:12

      Конечно можено, написать код который будет использовать поиск mail, получить список тем и парсить из тех тем или как то передавать сразу урл со страницей поиска где будут установлены нужные параметры поиска.

      Ответить

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

Ваш адрес 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