ДНС Сервер не прослушивает 53 порт. хелп.

Тема в разделе "WASM.BEGINNERS", создана пользователем Saty, 21 июл 2005.

Статус темы:
Закрыта.
  1. Saty

    Saty New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    13
    Адрес:
    Russia
    Определяю ип ДНС Сервера. Пингую его. И терь мне нуно

    проверить, действительно ли он ДНС Сервер.

    Для этого подготавливаю соответствующее сообщение.

    пытаюсь законнектиться к нему через сокеты на

    53 порт (при проверке проги использую реальный ДНС

    Сервер), а он на команде connect напрочь виснит.

    по ходу дела, что-то не так =( хелп плиз.......
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Коннектиться ? :) Единственное что ты можешь сделать, это отправть на этот порт UDP пакет и с надеждой ждать ответ. Если он не ответит, то не он :)
     
  3. Saty

    Saty New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    13
    Адрес:
    Russia
    =) я щарю. тока TCP здесь тоже канает - это раз (проблемы не мои, а сервера). и два: в том-то и прикол, что тестю я прогу на реальном ДНС Сервере, а он мне не отвечает... точнее, иногда коннект принимает, но слать ответные пакеты отказывается напрочь. а мне нужен именно ответный пакет (мало ли какая прога 53 сокет могла создать. если конектиться - это еще не факт, что ДНС Сервер. надежнее еще и структуру ответа проверить)

    ХЕЛЛЛЛЛЛЛЛЛЛПППППППП ПЛЗ...............
     
  4. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    А где ты видел, что к 53 порту можно приконектиться через TCP ? Мне самому интересно... поделись инфой :)
     
  5. Saty

    Saty New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    13
    Адрес:
    Russia
    я на верности своих слов не настаиваю =) с сетью тока-тока разбираюсь =) но мне казалось, что по дефолту сокеты работают по TCP. и приконектиться мне удалось.



    а как UDP пакеты посылать? =)
     
  6. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Так же как и TCP :) только сокет должен быть UDP

    socket

    connect

    send/sendto

    recv/recvfrom
     
  7. Saty

    Saty New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    13
    Адрес:
    Russia
    0.о

    и на UDP сервак будет отвечать? =) счас проверим =)

    tnx =)

    ============================

    новая трабла. UDP сокет отказывается конектиться =(

    а TCP конектиться.....
     
  8. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Я тебя несколько не на тот путь направил :) порядок такой

    socket

    sendto

    recvfrom

    Это для UDP, в sendto есть структура sockaddr. Перед заполнением надо её обнулить (есть грабли). После sendto твоя машина должна "выплюнуть" пакет в направлении, указанном в sockaddr :))) там же находится и порт.

    "If from is nonzero, and the socket is not connection oriented..."

    Потом читаешь recvfrom.
     
  9. Saty

    Saty New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    13
    Адрес:
    Russia
    =) tnx.

    Тока тут у меня траблы возникают =)

    кстати, на тисипи у меня все заработало. и пакеты от сервака уже принимает (хз, почему вчера не получалось - вроде все тоже самое было... почти =\)



    а на UDP дальше функции connect не проходит =(
    Код (Text):
    1.  
    2.     struct sockaddr_in ClientSAddr;
    3.     struct in_addr sin_addr;
    4.     sin_addr.s_addr=inet_addr(name);
    5.     int ConVal;
    6.     //int LenOfRec=0;
    7.  
    8.     SOCKET ClientSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_UDP);
    9.     memset (&ClientSAddr, sizeof(ClientSAddr), 0);
    10.     ClientSAddr.sin_family=AF_INET;
    11.     ClientSAddr.sin_addr.s_addr=sin_addr.s_addr;
    12.     ClientSAddr.sin_port=htons(53);
    13.  
    14.     ConVal = connect(ClientSocket, (struct sockaddr *) &ClientSAddr, sizeof(ClientSAddr));
    15.  


    после этого

    ConVal содержит значение INVALID_SOCKET

    пробовал зацикливать, пока другое значение не будет - не помогает =(

    подскажи =)
     
  10. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    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
     
  11. Saty

    Saty New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    13
    Адрес:
    Russia
    =) не люблю садиться на шею =) но все же, посмотри код, плз, код полностью, а то мне сервер ДНС все время

    отсылает строчку

    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"

    и так далее =(

    и еще sendto не отсылает ни одного байта - все время с

    ошибкой завершается =(((((((((((((


    Код (Text):
    1.  
    2. int send_pack(CString name)////////////////////////////////////////////////////
    3. {
    4.     int Result=1;
    5.  
    6.     struct sockaddr_in ClientSAddr;
    7.     struct in_addr sin_addr;
    8.     sin_addr.s_addr=inet_addr(name);
    9.     int ConVal;
    10.     //int LenOfRec=0;
    11.  
    12.     SOCKET ClientSocket=socket(AF_INET, SOCK_DGRAM, IPPROTO_TCP);
    13.     memset (&ClientSAddr, sizeof(ClientSAddr), 0);
    14.     ClientSAddr.sin_family=AF_INET;
    15.     ClientSAddr.sin_addr.s_addr=sin_addr.s_addr;
    16.     ClientSAddr.sin_port=htons(53);
    17.  
    18. //  ConVal = connect(ClientSocket, (struct sockaddr *) &ClientSAddr, sizeof(ClientSAddr));
    19. //  if (ConVal != INVALID_SOCKET)
    20.     {///////////////////////////////////////Begin
    21.         /////////////////////////////header
    22.         /////////ID
    23.         sendto(ClientSocket, "sd", 2, 0, (struct sockaddr *)&ClientSAddr, sizeof(ClientSAddr));
    24.         /////////Flags & QUE
    25.         {
    26.             char buffVal[] = {1,0,0,1,0,0,0,0,0,0};
    27.             sendto(ClientSocket, buffVal, 10, 0, (struct sockaddr *)&ClientSAddr, sizeof(ClientSAddr));
    28.         }
    29.         /////////////////////////////body
    30.         //////////quession
    31.         {
    32.             char buffVal[]={3, 'w', 'w', 'w', 4, 'm', 'a', 'i', 'l', 2, 'r', 'u', 0, 0, 1, 0, 1};
    33.             int buffLen = 17;
    34.             sendto(ClientSocket, buffVal, buffLen, 0, (struct sockaddr *)&ClientSAddr, sizeof(ClientSAddr));
    35.         }
    36.         //////////////////////////////////receivw
    37.         int byteRecv;
    38.         int reLen=0;
    39.         //////////////////////////////////header
    40.         /////////////ID
    41.         {
    42.             byteRecv=SOCKET_ERROR;
    43.             char buffVal[32];
    44.             int buffLen=2;
    45.             byteRecv = recvfrom(ClientSocket, buffVal, buffLen, 0, (struct sockaddr *)&ClientSAddr, &reLen);
    46.             if(!(buffVal[0]=='s' && buffVal[1]=='d'))
    47.                 Result=Result-1;
    48.         }
    49.         /////////////flags & ANS
    50.         {
    51.             byteRecv=SOCKET_ERROR;
    52.             char buffVal[32];
    53.             int buffLen=10;
    54.             byteRecv = recvfrom(ClientSocket, buffVal, buffLen, 0, (struct sockaddr *)&ClientSAddr, &reLen);
    55.             if(!(buffVal[0]&1))
    56.                 Result=Result-2;
    57.         }
    58.         ///////////////////////////////body
    59.         /////////////ans
    60.         {
    61.  
    62.         }
    63.     }
    64. //  else Result = 0;
    65. return (unsigned)Result;
    66. }
    67.  


    ============================================

    tnx за помощь 8) все заработало, единственное, пришлось sento на просто send (с ресивом тоже так пришолсь поступить) поменять. пакеты ходят именно той структуры, что надо 8)

    ну и маленькая изюминка. входящий пакет, по ходу дела, надо принимать одним ресивом, иначе ошибку 10040 выдает.

    а так - все оки 8)
     
  12. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409


    SOCKET ClientSocket=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     
Статус темы:
Закрыта.