Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборка заданий (Лаб практикум) / AiPOS_Laboratornaia_rabota_N2_Proghrammirovaniie_protokolov.doc
Скачиваний:
148
Добавлен:
15.06.2014
Размер:
79.87 Кб
Скачать

Пример программы получения мас-адреса компьютера

(предварительно необходимо прилинковать библиотеку Netapi32.lib)

#include <windows.h>

#include <wincon.h>

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

typedef struct _ASTAT_

{

ADAPTER_STATUS adapt;

NAME_BUFFER NameBuff [30];

}ASTAT, *PASTAT;

ASTAT Adapter;

// Функция получения MAC адреса.

// На вход получает указатель на буфер, куда записывается строковое

// представление полученного MAC адреса.

BOOL GetMacAddress(char *buffer)

{

NCB ncb;

UCHAR uRetCode;

char NetName[50];

memset( &ncb, 0, sizeof(ncb) );

ncb.ncb_command = NCBRESET;

ncb.ncb_lana_num = 0;

uRetCode = Netbios( &ncb );

memset( &ncb, 0, sizeof(ncb) );

ncb.ncb_command = NCBASTAT;

ncb.ncb_lana_num = 0;

strcpy( (char *) ncb.ncb_callname, "* " );

ncb.ncb_buffer = (unsigned char *) &Adapter;

ncb.ncb_length = sizeof(Adapter);

uRetCode = Netbios( &ncb );

if(uRetCode==0)

{

sprintf(buffer, "%02X-%02X-%02X-%02X-%02X-%02X\n",

Adapter.adapt.adapter_address[0],

Adapter.adapt.adapter_address[1],

Adapter.adapt.adapter_address[2],

Adapter.adapt.adapter_address[3],

Adapter.adapt.adapter_address[4],

Adapter.adapt.adapter_address[5]);

return TRUE;

}

return FALSE;

}

Пример программы перечисления компьютеров в локальной сети

#include <windows.h>

#include <wincon.h>

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

#include <Winnetwk.h>

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.

//

NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetOpenEnum");

return FALSE;

}

//

// Call the GlobalAlloc function to allocate resources.

//

lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);

if (lpnrLocal == NULL)

return FALSE;

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.

//

DisplayStruct(hdc, &lpnrLocal[i]);

// 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]))

TextOut(hdc, 10, 10, _T("EnumerateFunc returned FALSE."), 29);

}

}

// Process errors.

//

else if (dwResultEnum != ERROR_NO_MORE_ITEMS)

{

NetErrorHandler(hwnd, dwResultEnum, (LPSTR)"WNetEnumResource");

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.

//

NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetCloseEnum");

return FALSE;

}

return TRUE;

}