2014-02-24 92 views
1

我正在編寫一個程序來ping IP。 我必須ping一個1000s的特定地址。 現在我想將TTL保存到一個文件以繪製直方圖。 我該怎麼做?我怎樣才能保存TTL文件?將結果存儲在C++文件中

這是我已經試過:

#include "stdafx.h" 
#include "iostream" 
#include "string.h" 
#include "stdlib.h" 
#include "conio.h" 
#include <string> 
#include <windows.h> 
#include <iostream> 
#include <fstream> 

using namespace std; 
static string host; 
static string ping_again; 

void ping() 
{ 
    cout << "Host: "; 
    host="www.yahoo.com"; 
    system (("ping " + host).c_str); 
} 

int main() 
{ 
    ping(); 
    return(0); 
} 

回答

0

您已選擇直接與system()運行ping可執行文件和你所缺少的是命令的輸出捕獲,這樣你就可以解析TTL。

捕獲標準輸出可能已完成popen而不是system,但是,從您列表中包含您似乎在Windows上,這就是它變得複雜。看看這個問題:What is the equivalent to Posix popen() in the Win32 API?,注意,如果你的應用程序是一個控制檯應用程序,你可以調用popen,否則答案會引用你一個MSDN示例,它會痛苦地詳細說明你應該如何調用一個進程並重定向它的輸入/輸出。

重定向並捕獲輸出後,您應該解析字符串以提取TTL。請注意,對於不同版本的Windows,ping.exe可能的輸出會有所不同,並且您幾乎無法控制您實際調用的是什麼ping.exe

替代和更好的方法是使用ICMP的API,而不是直接在主機上您的應用程序運行時調用平可執行的。從IcmpSendEcho開始,並注意它在回覆結構中提供了RTT。