我試圖在我的電腦中以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