如何检索netstat命令的结果

我试图得到在我的电脑打开的端口列表中的c + +代码。所以,我想使用DOS命令netstat 。 我已经写了这个system("netstat -a")但我不能检索它返回的结果。

你可以从这个代码开始

 int main() { char buf[10000]; FILE *p = _popen("netstat -a", "r"); std::string s; for (size_t count; (count = fread(buf, 1, sizeof(buf), p));) s += string(buf, buf + count); cout<<s<<endl; _pclose(p); } 

你可以使用FILE *results = _popen("netstat -a"); 然后从文件中读取结果的results (例如freadfgets等)

或者,您可以使用GetTcpTable直接检索您需要的数据。 这是一个相当完整的例子,检索大部分相同的数据netstat -a会:

 #include <windows.h> #include <iphlpapi.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib, "iphlpapi.lib") #pragma comment(lib, "ws2_32.lib") #define addr_size (3 + 3*4 + 1) // xxx.xxx.xxx.xxx\0 char const *dotted(DWORD input) { char output[addr_size]; sprintf(output, "%d.%d.%d.%d", input>>24, (input>>16) & 0xff, (input>>8)&0xff, input & 0xff); return strdup(output); } int main() { MIB_TCPTABLE *tcp_stats; MIB_UDPTABLE *udp_stats; DWORD size = 0; unsigned i; char const *s1, *s2; GetTcpTable(tcp_stats, &size, TRUE); tcp_stats = (MIB_TCPTABLE *)malloc(size); GetTcpTable(tcp_stats, &size, TRUE); for (i=0; i<tcp_stats->dwNumEntries; ++i) { printf("TCP:\t%s:%d\t%s:%d\n", s1=dotted(ntohl(tcp_stats->table[i].dwLocalAddr)), ntohs(tcp_stats->table[i].dwLocalPort), s2=dotted(ntohl(tcp_stats->table[i].dwRemoteAddr)), ntohs(tcp_stats->table[i].dwRemotePort)); free((char *)s1); free((char *)s2); } free(tcp_stats); return 0; } 

请注意,我很久以前写过这篇文章 – 它比C ++多得多。 如果我今天写这篇文章的话,我相当肯定我会做相当多的事情,至少有一点不同。