1.获取本地主机名 #include<stdio.h> #include<winsock2.h> #pragma comment(lib,"ws2_32.lib") void getIPorName(void) { WSADATA wsaData; char name[155]; char *ip; PHOSTENT hostinfo; if ( WSAStartup( MAKEWORD(1,1), &wsaData ) == 0 ) { if( gethostname ( name, sizeof(name)) == 0) { if((hostinfo = gethostbyname(name)) != NULL) { ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); printf("本机IP:%s/n本机名:%s/n",ip,name); } } WSACleanup( ); } } int main(void) { getIPorName(); return 0; } 2.根据ip获取其他主机名 #include <iostream> #include <windows.h> using namespace std; int GetCommandOutput(char *pCommandInput, char *pCommandOutput) { char szCommandBuf[1024]; //char szCommandOutput[65536]; char *pCommandOutReceive = pCommandOutput; DWORD dwRead; HANDLE hRead; HANDLE hWrite; SECURITY_ATTRIBUTES saAttr; saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.lpSecurityDescriptor = NULL; saAttr.bInheritHandle = TRUE; if(!CreatePipe(&hRead, &hWrite, &saAttr, 0)) { printf("CreatePipe Error, return [%d]!/n", GetLastError()); return 1; } memset(szCommandBuf, 0, sizeof(szCommandBuf)); strcpy(szCommandBuf, pCommandInput); STARTUPINFO lpStartupInfo; PROCESS_INFORMATION lpProcessInfo; memset(&lpStartupInfo, 0, sizeof(STARTUPINFO)); lpStartupInfo.cb = sizeof(STARTUPINFO); GetStartupInfo(&lpStartupInfo); lpStartupInfo.hStdError = hWrite; lpStartupInfo.hStdOutput = hWrite; lpStartupInfo.wShowWindow = SW_HIDE; lpStartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; if (!CreateProcess(NULL, szCommandBuf, NULL, NULL, TRUE, NULL, NULL, NULL, &lpStartupInfo, &lpProcessInfo)) { printf("CreateProcess Error, return [%d]!/n", GetLastError()); return 2; } CloseHandle(hWrite); //memset(szCommandOutput, 0, sizeof(szCommandOutput)); while(ReadFile(hRead, pCommandOutReceive, 4095, &dwRead, NULL)) { pCommandOutReceive += dwRead; } //printf("pCommandOutput = %s/n", pCommandOutput); CloseHandle(hRead); return 0; } int main() { char szCmdbuf[200] = "nbtstat -a 192.160.8.91"; char szCommandOutput[65536]; char szServerName[200] = {0}; int len; memset(szCommandOutput, 0, sizeof(szCommandOutput)); GetCommandOutput(szCmdbuf, szCommandOutput); printf("CmdStr = /n%s/n", szCommandOutput); sscanf(szCommandOutput, "%*[^-]%*55c%[^<]", szServerName); printf("strlen = %d/n",strlen(szServerName)); len = strlen(szServerName); char *p = szServerName; while(isspace(p[--len])) p[len]=0; printf("szServerName = [%s]/n", szServerName); printf("strlen = %d/n",strlen(szServerName)); return 0; }