WindowsでipconfigでNIC情報を取得
UCHAR Netbios(
PNCB pncb /* pointer to the network control block*/) ; . , MAC , !
を使用できます. JAVA MAC , IPCONFIG 。 。
:
typedef struct _tagAdapterInfo{
CString Description;//
CString PhysicalAddr;//MAC
CString IpAddr[64];//IP 64
CString SubnetMask[64];// IP 64
CString Gateway;//
LONG lIpNum;// IP
}AdapterInfo,*PAdapterInfo;
:
int GetAllAdapterInfo(CArray<AdapterInfo,AdapterInfo>& AdapterInfoList,
CString& Error);
:
int CTestDlg::GetAllAdapterInfo(
CArray&AdapterInfoList,CString Error){HANDLE hRead,hWrite;// ハンドルCString strErrorを する//エラーメッセージCString strCon,strBuf;BOOL nReturn;char buffer[2048]={0} LPSTR p="ipconfig/all"; unsigned long lnReadNum; int nIndex=0,from=0,to=0,nLoop=0; STARTUPINFO sa; PROCESS_INFORMATION pinfo; SECURITY_ATTRIBUTES saPipe; saPipe.nLength= sizeof( SECURITY_ATTRIBUTES ); saPipe.lpSecurityDescriptor = NULL; saPipe.bInheritHandle = TRUE;if(!CreatePipe(&hRead,&hWrite,&saPipe,0)//パイプの {strError.Format("CREATE PIPE ERRORCODE:%d",GetLastError();Error=strError;return 1; } memset( &sa, 0, sizeof(sa)); sa.cb=sizeof(sa); sa.dwFlags=STARTF_USESHOWWINDOW |STARTF_USEstdHANDLES; sa.wShowWindow = SW_HIDE; sa.hStdOutput=hWrite; sa.hStdError=hWrite;
// プロセスnReturn=::CreateProcess(NULL,p,&saPipe,&saPipe,&saPipe,TRUE,0,NULL,&sa,&pinfo); if (!nReturn) { strError.Format("CREATE PROCESS ERRORCODE:%d",GetLastError()); Error=strError; return 2; } //Sleep(1000); CloseHandle( pinfo.hThread ); CloseHandle( pinfo.hProcess ); CloseHandle( hWrite);//リードパイプの do{memset(buffer,02048);nReturn=ReadFile(hRead,buffer,MAX_PATH,&lnReadNum,NULL);if(nReturn){strBuf.Format("%s",buffer);strCon+=strBuf; } }while(nReturn&&lnReadNum);
AdapterInfo info;
// でカード を す
do { nIndex=strCon.Find("Description",nIndex); if (nIndex<=-1) { break; } from=strCon.Find(":",nIndex)+2; to=strCon.Find("/n",from); info.Description=strCon.Mid(from,to-from-1); nIndex=to; nIndex=strCon.Find("Physical Address",nIndex); from=strCon.Find(":",nIndex)+2; to=strCon.Find("/n",from); info.PhysicalAddr=strCon.Mid(from,to-from-1); nIndex=to; nLoop=0; while(nLoop<64) { nIndex=strCon.Find("IP Address",nIndex); if (nIndex<=-1) { break; } from=strCon.Find(":",nIndex)+2; to=strCon.Find("/n",from); info.IpAddr[nLoop]=strCon.Mid(from,to-from-1); nIndex=to; nIndex=strCon.Find("Subnet Mask",nIndex); from=strCon.Find(":",nIndex)+2; to=strCon.Find("/n",from); info.SubnetMask[nLoop]=strCon.Mid(from,to-from-1); nLoop++; } info.lIpNum=nLoop; nIndex=to; nIndex=strCon.Find("Default Gateway",nIndex); from=strCon.Find(":",nIndex)+2; to=strCon.Find("/n",from); info.Gateway=strCon.Mid(from,to-from-1); AdapterInfoList.Add(info); }while(TRUE); return 0;} はただパイプの1 の も な で、みんなと かち います!また、IPヘルプ を してIPを することもできます.