我試圖在我的電腦中以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. grep某些命令的結果(例如netstat -apn)
- 2. sh shell code - 檢索命令結果
- 3. 通過結果搜索命令?
- 4. 如何解釋sp_spaceused命令與索引有關的結果
- 5. 如何對Vim中的所有搜索結果執行命令?
- 6. 瞭解linux中的netstat -na命令
- 7. 如何打印命令的結果以及結果的數量?
- 8. 檢索結果
- 9. shell腳本運行netstat命令並通過電子郵件發送結果
- 10. 如何以bash語言執行命令並檢查其結果
- 11. 如何檢索@Async方法的結果
- 12. Ubuntu的netstat命令 - 如何保持更新?
- 13. 如何重定向結果「!find ...」命令把lftp命令
- 14. 使用命令的結果
- 15. linux'ls -lisa'命令的結果
- 16. oracle命令的結果
- 17. 檢索IEnumerable結果值的結果
- 18. 如何在sqlite中檢索結果
- 19. 任何獲取最近執行命令結果的unix命令?
- 20. 擊:如果(命令)|(命令)
- 21. IMAP附件檢索命令
- 22. WMIC命令追加結果
- 23. Dockerfile RUN命令結果
- 24. Tweepy Twitter API命令結果
- 25. 在Ruby中打印命令的結果時,如何保持命令的* colorized *輸出結果?
- 26. 如何在linux的下一個命令中引用一個命令的結果?
- 27. Oracle中的TRUNCATE命令如何在刪除表後檢索表的結構?
- 28. 如何檢查Python腳本中的bash測試命令的結果?
- 29. 如何使用斜槓命令(/)獲得有組織的搜索URL結果?
- 30. 如何將命令的結果傳遞給docker檢查格式(Golang模板)?
它完美,但只是我想知道的是什麼將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