Main.java: extracting pairs related to events.tplinkra.com
authorJanus Varmarken <varmarken@gmail.com>
Mon, 23 Jul 2018 21:37:42 +0000 (14:37 -0700)
committerJanus Varmarken <varmarken@gmail.com>
Mon, 23 Jul 2018 21:37:42 +0000 (14:37 -0700)
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/PcapPacketPair.java

index 276560f25635e2e979c903d7d0ea79fd0547a1dc..e0a51a317a962a453881f320b71054a16abd42cd 100644 (file)
@@ -5,6 +5,7 @@ import edu.uci.iotproject.analysis.TcpConversationUtils;
 import edu.uci.iotproject.analysis.TriggerTrafficExtractor;
 import edu.uci.iotproject.io.TriggerTimesFileReader;
 import org.pcap4j.core.*;
+import org.pcap4j.packet.IpV4Packet;
 import org.pcap4j.packet.namednumber.DataLinkType;
 
 import java.io.EOFException;
@@ -12,6 +13,7 @@ import java.net.UnknownHostException;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.TimeoutException;
 
@@ -122,6 +124,7 @@ public class Main {
         String tpLinkPlugIp = "192.168.1.159";
         TriggerTrafficExtractor tte = new TriggerTrafficExtractor(pcapFile, triggerTimes, tpLinkPlugIp);
         final PcapDumper outputter = Pcaps.openDead(DataLinkType.EN10MB, 65536).dumpOpen("/Users/varmarken/temp/traces/output/tplink-filtered.pcap");
+        DnsMap dnsMap = new DnsMap();
         TcpReassembler tcpReassembler = new TcpReassembler();
         tte.performExtraction(pkt -> {
             try {
@@ -129,7 +132,7 @@ public class Main {
             } catch (NotOpenException e) {
                 e.printStackTrace();
             }
-        }, tcpReassembler);
+        }, dnsMap, tcpReassembler);
         outputter.flush();
         outputter.close();
 
@@ -156,6 +159,29 @@ public class Main {
             else return 0;
         });
         System.out.println("list of pairs produced");
+        List<PcapPacketPair> eventstplinkraPairs = new ArrayList<>();
+        List<List<PcapPacketPair>> otherPairs = new ArrayList<>();
+        String hostname = "events.tplinkra.com";
+        for (List<PcapPacketPair> lppp : pairs) {
+            IpV4Packet ipPacket = lppp.get(0).getFirst().get(IpV4Packet.class);
+            // If packets are associated with the hostname
+            if (dnsMap.isRelatedToCloudServer(ipPacket.getHeader().getSrcAddr().getHostAddress(), hostname) ||
+                    dnsMap.isRelatedToCloudServer(ipPacket.getHeader().getDstAddr().getHostAddress(), hostname)) {
+                eventstplinkraPairs.addAll(lppp);
+            } else {
+                // Pairs associated with different server
+                otherPairs.add(lppp);
+            }
+        }
+        HashMap<String, Integer> pairCount = new HashMap<>();
+        for (PcapPacketPair ppp : eventstplinkraPairs) {
+            if (pairCount.containsKey(ppp.toString())) {
+                pairCount.put(ppp.toString(), pairCount.get(ppp.toString()) + 1);
+            } else {
+                pairCount.put(ppp.toString(), 1);
+            }
+        }
+        System.out.println("pairCount map built");
         // ----------------------------
     }
 
index 764fd0f62b4a38618601fafb9844cd6d2a6a2eaa..1d2889566fb625515cf39ee611a452ea656352a5 100644 (file)
@@ -22,4 +22,8 @@ public class PcapPacketPair {
 
     public PcapPacket getSecond() { return mSecond; }
 
+    @Override
+    public String toString() {
+        return getFirst().length() + ", "  + (getSecond() == null ? "null" : getSecond().length());
+    }
 }