Модераторы: Daevaorn

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> получения списков компов в сети, почему получает не все компы 
:(
    Опции темы
Step
Дата 10.4.2003, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



САБЖ и с каждой машинны получает свой набор компов.



Код
BOOL WINAPI EnumerateFunc(HWND hwnd,
      HDC hdc,
      LPNETRESOURCE lpnr)
{
DWORD dwResult, dwResultEnum;
HANDLE hEnum;
DWORD cbBuffer = 16384;      // 16K is a good size
DWORD cEntries = -1;         // enumerate all possible entries
LPNETRESOURCE lpnrLocal;     // pointer to enumerated structures
DWORD i;
//
// Call the WNetOpenEnum function to begin the enumeration.
//
dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources
RESOURCETYPE_ANY,   // all resources
0,        // enumerate all resources
lpnr,     // NULL first time the function is called
&hEnum);  // handle to the resource

if (dwResult != NO_ERROR)
{  
//
// Process errors with an application-defined error handler.
//
return FALSE;
}
//
// Call the GlobalAlloc function to allocate resources.
//
lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);

do
{  
//
// Initialize the buffer.
//
ZeroMemory(lpnrLocal, cbBuffer);
//
// Call the WNetEnumResource function to continue
//  the enumeration.
//
dwResultEnum = WNetEnumResource(hEnum,      // resource handle
 &cEntries,  // defined locally as -1
 lpnrLocal,  // LPNETRESOURCE
 &cbBuffer); // buffer size
//
// If the call succeeds, loop through the structures.
//
if (dwResultEnum == NO_ERROR)
{
 for(i = 0; i < cEntries; i++)
 {
  // Call an application-defined function to
  //  display the contents of the NETRESOURCE structures.
  //
  SendDlgItemMessage (AfxGetApp()->m_pMainWnd->m_hWnd, IDC_LIST1, LB_ADDSTRING, NULL, (LPARAM)lpnrLocal[i].lpRemoteName);

  // If the NETRESOURCE structure represents a container resource,
  //  call the EnumerateFunc function recursively.

  if(RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage
   & RESOURCEUSAGE_CONTAINER))
   if(!EnumerateFunc(hwnd, hdc, &lpnrLocal[i])) {}
 }
}
// Process errors.
//
else if (dwResultEnum != ERROR_NO_MORE_ITEMS)
{
 break;
}
}
//
// End do.
//
while(dwResultEnum != ERROR_NO_MORE_ITEMS);
//
// Call the GlobalFree function to free the memory.
//
GlobalFree((HGLOBAL)lpnrLocal);
//
// Call WNetCloseEnum to end the enumeration.
//
dwResult = WNetCloseEnum(hEnum);

if(dwResult != NO_ERROR)
{
//
// Process errors.
//
return FALSE;
}

return TRUE;
}


void CMFCDlg::OnBnClickedButton3()
{
EnumerateFunc (m_hWnd, NULL, NULL);
}



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
-=Baa=-
Дата 10.4.2003, 13:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а ты через сетевое окружение видишь все компы на тех машинах? ведь может они просто еще не проявились... если комп перегрузить, то он увидить совершенно все компы, которые есть на данный момент и на которых включен нетбиос
Более надежный способ - посылать мееелкий пакет пинга %) притом один в диапазон ипов.
  Вверх
Step
Дата 10.4.2003, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
а ты через сетевое окружение видишь все компы на тех машинах? ведь может они просто еще не проявились... если комп перегрузить, то он увидить совершенно все компы, которые есть на данный момент и на которых включен нетбиос
Более надежный способ - посылать мееелкий пакет пинга %) притом один в диапазон ипов.

у меня рядом стоит две машины, одна другую видит а наоборот нет, хотя вторая видит много того что не видит первая..
Цитата
Более надежный способ - посылать мееелкий пакет пинга %) притом один в диапазон ипов
ага просканировать весь диапозон 171,11,7,0-255, а у меня в сети еще 3 сигмента 171,12,7,х 171,13,7,х 171,14,7,х ты прикинь сколько сканировать будет


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Guest
Дата 11.4.2003, 08:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Step, не больше 30 секунд.
  Вверх
Step
Дата 11.4.2003, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Step, не больше 30 секунд.
ща проверю если сбрехал - разорву на части smile.gif


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 11.4.2003, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



1 пакет пинга + около 50 потоков.
Считаем... в секунду 50 хостов...
254 хоста в ~5
3 подсети в ~15 секунд.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 11.4.2003, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



спасиюо


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Step
Дата 15.4.2003, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



и всетаки почему приведенный код работает не стобильно


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
_IGOR
Дата 15.4.2003, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 9.3.2003

