#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; }
浙公网安备 33010602011771号