0

如何用 Java 编写程序以从文本文件中查找唯一 IP 地址列表?

我只是 Java 的新手。我有以下txt格式的数据:

Date first seen          Duration Proto      Source IP Addr:Port     Destination IP Addr:Port   Packets    Bytes Flows
2013-03-03 23:54:46.574     8.000 UDP      108.169.77.76:12345 ->    108.169.0.112:53           5      325     1
2013-03-03 23:59:51.984     0.000 UDP     100.253.69.196:62458 ->  100.256.234.129:1947         1       68     1
2013-03-03 23:59:52.048     0.000 UDP      108.450.45.35:123124 ->    108.123.0.987:9101        2     1686     1

请注意,我只是编造了这些 IP 地址,实际数据集要大得多。

我想知道如何在 java 中编写程序来查找唯一源/目标 IP 地址的列表?并且还要计算文本文件中每个 IP 地址的出现次数作为源/目标地址?

4

2 回答 2

4

这就是 Set 集合的用途。创建一个包含一行所有数据的类,实现其equalshashcode方法,使其只关心源和目标,然后只需将所有类添加到 Set 中,最终您将获得独特的结果。

于 2013-05-16T00:41:15.117 回答
0

如果您有很多 IP,我建议您将它们转换为长:

public long ipConversion(String addr){
    String[] addrArray = addr.split("\\."); 

    long num = 0; 
    for (int i = 0; i < addrArray.length; i++) { 
        int power = 3 - i;

        num += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power))); 
    } 
    return num; 
}

然后,您可以将唯一的添加到 arrayList 中,用于n元素O(n*log_n)

ArrayList<Long> arr = new ArrayList<>();
int x = Collections.binarySearch(arr, IPaddress);
if(x < 0)//this mean IPaddress doesnt exist in your list
    arr.add(-x-1, IPaddress)
//binary search return -insertionpoint if the element was in the arraylist
//so you should insert it to -insertionpoint-1.

然后将唯一的 ips 转换为 IP 地址格式。

或者,cou 可以覆盖比较两个 IP 的可比较接口,您可以使用它进行二进制搜索。因此,您不必进行转换,这会更快。

于 2013-05-16T05:31:41.397 回答