C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Узнать NetBIOS через IP
snad
Отправлено: 17.01.2006, 13:46


Ученик-кочегар

Группа: Участник
Сообщений: 16



Подскажите плиз, каким образом, зная IP машины, получить ее NetBIOS имя в сети?
AVC
Отправлено: 17.01.2006, 14:09


Ветеран

Группа: Модератор
Сообщений: 1583



gethostbyadr

Это возможно далеко не всегда. Вот писал статью на эту тему.


User Attached Image Скачать файл
AxNBN.rar


Gedeon
Отправлено: 17.01.2006, 14:10


Ветеран

Группа: Модератор
Сообщений: 1742



GetHostByAddr должно подойти.
snad
Отправлено: 17.01.2006, 14:25


Ученик-кочегар

Группа: Участник
Сообщений: 16



GetHostByAddr не подходит.
Можно ли это сделать ф-цией WNetGetResourceInformation?



///////////////////////
Спасибо за примерчик. Много полезного.

Отредактировано snad — 17/01/2006, 14:33
Guest
Отправлено: 17.01.2006, 15:19


Не зарегистрирован







Может есть архив с файлом "ICMP.h" и всеми с ним связанными.
Guest
Отправлено: 17.01.2006, 17:03


Не зарегистрирован







icmp.h
CODE

//---------------------------------------------------------------------------
#ifndef ICMPH
#define ICMPH

#include <windows.h>
//#pragma link "icmp_imp.lib"

typedef struct ip_option_information {
u_char Ttl;    // Time To Live (used for traceroute)
u_char Tos;    // Type Of Service (usually 0)
u_char Flags;    // IP header flags (usually 0)
u_char OptionsSize;  // Size of options data (usually 0, max 40)
u_char FAR *OptionsData; // Options data buffer
} IPINFO, *PIPINFO;    // size=8 bytes

typedef struct icmp_echo_reply {
u_long   Address;  // source address
u_long   Status;  // IP status value
u_long   RTTime;  // Round Trip Time in milliseconds
u_short   DataSize;  // reply data size
u_short   Reserved;  //
void FAR *Data;   // reply data buffer
IPINFO   Options;  // reply options
} ICMPECHO;      // size=28 bytes = 1c hex

/*
extern "C" __declspec(dllexport)
HANDLE WINAPI IcmpCreateFile (void);

extern "C" __declspec(dllexport)
BOOL WINAPI  IcmpCloseHandle (HANDLE);

extern "C" __declspec(dllexport)
DWORD WINAPI IcmpSendEcho(
HANDLE  IcmpHandle, // handle returned from IcmpCreateFile()
u_long  DestAddress, // destination IP address (in network order)
LPVOID  RequestData, // pointer to buffer to send
WORD  RequestSize, // length of data in buffer
IPINFO *RequestOptns, //
char *ReplyBuffer, // ICMPECHO + RequestData
DWORD  ReplySize,  // sizeof(ICMPECHO) + RequestSize
DWORD  Timeout  // time in milliseconds to wait for reply
);
*/


//---------------------------------------------------------------------------
#endif
snad
Отправлено: 01.02.2006, 12:32


Ученик-кочегар

Группа: Участник
Сообщений: 16



to AVC:
В каких случаях твоя программка возвращает WSAETIMEDOUT?
avc*
Отправлено: 01.02.2006, 13:46


Не зарегистрирован







Я так полагаю (судя из названия) что эту ошибку программа ПОЛУЧАЕТ когда достигается предел времени ожидания (возращают функции, работающие с сокетами).


Отредактировано AVC — 01/02/2006, 13:09
snad
Отправлено: 01.02.2006, 16:47


Ученик-кочегар

Группа: Участник
Сообщений: 16



Есть одна проблема. Все работает отлично, но когда пытаюсь узнать информацию с компьютера начальника ПОЛУЧАЕТ эту ошибку. Хотя машина 100% в сети, ping из командной строки возвращает time<1ms. В чем дело?
AVC
Отправлено: 02.02.2006, 09:12


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (snad @ 01/02/2006, 15:47)
Есть одна проблема. Все работает отлично, но когда пытаюсь узнать информацию с компьютера начальника ПОЛУЧАЕТ эту ошибку. Хотя машина 100% в сети, ping из командной строки возвращает time<1ms. В чем дело?

То, что машина в сети еще не означает что она поддерживает netbios.
Для того, что бы узнать netbios имя надо иметь сам netbios smile.gif . Может у начальника его поддержка не установлена. И даже если установлена то пинг идет по 7 порту а nbn по 137, который может быть просто закрыт.
snad
Отправлено: 03.02.2006, 10:57


Ученик-кочегар

Группа: Участник
Сообщений: 16



Так есть способ 100% узнать NetBIOS по IP?
Может напрямую к базе wins сервера подключаться и вытягивать инфу?
Guest
Отправлено: 03.02.2006, 11:40


Не зарегистрирован







QUOTE

Так есть способ 100% узнать NetBIOS по IP?

Нет, так как NetBIOS'а (кстати детища Microsoft, если не ошибаюсь) может просто не быть на том обродовании, которое отзывается на этот IP biggrin.gif .
snad
Отправлено: 03.02.2006, 20:45


Ученик-кочегар

Группа: Участник
Сообщений: 16



Понятно конечно, раз нет поддержки протокола NetBIOS ни о каком имени нет речи. Что же с теми, на которых есть?

Вернуться в Вопросы программирования в C++Builder