grebenyk |
Отправлено: 30.11.2006, 11:44 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
как имея название компа узнать его присутствие в сети и не зная ни одного названия компа высветить весь список. Я не знаю может что то подобное ping зделать надо. Кто пробовал что-то подобное помогите? |
|
AVC |
Отправлено: 30.11.2006, 12:55 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
1. ping, если он разрешен и поддерживается tcp.
2. широковещательный udp или EnumResourses |
|
grebenyk |
Отправлено: 30.11.2006, 14:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
а подробней, как этим воспользоваться, через чего. |
|
AVC |
Отправлено: 30.11.2006, 15:27 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
По поводу широковещательного udp поищите на форуме.
Пинг и EnumResource могу привести если нужно.
Для пинга надо знать или имя или IP адрес.
А EnumResource перечисляет, как мне помнится, расшаренные ресурсы. Хотя windows машины, кажется, покажет все. |
|
grebenyk |
Отправлено: 30.11.2006, 16:18 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
ну хорошо, как хоть пропинговать. А в отношении видно всех, не всегда, иногда надо воспользоваться "поиском компьютера", чтоб он в списке появился. И как же их увидеть , может есть компонента какая |
|
Doga |
Отправлено: 30.11.2006, 16:45 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Я не так давно выкладывал примерчик — VTVDemo, так вот он может просканировать сеть на предмет наличия подключённых к ней компов, а так же их расшаренных ресурсов...
Работает через IShellFolder. Возьмите из исходников чтоВам нужно и пользуйтесь
|
|
AVC |
Отправлено: 30.11.2006, 16:59 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
А для чего нужно-то? Если для работы то может воспользоваться профессиональным сетевым сканером? Благо их в ИНете валяется много. И платных, и ломаных и бесплатных.
Ну ладно, пропинговать (обычно одна из первых процедур сканера):
CODE |
HANDLE AxS_hIcmp = NULL;
HANDLE (WINAPI *pIcmpCreateFile) (VOID);
BOOL (WINAPI *pIcmpCloseHandle) (HANDLE);
DWORD (WINAPI *pIcmpSendEcho) (HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);
if (!AxS_hIcmp)
{ // Для Ping'а нужна библиотека icmp.dll
AxS_hIcmp = LoadLibrary("ICMP.DLL");
pIcmpCreateFile = (HANDLE (WINAPI *)(void)) GetProcAddress(AxS_hIcmp,"IcmpCreateFile");
pIcmpCloseHandle = (BOOL (WINAPI *) (HANDLE)) GetProcAddress(AxS_hIcmp,"IcmpCloseHandle");
pIcmpSendEcho = (DWORD (WINAPI *) (HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD))
GetProcAddress(AxS_hIcmp,"IcmpSendEcho");
AnsiString str = "";
if (pIcmpCreateFile == NULL) str += "Проблемы с импортом функции IcmpCreateFile\n";
if (pIcmpCloseHandle == NULL) str += "Проблемы с импортом функции pIcmpCloseHandle\n";
if (pIcmpSendEcho == NULL) str += "Проблемы с импортом функции pIcmpSendEcho";
if (!str.IsEmpty())
{ FreeLibrary(AxS_hIcmp); // отсоединение icmp
AxS_hIcmp = NULL;
throw Exception(str);
}
} // !AxS_hIcmp
//---------------------------------------------------------------------------
// Проверка связи ping'ом
//---------------------------------------------------------------------------
PACKAGE bool __fastcall AxS_Probe_Ping (const AnsiString &pINet_Adr, int pWaitMS, double *rPingMS)
{
if (rPingMS) *rPingMS = 0;
AnsiString vIP = pINet_Adr.Trim();
if (vIP.IsEmpty()) return false;
if (!IPIsValid(vIP))
{ struct hostent *hret = gethostbyname(vIP.c_str());
if (!hret) vIP = "";
else
{ char *cp = hret->h_addr_list[0];
vIP = AnsiString(int(*(cp+0) & 0xFF)) + "." +
AnsiString(int(*(cp+1) & 0xFF)) + "." +
AnsiString(int(*(cp+2) & 0xFF)) + "." +
AnsiString(int(*(cp+3) & 0xFF))
;
}
}
if (!IPIsValid(vIP)) return false;
unsigned long inetadr = inet_addr(vIP.c_str());
int waitMS = pWaitMS;
if (waitMS < 10) waitMS = 10;
if (waitMS > 100000) waitMS = 100000;
HANDLE han = pIcmpCreateFile();
if (han == INVALID_HANDLE_VALUE) return false;
// Build ping packet
char pingbuf [32]; memset(pingbuf, 'q', sizeof(pingbuf));
int echobuflen = sizeof(ICMPECHO) + sizeof(pingbuf);
char *echobuf = new char[echobuflen];
ICMPECHO *pecho = (ICMPECHO*)(echobuf);
pecho->Address = inetadr; // source address
pecho->Status = 0; // IP status value
pecho->RTTime = 0; // Round Trip Time in milliseconds
pecho->Reserved = 0; //
// Заполняется автоматичиски
pecho->DataSize = 0; // reply data size = sizeof(pingbuf);
pecho->Data = NULL; // reply data buffer = echobuf + sizeof(ICMPECHO);
// reply options
pecho->Options.Ttl = 0;
pecho->Options.Tos = 0;
pecho->Options.Flags = 0;
pecho->Options.OptionsSize = 0;
pecho->Options.OptionsData = NULL;
IPINFO vipinfo;
vipinfo.Ttl = 255;
vipinfo.Tos = 0;
vipinfo.Flags = 0;
vipinfo.OptionsSize = 0;
vipinfo.OptionsData = NULL;
__int64 qp_freq, qp_begin, qp_end;
QueryPerformanceFrequency ((LARGE_INTEGER*)&qp_freq);
QueryPerformanceCounter ((LARGE_INTEGER*)&qp_begin);
// Send the ping packet
DWORD stat = pIcmpSendEcho (han, inetadr, NULL, 0,
&vipinfo, echobuf, echobuflen, waitMS );
QueryPerformanceCounter((LARGE_INTEGER*)&qp_end);
if (rPingMS) *rPingMS = (double(qp_end — qp_begin) * double(1000)) / double(qp_freq);
bool ret = true;
if (stat == 0 || pecho->Status != 0) ret = false;
delete[] echobuf;
return ret;
}
|
Как-то крапал статейку. Прикладываю.
|
|
grebenyk |
Отправлено: 30.11.2006, 17:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
мне всего лишь надо вносить имена компов , в список(какой хочешь), который введит человек, допустим через Edit и кнопку. А я в этот момент , как нажимается кнопка начинавю проверку компа в сети. А потом сообщаю в случае чего , что такого имени нет или заношу в список |
|
grebenyk |
Отправлено: 30.11.2006, 18:00 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
признаться честно, я думал Вы мне будете про компонент TCP что-то скажете |
|
AVC |
Отправлено: 30.11.2006, 18:48 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (grebenyk @ 30.11.2006, 16:58) | А я в этот момент , как нажимается кнопка начинавю проверку компа в сети. А потом сообщаю в случае чего , что такого имени нет или заношу в список |
struct hostent *hret = gethostbyname(введенное_имя.c_str());
if (!hret)...
Но если в данный момент компьбтер не включен или не в сети .... |
|
grebenyk |
Отправлено: 01.12.2006, 20:05 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
пасибки, в принципе я это понял из вышеизложенного |
|
grebenyk |
Отправлено: 01.12.2006, 20:19 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
может заодно кто спутник посоветует какой |
|
grebenyk |
Отправлено: 01.12.2006, 20:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 73
|
упс , это я с рубрикой промазал, это я в "Компьютерное железо и системное администрирование." задаю вопросик |
|