ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
smtp отправка почты - AUTH LOGIN - ошибка 500 (( |

17.01.2010, 18:12
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
smtp отправка почты - AUTH LOGIN - ошибка 500 ((
Здравствуйте вот написал на Visual C++ 6.0 пример отправки почты на mail.ru:
Код:
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
int err;
WSADATA wsaData;
SOCKET s;
hostent *d_addr;
struct sockaddr_in addr;
char text[1024];//áóôåð äàííûõ
err = WSAStartup(MAKEWORD(1, 1), &wsaData);
if(err != 0)
{
cout<<"Error: "<<err<<"\n";
return 1;
}
cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
//Ñîçäàíèå ñîêåòà
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
return 1;
}
//ïîëó÷åíèå àäðåñà ñåðâåðà
d_addr = gethostbyname("smtp.mail.ru");
if(d_addr == NULL)
{
cout<<"Error gethostbyname\n";
return 1;
};
//ñîåäèíÿåìñÿ
addr.sin_family = AF_INET;//òèï TCP/IP
addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
addr.sin_port = htons (25);
//connect
if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue\n";
}
//ïîëó÷àåì äàííûå îò ñåðâåðà
recv(s, text, sizeof(text), 0);
cout<<"Recive - "<<text<<"\n";
//Ïðèâåòñòâóåì ñåðâåð
strcpy(text, "EHLO smtp.mail.ru\r\n");
send(s, text, sizeof(text), 0);
cout<<"Send - "<<text<<"\n";
recv(s, text, sizeof(text), 0);
cout<<"Recive - "<<text<<"\n";
//àâòîðèçàöèÿ íà ñåðâåðå
//memset(text, 0, sizeof(text));
strcpy(text, "AUTH LOGIN\r\n");
send(s, text, sizeof(text), 0);
cout<<sizeof(text)<<"\n";
cout<<"Send - "<<text<<"\n";
recv(s, text, sizeof(text), 0);
cout<<"Recive - "<<text<<"\n";
closesocket(s);
WSACleanup();
return 0;
}
проблема в том что дойдя до строки AUTH LOGIN - сервак ругается на не правильную команду ((( подскажите как решить эту проблему???
|
|
|

17.01.2010, 18:28
|
|
Новичок
Регистрация: 20.09.2008
Сообщений: 29
Провел на форуме: 528520
Репутация:
13
|
|
У тебя буффер один под запрос и ответ. text[]
либо обнуляй после каждого запроса -ответа, либо введи дополнительный.
|
|
|

17.01.2010, 19:23
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
Сообщение от Spy2ex
У тебя буффер один под запрос и ответ. text[]
либо обнуляй после каждого запроса -ответа, либо введи дополнительный.
Код:
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
int err;
WSADATA wsaData;
SOCKET s;
hostent *d_addr;
struct sockaddr_in addr;
char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
char sen[1024];//áóôåð èñõ ñîîáùåíèé
err = WSAStartup(MAKEWORD(1, 1), &wsaData);
if(err != 0)
{
cout<<"Error: "<<err<<"\n";
return 1;
}
cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
//Ñîçäàíèå ñîêåòà
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
return 1;
}
//ïîëó÷åíèå àäðåñà ñåðâåðà
d_addr = gethostbyname("smtp.mail.ru");
if(d_addr == NULL)
{
cout<<"Error gethostbyname\n";
return 1;
};
//ñîåäèíÿåìñÿ
addr.sin_family = AF_INET;//òèï TCP/IP
addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
addr.sin_port = htons (25);
//connect
if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue\n";
}
memset(rec, 0, sizeof(rec));
memset(sen, 0, sizeof(sen));
//ïîëó÷àåì äàííûå îò ñåðâåðà
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
//î÷èñòêà
memset(rec, 0, sizeof(rec));
//Ïðèâåòñòâóåì ñåðâåð
strcpy(sen, "HELO smtp.mail.ru\r\n");
send(s, sen, sizeof(sen), 0);
cout<<sen<<"\n";
//î÷èñòêà
memset(sen, 0, sizeof(sen));
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
//àâòîðèçàöèÿ íà ñåðâåðå
strcpy(sen, "AUTH LOGIN\r\n");
send(s, sen, sizeof(sen), 0);
cout<<sen<<"\n";
//î÷èñòêà
memset(sen, 0, sizeof(sen));
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
closesocket(s);
WSACleanup();
return 0;
}
Вот ввел два буфера, и все равно сервак ругается на не правильную команду 500 (( дело в AUTH LOGIN
|
|
|

17.01.2010, 20:24
|
|
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме: 247923
Репутация:
52
|
|
У многих smtp серверов (а особенно для мэйла, рамблера, гугла) для отправки сообщения нужно авторизироваться по POP3 протоколу, иначе было бы очень легко вводить произвольный адрес отправителя. Добавь сюда соединение на порт 110 и авторизируйся на ящик, с которого отправляешь.
|
|
|

17.01.2010, 20:37
|
|
Новичок
Регистрация: 20.09.2008
Сообщений: 29
Провел на форуме: 528520
Репутация:
13
|
|
нужно подключаться, не на 25 порт а на 2525 в мейл.ру так, рабочий код.
Код:
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
int err;
WSADATA wsaData;
SOCKET s;
hostent *d_addr;
struct sockaddr_in addr;
char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
char sen[1024];//áóôåð èñõ ñîîáùåíèé
err = WSAStartup(MAKEWORD(1, 1), &wsaData);
if(err != 0)
{
cout<<"Error: "<<err<<"\n";
return 1;
}
cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
//Ñîçäàíèå ñîêåòà
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
return 1;
}
//ïîëó÷åíèå àäðåñà ñåðâåðà
d_addr = gethostbyname("smtp.mail.ru");
if(d_addr == NULL)
{
cout<<"Error gethostbyname\n";
return 1;
};
//ñîåäèíÿåìñÿ
addr.sin_family = AF_INET;//òèï TCP/IP
addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
addr.sin_port = htons (2525);
//connect
if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue\n";
}
memset(rec, 0, sizeof(rec));
memset(sen, 0, sizeof(sen));
recv( s, rec, sizeof(rec)-1, 0 ); //I отвтет сервера
strcpy(sen,"EHLO smtp.mail.ru\r\n");
send(s,sen,strlen(sen),0);
recv( s, rec, sizeof(rec)-1, 0 );
strcpy(sen,"AUTH LOGIN\r\n");
send(s,sen,strlen(sen),0);
recv( s, rec, sizeof(rec)-1, 0 );
closesocket(s);
WSACleanup();
return 0;
}
|
|
|

