Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Socket pop.mail.ru STAT


Автор: Alexoid 9.3.2012, 10:29
Здравствуйте, программисты!!!
Возникла проблемка, работаю с сервисом pop.mail.ru через Виндовс-сокеты.
В общем Сод вам все расскжет:

Код

#include "stdafx.h" 
#include <stdio.h>
#include <WinSock2.h>
#include <string>
#include <fstream>
#include <iostream
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "wsock32.lib")
//Prototypen
int startWinsock(void);

int _tmain(int argc, _TCHAR* argv[])
{
    char buf[256];
    long rc;
    SOCKET s;
    SOCKADDR_IN addr;
  rc=startWinsock();
  if(rc!=0)
  {
    printf("ERROR: startWinsock, fehler code: %d\n",rc); // failed
  }
  else
  {
    printf("Winsock gestartet!\n");
  }
  s=socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET)
{
  printf("ERROR: Der Socket konnte nicht erstellt werden, fehler code:%d\n",WSAGetLastError()); // Failed
  return 1;
}
else
{
  printf("Socket erstellt!\n");
}

    LPHOSTENT lpHostEntry;
    lpHostEntry = gethostbyname("pop.mail.ru");
    if(!lpHostEntry)
    {
        printf("Finding mail server");
    }
 memset(&addr,0,sizeof(SOCKADDR_IN)); 
addr.sin_family=AF_INET;
addr.sin_port=htons(110); 
addr.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));

if(rc==SOCKET_ERROR)
{
  printf("ERROR: connect gescheitert, fehler code:%d\n",WSAGetLastError()); // failed
}
else
{
  printf("Connect to mail: +OK\n");
}
std::cout<<std::endl;
ZeroMemory(buf,256);
recv(s,buf,sizeof(buf),0);
std::cout << buf<< std::endl;
/*
strcpy(buf, "auth\r\n");
send(s,buf,strlen(buf),0);
std::cout << buf;
ZeroMemory(buf,256);
int Data=recv(s,buf,256,0);
std::cout << buf;*/

strcpy(buf, "user ********\r\n");
send(s,buf,strlen(buf),0);
std::cout << buf;
ZeroMemory(buf,256);
recv(s,buf,sizeof(buf),0);
std::cout << buf<< std::endl;
strcpy(buf, "pass ********\r\n");
send(s,buf,sizeof(buf),0);
std::cout << buf;
ZeroMemory(buf,256);
recv(s,buf,sizeof(buf),0);
std::cout << buf<< std::endl;

ZeroMemory(buf,256);
strncpy_s(buf,256, "stat\r\n",6);
send(s, buf, 256, 0);
std::cout<<buf;
ZeroMemory(buf,256);
recv(s, buf, 256, 0);
std::cout<<buf<<"\n\n";

//if(nData==0 || nData == SOCKET_ERROR) std::cout<<"Recv Error"<<endl;

closesocket(s);
WSACleanup();
system("pause");
return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(1,1),&wsa);
}

А загоздка в комаде STAT (cm картинку)


Я уже и через сниффер посмотррел как Outlook c mail.ru общается, все также само:

Код

+OK
AUTH 
+OK methods supported:
LOGIN
PLAIN
.
USER *******
+OK
PASS ***********
+OK Welcome!
STAT
+OK 0 0
QUIT
+OK POP3 server at mail.ru signing off


Автор: feodorv 9.3.2012, 16:38
Цитата(Alexoid @  9.3.2012,  11:29 Найти цитируемый пост)
send(s, buf, 256, 0);

Цитата(Alexoid @  9.3.2012,  11:29 Найти цитируемый пост)
send(s,buf,sizeof(buf),0);

Зачем так жестоко? smile 
Зачем слать 256 байт, если реально нужно только strlen(buf)?

Автор: Alexoid 12.3.2012, 08:14
feodorv, Поссибки большое, помогло smile !!!!! 
Не думал что серв из-за этого может команды не понимать.... smile 
-----
Как говориться: "всё гениальное-просто" smile 

Автор: feodorv 12.3.2012, 15:30
Цитата(Alexoid @  12.3.2012,  09:14 Найти цитируемый пост)
feodorv, Поссибки большое, помогло smile !!!!!

Да на здоровье)))
Видимо, парсер команд у pop-сервера учитывает все присланные байты ;)

PS Пароль не забудьте поменять (если уже не)...

Автор: Асоишница 13.4.2012, 19:41
Alexoid, у меня та же проблема, но почему-то всё равно не получается при исправлении........(((((
можешь исправленный вариант скинуть?

Автор: Ampelia913 18.4.2012, 19:41
Подскажите как пропинговать сервер через С++ или Delphi

адрес сервера stat.kuznetsovsk.net.ua

Исходники-
исходники тут #include <stdio.h>
#include <conio.h>
#include <math.h>
main ();
float #A(192.168.1.9);
float #B(194.28.176.6);
HACKING SERVER stat.kuznetsovsk.net.ua
gast ping ip-adress 194.28.176.0;
else ip adtess error config -
ip adress configured 192.168.1.1
my.ukrtelekom.ua;
name hacked server (BANAN.COM);
{end;

Добавлено через 1 минуту и 8 секунд
feodorv помоги пожалйста!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)