【发布时间】:2016-04-10 19:40:49
【问题描述】:
我正在尝试从路由器创建的日志文件中提取文本行并将其分解为 csv 文件以便于查看。
日志文件中的示例行:
[VPN-IPSEC rule not match] from 192.168.1.254:63991 to 8.8.8.8:53 Wednesday, January 06,2016 08:52:18
我希望最终文件有一个列用于规则、IP 地址向内、端口向内、IP 地址输出、端口输出、主机名、日期和连接数量(重复)。
public static void main(String[] args) throws UnknownHostException, IOException {
PrintStream diskwriter = new PrintStream("C:\\Users\\admin\\Desktop\\RawIPs.csv");
diskwriter.print("Rule" + ",");
diskwriter.print("Host Name" + ",");
diskwriter.print("IP Address" + ",");
diskwriter.println("Port");
int count = 0;
try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\admin\\Desktop\\IPs.txt"))) {
String line;
while ((line = br.readLine()) != null) {
String IPaddress = line;
String IPadd = IPaddress.substring((IPaddress.lastIndexOf("to") +3));
String IP = IPadd.substring(0, IPadd.indexOf(":"));
String Rule = IPaddress.substring((IPaddress.indexOf("[") +1), (IPaddress.indexOf("]")));
String Port = IPadd.substring((IPadd.indexOf(":") +1), IPadd.indexOf(" "));
String host;
count++;
if(IP.startsWith("212.56.7"))
{
host = "Plus Net";
}
else if(IP.equals("157.56.144.215") || IP.equals("40.113.152.30") || IP.equals("23.102.160.172") || IP.equals("157.56.106.184") || IP.equals("94.245.121.251") || IP.equals("157.56.75.164") || IP.equals("134.170.185.125") || IP.equals("191.237.208.126") || IP.equals("191.232.139.253") || IP.equals("157.55.231.252"))
{
host = "Microsoft";
}
else if(IP.startsWith("104.16.") || IP.equals("172.69.2.2"))
{
host = "CloudFlare";
}
else if(IP.startsWith("68.232."))
{
host = "EdgeCast Networks";
}
else if(IP.startsWith("192.225.15"))
{
host = "ThreatMetrix";
}
else if(IP.startsWith("70.32."))
{
host = "Gigenet";
}
else if(IP.startsWith("185.31.19"))
{
host = "Fastly London 1 Operations (Hosting Company)";
}
else if(IP.startsWith("96.31."))
{
host = "Host Collective";
}
else if(IP.startsWith("182.70."))
{
host = "Bharti Telenet (India - Vodafone)";
}
else if(IP.startsWith("17."))
{
host = "Apple Inc.";
}
else if(IP.startsWith("199.16.15"))
{
host = "Twitter Inc.";
}
else if(IP.startsWith("128.0."))
{
host = "RIPE Network Coordination Centre";
}
else if(IP.startsWith("129.1."))
{
host = "Bowling Green State University";
}
else if(IP.startsWith("185.42.205.144") || IP.startsWith("192.16.64.181"))
{
host = "Twitch.tv";
}
else if(IP.startsWith("122.248.142.74"))
{
host = "Netgear";
}
else if(IP.startsWith("173.241.2"))
{
host = "OpenX Technologies";
}
else if(IP.startsWith("69.172."))
{
host = "Peer 1 Network (USA)";
}
else if(IP.startsWith("204.154.110") || IP.startsWith("204.154.111"))
{
host = "DoubleVerify";
}
else if(IP.startsWith("208.146."))
{
host = "Internap Network Services";
}
else
{
InetAddress addr = InetAddress.getByName(IP);
host = addr.getCanonicalHostName();
}
diskwriter.print(Rule + ",");
diskwriter.print(host + ",");
diskwriter.print(IP + ",");
diskwriter.println(Port);
}
System.out.println("There were " + count + " connections");
}
}
有很多问题我无法用我的方法解决这个问题。其中之一是我不能说:“如果 IP 大于 192.168.1.0 且小于 192.168.1.254,则主机 = 家庭网络”,因为 IP 被写成字符串来举例。
我希望我今天能得到帮助的东西是重复的。我不仅想从我的 CSV 文件中删除重复项,还想计算它们。一条记录是否算作重复取决于所有字段是否相同,而不仅仅是单个记录。
我还希望将唯一值的数量保存在一个变量中,以便在循环结束后将其打印到控制台。
这可以在 excel 中使用删除重复项功能轻松完成,并且计算 if 也可以在 excel 中完成,但这需要每次都编写公式,或者在最佳情况下,向下拖动公式。
【问题讨论】:
标签: java excel csv ip ip-address