17.01.2010, 21:04
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
Сообщение от Spy2ex
нужно подключаться, не на 25 порт а на 2525 в мейл.ру так, рабочий код.
Код:
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
int err;
WSADATA wsaData;
SOCKET s;
hostent *d_addr;
struct sockaddr_in addr;
char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
char sen[1024];//áóôåð èñõ ñîîáùåíèé
err = WSAStartup(MAKEWORD(1, 1), &wsaData);
if(err != 0)
{
cout<<"Error: "<<err<<"\n";
return 1;
}
cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
//Ñîçäàíèå ñîêåòà
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
return 1;
}
//ïîëó÷åíèå àäðåñà ñåðâåðà
d_addr = gethostbyname("smtp.mail.ru");
if(d_addr == NULL)
{
cout<<"Error gethostbyname\n";
return 1;
};
//ñîåäèíÿåìñÿ
addr.sin_family = AF_INET;//òèï TCP/IP
addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
addr.sin_port = htons (2525);
//connect
if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue\n";
}
memset(rec, 0, sizeof(rec));
memset(sen, 0, sizeof(sen));
recv( s, rec, sizeof(rec)-1, 0 ); //I отвтет сервера
strcpy(sen,"EHLO smtp.mail.ru\r\n");
send(s,sen,strlen(sen),0);
recv( s, rec, sizeof(rec)-1, 0 );
strcpy(sen,"AUTH LOGIN\r\n");
send(s,sen,strlen(sen),0);
recv( s, rec, sizeof(rec)-1, 0 );
closesocket(s);
WSACleanup();
return 0;
}
Вообще ошибка 554 "Ошибка синхронизации"
Пытаюсь пройти pop3 авторизацию, пишет вообще ошибку не известная команда ""
|
|
|

