обращение к hostent-структуре

Тема в разделе "WASM.NETWORKS", создана пользователем NoName, 29 авг 2004.

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

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Уже второй час ночи, меня плющит.

    Вроде(!) все правильно написано, а компилятор ругается так:



    error A2006: undefined symbol : h_addr_list



    сам код:


    Код (Text):
    1. mov eax,(hostent PTR [eax]).h_addr_list




    структура разумееться нигде не определена, и как мне кажеться это не требуеться в данной ситуации.

    Конечно где-то есть ошибка.
     
  2. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > структура разумееться нигде не определена,

    > и как мне кажеться это не требуеться в данной ситуации.

    все-таки она где-то определена, иначе бы транслятор ругнался на hostent, а вот h_addr_list уже не определен.

    попробуй дать вместо этого h_addr или посмори inc-файл (просто у меня его сейсас нет под рукой и я не помню как точно это поле там определяется)
     
  3. NoName

    NoName New Member

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

    > посмори inc-файл

    Да и в правду в windows.inc в масме ее элемент h_addr_list определен как h_list. Странно, должно ведь быть то что я пишу, а там совсем другое.
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Проблемка тут такая вылезла странная...

    После перехода на sin1 прога падает (вылетает без сообщений). Кто бы мог сказать что здесь неверно?
    Код (Text):
    1.  
    2. invoke gethostbyname,offset UServer ;здесь 100% домен
    3. cmp eax,0
    4. je NotFoundInDNS
    5. jmp sin1
    6. jmp something
    7. sin1:
    8. mov eax,(hostent PTR [eax]).h_list ;вероятно здесь ошибка
    9. mov eax,[eax]
    10. mov eax,[eax]
    11. mov sin.sin_addr,eax
    12. ret
     
  5. AEX CHECKER

    AEX CHECKER New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    6
    Адрес:
    КИЕВ-88
    NoName

    Код (Text):
    1. mov eax,(hostent PTR [eax]).h_list ;вероятно здесь ошибка
    2. mov eax,[eax]
    3. mov eax,[eax]
    4. mov sin.sin_addr,eax




    Тебе, наверное, нада так:
    Код (Text):
    1.  
    2. INVOKE gethostbyname,addr Bufer
    3. mov    eax,[eax+12]
    4. mov    eax,[eax]           ;Get IP address
    5. mov    eax,[eax]
    6. INVOKE inet_ntoa,eax
     
  6. NoName

    NoName New Member

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



    да, я это уже сам понял.



    Вот немножко переделанный код, зараннее извиняюсь за ламеризм. Проблема теперь в том, что вместо ип он мне пишет какой-то бред. Я вывожу HIP окно, но там вместо ip появляются китайские заклинания.


    Код (Text):
    1. mov eax,[eax + 0Ch]
    2. mov eax,[eax]
    3. mov eax,[eax]
    4. mov sin.sin_addr,eax
    5. mov NIP,eax ;net
    6. invoke ntohl,eax ;что с этим, что без этого - одно и тоже.
    7. mov iad.S_un.S_addr,eax ;in_addr struct
    8. invoke inet_ntoa,offset iad
    9. cmp eax,0
    10. je login
    11. mov HIP,eax ;host
     
  7. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Вообще тут видел ссылку на dns-mx. Сейчас пытаюсь разобраться в том коде, очень неплохой пример.
     
  8. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Проблему до сих пор не решил. Вместо ип адреса мне выпадает dx4. Я подумал что это "спец." код, но в доках этого похоже нигде нет. Ищем.
     
  9. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    NoName
    Код (Text):
    1.  invoke gethostbyname,ebx
    2.          if_err No_Find_Host
    3.          mov   ebx,eax
    4.          mov   eax,[hs.h_list]
    5.          mov   eax,[eax]
    6.          mov   eax,[eax]
    7.          mov   [SA.sin_addr],eax
    8.          invoke connect,[hSock],SA,SA.size


    Вот такое у меня работает. Структура hs.h_list ассациирована с регистром ebx.
     
  10. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    ок, сейчас посмотрим...
     
  11. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Мне необходимо получить ип в локальном, а не сетевом виде, но подключиться это не проблема.

    Если будешь писать исходники приписывай как ассоциируешь тот же ebx, а то я могу непонять.

    Спасибо.
     
  12. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    NoName

    virtual at ebx

    hs hostent

    end virtual
     
  13. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    А нет ли разницы что передавать ф-ции gethostbyname?

    Т.е. адрес строки или указатель на элемент структуры hostent.

    Я вот тут посмотрел справочник и стал сомневаться в разумности некоторых авторов пишущих про сокеты...
     
  14. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    NoName



    Никакой, ИМХО, вообще передаваемый указатель рассматривается как адрес памяти, в которую необходимо, что то записать в определённой последовательности.
     
  15. NoName

    NoName New Member

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



    По твоему простая String equ h_addr_list (A NULL-terminated list of addresses for the host. Addresses are returned in network byte order.)?

    Если да, то я уже во всем путаюсь и ничего абсолютно непонимаю в сокетах!
     
  16. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    Я прогнал конкретно :-(. gethostbyname получает указатель на имя хоста, а возвращает указатель на структуру hostent. Т.е. здесь передаваемый и возвращаемый указатель не одно и тоже.
     
  17. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    да, ясно, но все равно проблема с получением ип адреса хоста посредством gethosybyname зная домен сервера не решена. Также теперь неясно в каком виде нужно передавать строку.

    Люди расскажите кто-нибудь как пошагово получить ип.

    Т.е. мне интересно какую строку нуэно передавать функции и что потом делать с параметрами hostent'a чтобы получить ip в ТЕКСТОВОМ виде. Я пошу так потому что уже запутался - в одних источниках написано одно, а в других другое.
     
  18. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    Ниже приведён кусок кода, который получает строку типа mail.raid.ru из EDIT-а и по ней получает IP, потом преобразует его в строковое представление и выводит в EDIT.
    Код (Text):
    1.  
    2. invoke GetWindowText,[hName],buf,200
    3.      
    4.        invoke WSAStartup,0101h,wsd
    5.        cmp  eax,0
    6.        je .suces
    7.    
    8.        invoke MessageBox,0,err,err,MB_OK
    9.        jmp .stp
    10.     .suces:
    11.        mov    eax,buf
    12.    
    13.        invoke gethostbyname,eax
    14.        cmp eax,0
    15.        jne .sucs2
    16.        invoke MessageBox,0,err1,err1,MB_OK
    17.        jmp .stp
    18.    
    19.     .sucs2:
    20.        mov ebx,eax
    21.    
    22.        mov eax,[hs.h_list]
    23.        mov edx,[eax]
    24.        mov eax,[edx]
    25.        invoke inet_ntoa,eax
    26.        invoke SetWindowText,[hIP],eax
    27.        
    28.        invoke WSACleanup
    29.        jmp  .finish
    30.  
     
  19. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    NoName

    ип адреса хоста ... зная домен сервера

    Не совсем понял твою терминологию. Если аттач не по теме, то не ругай.
     
  20. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
Статус темы:
Закрыта.