绵羊

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#include <Nb30.h>
#include <Iphlpapi.h>
//#include "afx.h"

typedef struct tagASTAT
{
    ADAPTER_STATUS adapt;
    NAME_BUFFER NameBuff[30];
}ASTAT,*LPASTAT;

typedef struct tagMAC_ADDRESS
{
    BYTE b1,b2,b3,b4,b5,b6;
}MAC_ADDRESS,*LPMAC_ADDRESS;

using namespace std;

void get_MAC() //get MAC address by using NetBIOS command
{
     NCB ncb;
     LANA_ENUM lana_enum;
     memset(&ncb,0,sizeof(ncb));
     ncb.ncb_command=NCBENUM;
     ncb.ncb_buffer=(unsigned char *)&lana_enum;
     ncb.ncb_length=sizeof(lana_enum);
     UCHAR uRetCode=Netbios(&ncb);
     int num;
     MAC_ADDRESS mac_addr[5];
     if(uRetCode==0)
     {
         num=lana_enum.length;
         for(int i=0;i<num;i++)
         {
             memset(&ncb,0,sizeof(ncb));
             ASTAT Adapter;
             ncb.ncb_command = NCBRESET;
             ncb.ncb_lana_num=lana_enum.lana[i];
             uRetCode=Netbios(&ncb);
             memset(&ncb,0,sizeof(ncb));
             ncb.ncb_command = NCBASTAT;
             ncb.ncb_lana_num=lana_enum.lana[i];
             strcpy((char *)ncb.ncb_callname,"*    ");
             ncb.ncb_buffer=(unsigned char *)&Adapter;
             ncb.ncb_length=sizeof(Adapter);
             uRetCode=Netbios(&ncb);
             mac_addr[i].b1=Adapter.adapt.adapter_address[0];
             mac_addr[i].b2=Adapter.adapt.adapter_address[1];
             mac_addr[i].b3=Adapter.adapt.adapter_address[2];
             mac_addr[i].b4=Adapter.adapt.adapter_address[3];
             mac_addr[i].b5=Adapter.adapt.adapter_address[4];
             mac_addr[i].b6=Adapter.adapt.adapter_address[5];
             printf("The No.%d MAC: %X:%X:%X:%X:%X:%X \n",(i+1),mac_addr[i].b1,mac_addr[i].b2,mac_addr[i].b3,mac_addr[i].b4,mac_addr[i].b5,mac_addr[i].b6);
         }
     }
     
}


void get_DNS()  //Get the option of DNS by using GetNetworkParams() function
{
     FIXED_INFO * FixedInfo;
     ULONG ulOutBufLen;
     DWORD dwRetVal;
     IP_ADDR_STRING * pIPAddr;
     FixedInfo=(FIXED_INFO *)GlobalAlloc(GPTR,sizeof(FIXED_INFO));//Give some bytes from heap
     ulOutBufLen=sizeof(FixedInfo);
     if(ERROR_BUFFER_OVERFLOW==GetNetworkParams(FixedInfo,&ulOutBufLen))
     {
         GlobalFree(FixedInfo); //Release the memory blocks
         FixedInfo=(FIXED_INFO *)GlobalAlloc(GPTR,ulOutBufLen);
     }
     if(dwRetVal=GetNetworkParams(FixedInfo,&ulOutBufLen))
     {
         printf("ERROR: %08x\n",dwRetVal);
     }
     else
     {
         printf("Host name : %s \n",FixedInfo->HostName);
         printf("Domain : %s \n",FixedInfo->DomainName);
         printf("Prior DNS : %s \n",FixedInfo->DnsServerList.IpAddress.String);
     }
}


int main(int argc, char *argv[])
{
    char * str;
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2),(LPWSADATA)&WSAData);
    char hostname[128];
    struct hostent * ho;
    if(gethostname(hostname,128)==0)
    {
        cout<<hostname<<endl;
        ho=gethostbyname(hostname);
        str=inet_ntoa(*(struct in_addr *)ho->h_addr_list[0]);
        cout<<str<<endl;
        get_MAC();
        get_DNS();
    }
    else
    {
        cout<<"error"<<endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

 

posted on 2012-05-01 10:08  绵羊  阅读(150)  评论(0)    收藏  举报