Supprimez les duplicates de csv et countz-les en Java

J'essaie de prendre des lignes de text à partir d'un file journal créé par mon routeur et de le décomposer dans un file csv pour faciliter la visualisation.

une ligne d'exemple à partir du file journal:

[VPN-IPSEC rule not match] from 192.168.1.254:63991 to 8.8.8.8:53 Wednesday, January 06,2016 08:52:18 

J'espère que le file final aura une colonne pour la règle, l'adresse IP vers l'intérieur, le port vers l'intérieur, l'adresse IP, la sortie, le nom de l'hôte, la date et le nombre de connections (en double).

 public static void main(Ssortingng[] 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"))) { Ssortingng line; while ((line = br.readLine()) != null) { Ssortingng IPaddress = line; Ssortingng IPadd = IPaddress.subssortingng((IPaddress.lastIndexOf("to") +3)); Ssortingng IP = IPadd.subssortingng(0, IPadd.indexOf(":")); Ssortingng Rule = IPaddress.subssortingng((IPaddress.indexOf("[") +1), (IPaddress.indexOf("]"))); Ssortingng Port = IPadd.subssortingng((IPadd.indexOf(":") +1), IPadd.indexOf(" ")); Ssortingng 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 = "ThreatMesortingx"; } 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"); } } Chaîne ligne; public static void main(Ssortingng[] 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"))) { Ssortingng line; while ((line = br.readLine()) != null) { Ssortingng IPaddress = line; Ssortingng IPadd = IPaddress.subssortingng((IPaddress.lastIndexOf("to") +3)); Ssortingng IP = IPadd.subssortingng(0, IPadd.indexOf(":")); Ssortingng Rule = IPaddress.subssortingng((IPaddress.indexOf("[") +1), (IPaddress.indexOf("]"))); Ssortingng Port = IPadd.subssortingng((IPadd.indexOf(":") +1), IPadd.indexOf(" ")); Ssortingng 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 = "ThreatMesortingx"; } 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"); } } 

Il y a plusieurs problèmes que je ne peux pas résoudre avec mon approche de ce problème. L'un d'entre eux est le fait que je ne peux pas dire: "Si IP est supérieur à 192.168.1.0 et inférieur à 192.168.1.254, hôte = réseau domestique" car les IP sont écrites comme des strings pour donner un exemple.

Quelque chose que j'espère que je peux get de l'aide aujourd'hui aujourd'hui, c'est un duplicata. Je veux non seulement supprimer des duplicates de mon file CSV, mais je veux aussi les countr. si un logging count en tant que dupliqué ou non dépendrait de tous les champs étant les mêmes, pas seulement des loggings individuels.

J'aimerais également que la quantité de valeurs uniques soit enregistrée dans une variable afin que je puisse l'imprimer sur la console après la fin de la boucle.

Cela peut facilement être fait dans Excel en utilisant la fonction de supprimer des duplicates et countr si on peut également être fait dans Excel, mais cela nécessiterait d'écrire la formule à chaque fois ou dans le meilleur des cas, en faisant glisser la formule vers le bas.

Vous ne devriez pas essayer de le faire exécuter toute cette logique en une seule fois dans une boucle en mode IO. Oubliez les files CSV et ce que vous connaissez sur Excel. Ils vous dérangent plus qu'ils ne vous aident.

Casser le problème.

Lisez le journal une fois.

Définissez une class POJO correspondant à chaque ligne et créez une list de ces objects, une par ligne.

POJO est un «ancien object Java ordinaire». Juste un tas de champs de données, avec setters et getters. PAR EXEMPLE:

 public class LogEntry { private Ssortingng host; private Ssortingng port; private Ssortingng rule; public Ssortingng getHost() { return this.host; } public void setHost(Ssortingng host) { this.host = host; } public Ssortingng getPort() { return this.port; } public void setPort(Ssortingng port) { this.port = port; } public Ssortingng getRule() { return this.rule; } public void setRule(Ssortingng rule) { this.rule = rule; } } 

Convertissez les adresses IP en numéros. C'est assez facile. 256 ^ 3 * premier quad + 256 ^ 2 * deuxième quad + 256 * 3ème quad + 4ème quad

Exécutez une logique de synthèse pour combiner les dupes, get des counts, etc.

Faites un pas à la fois. Vous y arriverez.