Visual Studio 2010 — программа DHCP C ++

Поэтому я искал вокруг нашел какой-то код, который был с сайта MS Вот и собрал воедино то, что кажется рабочим способом получения информации о dhcp с помощью опции, которую я хочу получить, как вы увидите в коде. Но по какой-то причине единственное, что я получаю от своих методов, это либо ноль, либо ничего. Мне было интересно, есть ли у кого-нибудь понимание.

КОД:

#include "StdAfx.h"#include "WINDOWS.H"#include "Dhcpcsdk.h"//#include "Dhcpcsvc.dll"#include <iostream>

using namespace std;

#pragma comment( lib, "dhcpcsvc.lib" )

#define NUMBER_OF_OPTIONS 7//#define NUMBER_OF_OPTIONS 4
enum OptionArrayPositions
{
MASK,
DNS,
HOSTNAME,
VENDOR,
LEASE_TIME,
MESSAGE_TYPE,
SERVERIP
};

BOOL RetrieveDHCPInfo(LPWSTR pszAdapterName);
void PrintAsAscii(DHCPCAPI_PARAMS param);
void PrintAsIP(DHCPCAPI_PARAMS param);
void PrintAsInt(DHCPCAPI_PARAMS param);
void PrintMask(DHCPCAPI_PARAMS param);
void PrintDNS(DHCPCAPI_PARAMS param);
void PrintHostName(DHCPCAPI_PARAMS param);
void PrintVendor(DHCPCAPI_PARAMS param);
void PrintLeaseTime(DHCPCAPI_PARAMS param);
void PrintMessageType(DHCPCAPI_PARAMS param);
void PrintServerIP(DHCPCAPI_PARAMS param);
void Printer(char[500]);

BOOL RetrieveDHCPInfo(LPWSTR pszAdapterName)
{
DWORD dwError, dwSize;
CHAR TmpBuffer[1000]; // host name won't be larger than thisDHCPCAPI_PARAMS DhcpApiMaskParams = {0,
OPTION_SUBNET_MASK,
FALSE,
NULL,
0
};
DHCPCAPI_PARAMS DhcpApiDNSParams = {0,
OPTION_DOMAIN_NAME_SERVERS,
FALSE,
NULL,
0
};
DHCPCAPI_PARAMS DhcpApiHostNameParams = {0,                // Flags
OPTION_HOST_NAME, // OptionId
FALSE,            // vendor specific?
NULL,             // data filled in on return
0                 // nBytes
};
DHCPCAPI_PARAMS DhcpApiVendorParams = {0,
OPTION_VENDOR_SPEC_INFO,
FALSE,
NULL,
0
};
DHCPCAPI_PARAMS DhcpApiLeaseTimeParams = {0,
OPTION_LEASE_TIME,
FALSE,
NULL,
0
};
DHCPCAPI_PARAMS DhcpApiMsgTypeParams = {0,
OPTION_MESSAGE_TYPE,
FALSE,
NULL,
0
};

DHCPCAPI_PARAMS DhcpApiServerNameParams = {0,
OPTION_SERVER_IDENTIFIER,
FALSE,
NULL,
0
};

DHCPCAPI_PARAMS paramArray[NUMBER_OF_OPTIONS] = { DhcpApiMaskParams,
DhcpApiDNSParams,
DhcpApiHostNameParams,
DhcpApiVendorParams,
DhcpApiLeaseTimeParams,
DhcpApiMsgTypeParams,
DhcpApiServerNameParams
};

DHCPCAPI_PARAMS_ARRAY DhcpApiParamsArray = {NUMBER_OF_OPTIONS,  // only one option to request
paramArray
};
DHCPCAPI_PARAMS_ARRAY SendParams = {0, NULL};

dwSize = sizeof(TmpBuffer);
dwError = DhcpRequestParams(DHCPCAPI_REQUEST_SYNCHRONOUS, // Flags
NULL,                         // Reserved
pszAdapterName,               // Adapter Name
NULL,                         // not using class id
SendParams,                   // nothing to send
DhcpApiParamsArray,           // requesting params
(PBYTE) TmpBuffer,            // buffer
&dwSize,                      // buffer size
NULL                          // Request ID
);

cout << "Your Error Code from DhcpRequestParams is " << dwError << endl;
if( ERROR_MORE_DATA == dwError )
{
//
// dwSize is not large enough.
cout<<"dwSize is not large enough"<<endl;
//
}

int success = FALSE;
if( NO_ERROR == dwError )
{
for(int i=0; i<NUMBER_OF_OPTIONS; i++)
{
if(paramArray[i].nBytesData != 0)
{
success = true;
switch(paramArray[i].OptionId)
{
case OPTION_SUBNET_MASK:
PrintMask(paramArray[i]);
break;
case OPTION_DOMAIN_NAME_SERVERS:
PrintDNS(paramArray[i]);
break;
case OPTION_HOST_NAME:
PrintHostName(paramArray[i]);
break;
case OPTION_VENDOR_SPEC_INFO:
PrintVendor(paramArray[i]);
break;
case OPTION_LEASE_TIME:
PrintLeaseTime(paramArray[i]);
break;
case OPTION_MESSAGE_TYPE:
PrintMessageType(paramArray[i]);
break;
case OPTION_SERVER_IDENTIFIER:
PrintServerIP(paramArray[i]);
break;
}
}
}
cout << endl;
}

