GetTcpTable获取开放的端口

 

  
  
  
  
  1. ////获取tcp的连接信息 模拟netstat,此处只获取本地开放的端口 
  2.   ////获取tcp的连接信息 模拟netstat,此处只获取本地开发的端口 
  3.   vector<int> VengConfig::EnumTCPTable() 
  4.   { 
  5.       vector<int> nOpenPort; 
  6.       PMIB_TCPTABLE pTcpTable = NULL; 
  7.       DWORD dwSize = 0; 
  8.       DWORD dwRetVal = ERROR_SUCCESS; 
  9.  
  10.       struct   in_addr rip; 
  11.       struct   in_addr lip; 
  12.       char  szrip[32] = {0}; 
  13.       char  szlip[32] = {0}; 
  14.       char sLocalIP[32]={0},sRemoteIP[32]={0}; 
  15.       u_short nLocalPort = 0; 
  16.  
  17.       pTcpTable = (MIB_TCPTABLE *) MALLOC(sizeof(MIB_TCPTABLE2)); 
  18.       if (pTcpTable == NULL) { 
  19.           printf("Error allocating memory\n"); 
  20.           return nOpenPort; 
  21.       } 
  22.  
  23.       dwSize = sizeof (MIB_TCPTABLE); 
  24.       if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) == 
  25.           ERROR_INSUFFICIENT_BUFFER) { 
  26.               FREE(pTcpTable); 
  27.               pTcpTable = (MIB_TCPTABLE *) MALLOC(dwSize); 
  28.               if (pTcpTable == NULL) { 
  29.                   printf("Error allocating memory\n"); 
  30.                   return nOpenPort; 
  31.               } 
  32.       } 
  33.  
  34.       string TmpStr; 
  35.       if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) == NO_ERROR) 
  36.       { 
  37.           for (int i = 0; i < (int) pTcpTable->dwNumEntries; i++) 
  38.           { 
  39.               rip.S_un.S_addr = pTcpTable->table[i].dwRemoteAddr; 
  40.               lip.S_un.S_addr = pTcpTable->table[i].dwLocalAddr; 
  41.  
  42.               if (pTcpTable->table[i].dwState == MIB_TCP_STATE_LISTEN)   
  43.                   pTcpTable->table[i].dwRemotePort = 0; 
  44.  
  45.               strcpy_s(sLocalIP,inet_ntoa(lip)); 
  46.               if ( !strcmp(sLocalIP,"127.0.0.1") ) 
  47.               { 
  48.                   continue
  49.               } 
  50.               nLocalPort = htons((u_short)pTcpTable->table[i].dwLocalPort); 
  51.               char cPortBuf[10] = {0}; 
  52.               sprintf_s(cPortBuf,"%d",nLocalPort); 
  53.               if ( TmpStr.find(cPortBuf) == -1 ) 
  54.               { 
  55.                   nOpenPort.push_back(nLocalPort); 
  56.               } 
  57.               TmpStr = TmpStr + cPortBuf +","
  58.  
  59.               //sprintf_s(szlip,sizeof(szlip),"%s:%d",inet_ntoa(lip),nLocalPort); 
  60.               //strcpy_s(sRemoteIP,inet_ntoa(rip)); 
  61.  
  62.               //sprintf_s(szrip,sizeof(szrip),"%s:%d",inet_ntoa(rip),htons((u_short)pTcpTable->table[i].dwRemotePort)); 
  63.               //printf("TCP\t%-24s%-24s%s\r\n",szlip,szrip,TcpState[pTcpTable->table[i].dwState]); 
  64.           } 
  65.           sort(nOpenPort.begin(),nOpenPort.end()); 
  66.       } 
  67.       else 
  68.       { 
  69.           printf("\tGetTcpTable failed with %d\n", dwRetVal); 
  70.           FREE(pTcpTable); 
  71.           return nOpenPort; 
  72.       } 
  73.  
  74.       if (pTcpTable != NULL) { 
  75.           FREE(pTcpTable); 
  76.           pTcpTable = NULL; 
  77.       } 
  78.  
  79.       return nOpenPort; 
  80.   } 

 

你可能感兴趣的:(GetTcpTable获取开放的端口)