Программирование на C++ глазами хакера


Структура сети


Для того чтобы просмотреть доступные в вашей сети компьютеры, нужно воспользоваться сетевым окружением. Но что, если вам нужно в своей программе сделать просмотр сети? Это очень просто. Сейчас я продемонстрирую программу, с помощью которой можно будет в виде дерева увидеть все компьютеры в сети и их открытые ресурсы.

Создайте новое MFC-приложение в Visual C++ и назовите проект NetNeighbour. В Мастере создания приложений, в разделе Application Type выберите Dialog based, а в разделе Advanced Features — Windows sockets. На жмите кнопку Finish, чтобы среда разработки создала необходимый шаблон приложения.

Прежде чем приступать к программированию, необходимо оформить окно будущей программы. Откройте в редакторе ресурсов диалоговое окно IDD_NETNEIGHBOUR_DIALOG. Растяните по всей свободной поверхности компонент Tree Control (рис. 4.2).

Чтобы можно было работать с этим компонентом, щелкните по нему правой кнопкой мышки. В появившемся меню выберите пункт Add variable, а в поле Variable name укажите m_NetTree. Эта переменная понадобится для добавления в меню новых пунктов.

Рис. 4.2. Использование компонента Tree Control

Теперь все готово для рассмотрения исходного кода. Перейдите в файл NetNeighbourDlg.cpp. Здесь найдите функцию OnInitDialog, которая вызывается во время инициализации окна. В этот момент необходимо создать корневой элемент дерева. Это должно происходить следующим образом:

m_hNetworkRoot = InsertTreeItem(TVI_ROOT, NULL, "My Net", DRIVE_RAMDISK +1);

В переменной m_hNetworkRoot сохраняется результат работы функции InsertTreeItem.

Придется несколько раз использовать такой же код для добавления элементов, и чтобы в одном модуле не повторять одни и те же действия, я все оформил отдельной функцией (листинг 4.2).

Листинг 4.2. Добавление нового элемента в дерево сети
HTREEITEM CNetNeighbourDlg::InsertTreeItem(HTREEITEM hParent, NETRESOURCE *const pNetResource, CString sText, int iImage) { TVINSERTSTRUCT InsertStruct; InsertStruct.hParent = hParent; InsertStruct.hInsertAfter = TVI_LAST; InsertStruct.itemex.mask = TVIF_IMAGE | TVIF_TEXT | TVIF_CHILDREN | TVIF_PARAM; InsertStruct.itemex.pszText = sText.GetBuffer(sText.GetLength()); InsertStruct.itemex.iImage = iImage; InsertStruct.itemex.cChildren = 1; InsertStruct.itemex.lParam = (LPARAM)pNetResource; sText.ReleaseBuffer(); return m_NetTree.InsertItem( &InsertStruct ); }




Начало  Назад  Вперед



Книжный магазин