我试图在我的电脑中以C++代码获得打开的端口列表。因此,我想使用DOS命令netstat
。我写了这行system("netstat -a")
,但我无法检索它返回的结果。如何检索netstat命令的结果
1
A
回答
4
您可以使用此代码
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);
}
3
你可以使用FILE *results = _popen("netstat -a");
,然后读取results
结果就像你从一个文件将(例如,fread
,fgets
等)
或者,你可以使用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++。如果我今天写这篇文章,我很确定我会做很多事情,至少有一点不同。
相关问题
- 1. 使用netstat命令检查结果时,'*'的含义是什么?
- 2. 检索POST命令的XML结果
- 3. grep某些命令的结果(例如netstat -apn)
- 4. sh shell code - 检索命令结果
- 5. 如何组合grep命令的结果
- 6. 通过结果搜索命令?
- 7. 如何获得'刀子搜索'命令的结果
- 8. 如何对Vim中的所有搜索结果执行命令?
- 9. 如何解释sp_spaceused命令与索引有关的结果
- 10. 结合的grep的手表和netstat命令
- 11. 了解linux中的netstat -na命令
- 12. 如何检索搜索结果?
- 13. 如何打印命令的结果以及结果的数量?
- 14. 检索结果
- 15. shell脚本运行netstat命令并通过电子邮件发送结果
- 16. 如何汇总SaltStack命令结果?
- 17. 如何检索@Async方法的结果
- 18. 如何检索ADO.NET SqlCommand的结果?
- 19. 如何检索CreateFile结果的FILE *?
- 20. 如何以bash语言执行命令并检查其结果
- 21. Ubuntu的netstat命令 - 如何保持更新?
- 22. 如何理解netstat(下面)命令的输出?
- 23. vbs如何从命令行命令获得结果
- 24. 如何重定向结果“!find ...”命令把lftp命令
- 25. 使用命令的结果
- 26. oracle命令的结果
- 27. linux'ls -lisa'命令的结果
- 28. 命令bash的结果
- 29. GetExtendedUdpTable和netstat结果之间的区别
- 30. 红宝石命令行的宝石搜索到任何结果
它完美,但只是我想知道的是什么将localPort和远程端口之间的区别开始? – Bacem 2013-03-19 16:22:46
@Bacem:脱离主题,但本地端口是本地计算机上的端口,远程端口是远程计算机上的端口。因此,例如,如果我浏览SO,我的本地端口可能是192.168.1.10:60123(即本地计算机上的端口60123),而远程端口可能是www.stackoverflow.com上的端口80(虽然端口80通常会显示作为'www')。 – 2013-03-19 16:34:16