17.01.2010, 21:14
|
|
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме: 247923
Репутация:
52
|
|
Сообщение от isqad88
Вообще ошибка 554 "Ошибка синхронизации"
Пытаюсь пройти pop3 авторизацию, пишет вообще ошибку не известная команда ""
я уже выкладывал исходник отправки сообщения с регистрацией, правда код на Delphi:
http://forum.antichat.ru/thread76601.html
Там нужно делать 2 сокета, один для POP3, а другой для SMTP, причем закрывать оба только в конце, чтобы при отправке сообщения соединение по поп3 было открыто.
|
|
|

17.01.2010, 21:55
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
strcpy(sen, "AUTH LOGIN\r\n");
send(s, sen, sizeof(sen), 0);
схерали sizeof???? ты отправляешь строку. ПО этому strlen
|
|
|

18.01.2010, 09:33
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
Код:
#pragma comment(lib, "Ws2_32.lib")
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
int err;
WSADATA wsaData;
SOCKET s;
SOCKET p;
hostent *d_addr;
struct sockaddr_in addr;
char rec[1024];
err = WSAStartup(MAKEWORD(1,1), &wsaData);
if(err != 0)
{
cout<<"Error: "<<err<<"\n";
return 1;
}
p = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(p == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
}
d_addr = gethostbyname("pop.mail.ru");
if(d_addr == NULL)
{
cout<<"Error gethostbyname\n";
return 1;
};
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
addr.sin_port = htons (110);
if(SOCKET_ERROR == (connect(p, (sockaddr *) &addr, sizeof (addr))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue c pop.mail.ru\n";
}
//создаем 2й сокет для smtp
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
}
d_addr = gethostbyname("smtp.mail.ru");
if(d_addr == NULL)
{
cout<<"Error 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))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue c smtp.mail.ru\n";
}
recv(p, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
//авторизуемся на pop
strcpy(rec,"USER user\r\n");
send(p, rec, strlen(rec),0);
cout<<rec<<"\n";
recv(p, rec, sizeof(rec), 0);
cout<<rec<<"\n";
strcpy(rec,"PASS parol\r\n");
send(p, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(p, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
//пробуем отправить сообщение
strcpy(rec, "HELO smtp.mail.ru\r\n");
send(s, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
strcpy(rec, "MAIL FROM:user@mail.ru\r\n");
send(s, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
strcpy(rec, "RCPT TO:user2@mail.ru\r\n");
send(s, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
strcpy(rec, "DATA\r\n");
send(s, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
strcpy(rec, "from:user@mail.ru\r\nto:user2@mail.ru\r\nsubject:Hello\r\nHello Andrew!!\r\n.\r\n");
send(s, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
strcpy(rec, "QUIT\r\n");
send(s, rec, strlen(rec), 0);
cout<<rec<<"\n";
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
closesocket(p);
closesocket(s);
WSACleanup();
return 0;
}
ТЕПЕРЬ ВСЕ РАБОТАЕТ!!! СПАСИБО ВСЕМ!!!
|
|
|

18.01.2010, 10:34
|
|
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме: 247923
Репутация:
52
|
|
Всегда с обычных смпт серверов нужно делать авторизацию, иначе они не отправят ничего.
Тогда адрес отправителя можно было бы произвольный выбирать 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|