Репутация: нет
Всего: нет



Попробуй вместо
dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources
RESOURCETYPE_ANY,   // all resources
0,        // enumerate all resources
lpnr,     // NULL first time the function is called
&hEnum);  

Написать
DWORD dwScope = RESOURCE_CONTEXT;

dwResult = WNetOpenEnum(dwScope, NULL, NULL, NULL, &hEnum);

У меня работает!
PM MAIL   Вверх
Step
Дата 16.4.2003, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



_IGOR спасибо попробую, может объяснишь в чем фишка


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
man2002ua
Дата 16.4.2003, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Step, а ты не пробовал для получения всех компов в сети использовать NetServerEnum - у меня работает гораздо быстрее чем EnumResource


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Step
Дата 16.4.2003, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



а как это делать, я представления не имею об этом


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Unregistered_man
Дата 16.4.2003, 11:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот прямо из MSDN

Код
#ifndef UNICODE
#define UNICODE
#endif

#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
  LPSERVER_INFO_101 pBuf = NULL;
  LPSERVER_INFO_101 pTmpBuf;
  DWORD dwLevel = 101;
  DWORD dwPrefMaxLen = -1;
  DWORD dwEntriesRead = 0;
  DWORD dwTotalEntries = 0;
  DWORD dwTotalCount = 0;
  DWORD dwServerType = SV_TYPE_SERVER; // all servers
  DWORD dwResumeHandle = 0;
  NET_API_STATUS nStatus;
  LPTSTR pszServerName = NULL;
  DWORD i;

  if (argc > 2)
  {
     fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
     exit(1);
  }
  // The server is not the default local computer.
  //
  if (argc == 2)
     pszServerName = argv[1];
  //
  // Call the NetServerEnum function to retrieve information
  //  for all servers, specifying information level 101.
  //
  nStatus = NetServerEnum(pszServerName,
                          dwLevel,
                          (LPBYTE *) &pBuf,
                          dwPrefMaxLen,
                          &dwEntriesRead,
                          &dwTotalEntries,
                          dwServerType,
                          NULL,
                          &dwResumeHandle);
  //
  // If the call succeeds,
  //
  if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
  {
     if ((pTmpBuf = pBuf) != NULL)
     {
        //
        // Loop through the entries and
        //  print the data for all server types.
        //
        for (i = 0; i < dwEntriesRead; i++)
        {
           assert(pTmpBuf != NULL);

           if (pTmpBuf == NULL)
           {
              fprintf(stderr, "An access violation has occurred\n");
              break;
           }

           printf("\tPlatform: %d\n", pTmpBuf->sv101_platform_id);
           wprintf(L"\tName:     %s\n", pTmpBuf->sv101_name);
           printf("\tVersion:  %d.%d\n",
                  pTmpBuf->sv101_version_major,
                  pTmpBuf->sv101_version_minor);
           printf("\tType:     %d", pTmpBuf->sv101_type);
           //
           // Check to see if the server is a domain controller;
           //  if so, identify it as a PDC or a BDC.
           //
           if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_CTRL)
              wprintf(L" (PDC)");
           else if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL)
              wprintf(L" (BDC)");
           
           printf("\n");
           //
           // Also print the comment associated with the server.
           //
           wprintf(L"\tComment:  %s\n\n", pTmpBuf->sv101_comment);

           pTmpBuf++;
           dwTotalCount++;
        }
        // Display a warning if all available entries were
        //  not enumerated, print the number actually
        //  enumerated, and the total number available.

        if (nStatus == ERROR_MORE_DATA)
        {
           fprintf(stderr, "\nMore entries available!!!\n");
           fprintf(stderr, "Total entries: %d", dwTotalEntries);
        }

        printf("\nEntries enumerated: %d\n", dwTotalCount);
     }
  }
  else
     fprintf(stderr, "A system error has occurred: %d\n", nStatus);
  //
  // Free the allocated buffer.
  //
  if (pBuf != NULL)
     NetApiBufferFree(pBuf);

  return 0;
}


  Вверх
Step
Дата 16.4.2003, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



спасибо


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
_IGOR
Дата 16.4.2003, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 9.3.2003

Репутация: нет
Всего: нет



Закрыли мою тему! Хотя она была более общая и с дополнительными вопросами!
Ладнo...
Буду здесь задавать вопросы.

1.Народ! Как перекопировать файл с одного компа на другой в локальной сети?
2. Допустим я вывел список всех групп, которые находятся в локальной сети. Далее , например щелкаю мышкой и хочу увидеть список компов входящих в данную. Т.е вопрос в следующем как узнать какие компы входят в данную группу?
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.