if(success == TRUE)
return TRUE;
else
return FALSE;
}

void PrintAsAscii(DHCPCAPI_PARAMS param)
{
unsigned char temp[260];
CopyMemory(temp,
param.Data,
param.nBytesData);

temp[param.nBytesData] = '\0';
cout << temp;
}

void PrintAsIP(DHCPCAPI_PARAMS param)
{
unsigned char temp[260];
CopyMemory(temp,
param.Data,
param.nBytesData);

temp[param.nBytesData] = '\0';
for(unsigned int i=0; i<param.nBytesData; i++)
{
if(i%4 == 0)
{
cout << endl;
}
cout << (int)temp[i]<< ".";
}
}

void PrintAsInt(DHCPCAPI_PARAMS param)
{
unsigned char temp[260];
CopyMemory(temp,
param.Data,
param.nBytesData);

temp[param.nBytesData] = '\0';
cout << (unsigned int)*temp;
}

void PrintMask(DHCPCAPI_PARAMS param)
{
/* Print the subnet mask
* This is stored as Option 1
*
*
*/
cout << endl << "MASK" << endl;
cout << "--------------------------------------------";
PrintAsIP(param);
}

void PrintDNS(DHCPCAPI_PARAMS param)
{
/* Print the DNS Servers
* This is stored as Option 6
*
*
*/
cout << endl << "\nDNS SERVERS" << endl;
cout << "--------------------------------------------";
PrintAsIP(param);
}

void PrintHostName(DHCPCAPI_PARAMS param)
{
/* Print the Host name or IP address if
* that's what's stored in this option
* This is stored as Option 12
*
*/
cout << endl << "\nHOST NAME" << endl;
cout << "--------------------------------------------";
cout << endl << "ANSI String" << endl;
PrintAsAscii(param);
cout << endl << "IP FORMAT";
PrintAsIP(param);
}

void PrintVendor(DHCPCAPI_PARAMS param)
{
/* Print the Vendor parameter
* This is stored as Option 43
*
*
*/
cout << endl << "\nVENDOR PARAMETER" << endl;
cout << "--------------------------------------------";
cout << endl << "ANSI String" << endl;
PrintAsAscii(param);
}

void PrintLeaseTime(DHCPCAPI_PARAMS param)
{
/* Print the Lease Time
* This is stored as Option 51
*
*
*/
cout << endl << "\nLEASE TIME" << endl;
cout << "--------------------------------------------" << endl;
PrintAsInt(param);
cout << endl;
}

void PrintMessageType(DHCPCAPI_PARAMS param)
{
/* Print the message type
* This is stored as Option 53
*
*
*/
cout << endl << "\nMESSAGE TYPE" << endl;
cout << "--------------------------------------------" << endl;;
PrintAsInt(param);
}

void PrintServerIP(DHCPCAPI_PARAMS param)
{
/* Print the DHCP servers IP address
* This is stored as Option 54
*
*
*/
cout << endl << "\nDHCP SERVER" << endl;
cout << "--------------------------------------------";
PrintAsIP(param);
}
void Printer(char input[500]){
cout << input << endl;
}

int main(){

struct DHCPAPI_PARAMS {
ULONG  Flags;
ULONG  OptionId;
BOOL   IsVendor;
LPBYTE Data;
DWORD  nBytesData;
};
/*
DHCPCAPI_PARAMS param;
param.Flags = 0;
param.OptionId = 43;
param.IsVendor = true;
//param.Data
PrintAsIP(param);
*/
DHCPCAPI_PARAMS param = {0,
0,
FALSE,
NULL,
0
};int x = 1;
char name[26];char hold[26];
while(x !=0){
//cout<<"Hello World"<< endl;
//cin>>name;
cin>>x;
param.OptionId = x;
PrintMessageType(param);
PrintServerIP(param);
PrintLeaseTime(param);
PrintVendor(param);
PrintDNS(param);
Printer("\n\nEnter New Value:");
}

return 0;

}

Выход для простого запуска следующий.

ВЫХОД:

введите описание изображения здесь

РЕДАКТИРОВАТЬ:

Я скучаю по тому, как я понял, как использовать попрошайничество, извиняюсь, главное должно выглядеть примерно так, по крайней мере, в отношении того, что следует использовать.

int main(){

//should be using this but not sure how to declare/find my AdapterName or what
//should go there for the current controller to which to make the dhcp calls
//from the client with.
RetrieveDHCPInfo(LPWSTR pszAdapterName);return 0;

}

0

Решение

Подведем итог тем, что ответили на вопрос:

  1. params инициализируется для всех нулей, поэтому вывод будет слишком
  2. RetrieveDHCPInfo() не вызывается в программе. Где DHCPCAPI_PARAMS определяется, и почему вы переопределяете его внутри main?
  3. Чтобы узнать название адаптера, см. GetAdaptersInfo() в http://msdn.microsoft.com/en-us/library/windows/desktop/aa365917(v=vs.85).aspx
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]