2013-07-02 119 views
1

我想寫一個實用程序,執行以下操作:解析比較IP地址在C++

  1. 讀取一個文件來解析IP地址
  2. 與此相比,從文件中解析到一個主IP地址列表中找到失蹤者
  3. 輸出的IP地址是缺少

什麼是執行項目2和3的好辦法?到目前爲止,我做了如下得到我已經從文件中解析IP addreses數量的總數:

if (strstr (line, "IP_Address=128.10.")) { 
    fprintf(ofp, "%s\n", line); 
    ip_addresses++; // counter for IP addresses starting with 128.10 
} 

我應該如何進行解析的IP地址比較,我的主列表,以及如何當我檢查我的IP列表時,我可以檢測到丟失的東西嗎?

回答

3

我會在讀取時將每個IP地址轉換爲32位無符號整數(至少假設IPv4,這似乎是這種情況)。

然後我會插入這些矢量和排序它們。對您的主列表執行相同操作,並使用std::set_difference來查找差異。

0

首先,將地址轉換爲無符號整數。假設你保持解析地址作爲整數數組,代碼看起來是這樣的:

// If ip is 195.102.45.203, then unsigned int IP = {195, 102, 45, 203}; 
unsigned int identifier = 0; 
identifier = ((IP[0]*255 + IP[1])*255 + IP[2])*255 + IP[3]; 

插入所有標識符一些載體,排序,並做與主列表中的地址相同。然後檢查是否有任何遺漏的。