Определяю ип ДНС Сервера. Пингую его. И терь мне нуно проверить, действительно ли он ДНС Сервер. Для этого подготавливаю соответствующее сообщение. пытаюсь законнектиться к нему через сокеты на 53 порт (при проверке проги использую реальный ДНС Сервер), а он на команде connect напрочь виснит. по ходу дела, что-то не так =( хелп плиз.......
Коннектиться ? Единственное что ты можешь сделать, это отправть на этот порт UDP пакет и с надеждой ждать ответ. Если он не ответит, то не он
=) я щарю. тока TCP здесь тоже канает - это раз (проблемы не мои, а сервера). и два: в том-то и прикол, что тестю я прогу на реальном ДНС Сервере, а он мне не отвечает... точнее, иногда коннект принимает, но слать ответные пакеты отказывается напрочь. а мне нужен именно ответный пакет (мало ли какая прога 53 сокет могла создать. если конектиться - это еще не факт, что ДНС Сервер. надежнее еще и структуру ответа проверить) ХЕЛЛЛЛЛЛЛЛЛЛПППППППП ПЛЗ...............
А где ты видел, что к 53 порту можно приконектиться через TCP ? Мне самому интересно... поделись инфой
я на верности своих слов не настаиваю =) с сетью тока-тока разбираюсь =) но мне казалось, что по дефолту сокеты работают по TCP. и приконектиться мне удалось. а как UDP пакеты посылать? =)
0.о и на UDP сервак будет отвечать? =) счас проверим =) tnx =) ============================ новая трабла. UDP сокет отказывается конектиться =( а TCP конектиться.....
Я тебя несколько не на тот путь направил порядок такой socket sendto recvfrom Это для UDP, в sendto есть структура sockaddr. Перед заполнением надо её обнулить (есть грабли). После sendto твоя машина должна "выплюнуть" пакет в направлении, указанном в sockaddr )) там же находится и порт. "If from is nonzero, and the socket is not connection oriented..." Потом читаешь recvfrom.
=) tnx. Тока тут у меня траблы возникают =) кстати, на тисипи у меня все заработало. и пакеты от сервака уже принимает (хз, почему вчера не получалось - вроде все тоже самое было... почти =\) а на UDP дальше функции connect не проходит =( Код (Text): struct sockaddr_in ClientSAddr; struct in_addr sin_addr; sin_addr.s_addr=inet_addr(name); int ConVal; //int LenOfRec=0; SOCKET ClientSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_UDP); memset (&ClientSAddr, sizeof(ClientSAddr), 0); ClientSAddr.sin_family=AF_INET; ClientSAddr.sin_addr.s_addr=sin_addr.s_addr; ClientSAddr.sin_port=htons(53); ConVal = connect(ClientSocket, (struct sockaddr *) &ClientSAddr, sizeof(ClientSAddr)); после этого ConVal содержит значение INVALID_SOCKET пробовал зацикливать, пока другое значение не будет - не помогает =( подскажи =)
SOCKET ClientSocket=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); А conect не обязятально, это же socket is not connection oriented, (type SOCK_DGRAM for example), the network address of the peer that sent the data is copied to the corresponding SOCKADDR structure
=) не люблю садиться на шею =) но все же, посмотри код, плз, код полностью, а то мне сервер ДНС все время отсылает строчку "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" и так далее =( и еще sendto не отсылает ни одного байта - все время с ошибкой завершается =((((((((((((( Код (Text): int send_pack(CString name)//////////////////////////////////////////////////// { int Result=1; struct sockaddr_in ClientSAddr; struct in_addr sin_addr; sin_addr.s_addr=inet_addr(name); int ConVal; //int LenOfRec=0; SOCKET ClientSocket=socket(AF_INET, SOCK_DGRAM, IPPROTO_TCP); memset (&ClientSAddr, sizeof(ClientSAddr), 0); ClientSAddr.sin_family=AF_INET; ClientSAddr.sin_addr.s_addr=sin_addr.s_addr; ClientSAddr.sin_port=htons(53); // ConVal = connect(ClientSocket, (struct sockaddr *) &ClientSAddr, sizeof(ClientSAddr)); // if (ConVal != INVALID_SOCKET) {///////////////////////////////////////Begin /////////////////////////////header /////////ID sendto(ClientSocket, "sd", 2, 0, (struct sockaddr *)&ClientSAddr, sizeof(ClientSAddr)); /////////Flags & QUE { char buffVal[] = {1,0,0,1,0,0,0,0,0,0}; sendto(ClientSocket, buffVal, 10, 0, (struct sockaddr *)&ClientSAddr, sizeof(ClientSAddr)); } /////////////////////////////body //////////quession { char buffVal[]={3, 'w', 'w', 'w', 4, 'm', 'a', 'i', 'l', 2, 'r', 'u', 0, 0, 1, 0, 1}; int buffLen = 17; sendto(ClientSocket, buffVal, buffLen, 0, (struct sockaddr *)&ClientSAddr, sizeof(ClientSAddr)); } //////////////////////////////////receivw int byteRecv; int reLen=0; //////////////////////////////////header /////////////ID { byteRecv=SOCKET_ERROR; char buffVal[32]; int buffLen=2; byteRecv = recvfrom(ClientSocket, buffVal, buffLen, 0, (struct sockaddr *)&ClientSAddr, &reLen); if(!(buffVal[0]=='s' && buffVal[1]=='d')) Result=Result-1; } /////////////flags & ANS { byteRecv=SOCKET_ERROR; char buffVal[32]; int buffLen=10; byteRecv = recvfrom(ClientSocket, buffVal, buffLen, 0, (struct sockaddr *)&ClientSAddr, &reLen); if(!(buffVal[0]&1)) Result=Result-2; } ///////////////////////////////body /////////////ans { } } // else Result = 0; return (unsigned)Result; } ============================================ tnx за помощь 8) все заработало, единственное, пришлось sento на просто send (с ресивом тоже так пришолсь поступить) поменять. пакеты ходят именно той структуры, что надо 8) ну и маленькая изюминка. входящий пакет, по ходу дела, надо принимать одним ресивом, иначе ошибку 10040 выдает. а так - все оки 8)