Perform trigger traffic extraction on data from Feb 13 experiment
authorJanus Varmarken <varmarken@gmail.com>
Fri, 20 Jul 2018 20:50:59 +0000 (13:50 -0700)
committerJanus Varmarken <varmarken@gmail.com>
Fri, 20 Jul 2018 20:50:59 +0000 (13:50 -0700)
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/PcapHandleReader.java
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/TriggerTrafficExtractor.java

index b1e56508245515da6259f279f16c77dfa72e2c7f..7cf0c3ce40c078bf3cf3637c187566089a8ff2c8 100644 (file)
@@ -3,10 +3,14 @@ package edu.uci.iotproject;
 import edu.uci.iotproject.analysis.PcapPacketPair;
 import edu.uci.iotproject.analysis.PcapProcessingPipeline;
 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.namednumber.DataLinkType;
 
 import java.io.EOFException;
 import java.net.UnknownHostException;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeoutException;
@@ -87,6 +91,7 @@ public class Main {
         }
         */
 
+        /*
         // -------- 07-17-2018 --------
         // Only consider packets to/from the TP-Link plug.
         PcapReader pcapReader = new PcapReader(args[0], "ip host 192.168.1.159");
@@ -107,9 +112,26 @@ public class Main {
         }
 
         // ----------------------------
+        */
 
-
-
+        // -------- 07-19-2018 --------
+        TriggerTimesFileReader ttfr = new TriggerTimesFileReader();
+        List<Instant> triggerTimes = ttfr.readTriggerTimes("/Users/varmarken/Downloads/tplink-feb-13-2018.timestamps", false);
+//        triggerTimes.stream().forEach(i -> System.out.println(i.atZone(TriggerTimesFileReader.ZONE_ID_LOS_ANGELES).toString()));
+        String pcapFile = "/Users/varmarken/Development/Repositories/UCI/NetworkingGroup/smart_home_traffic/Code/Projects/SmartPlugDetector/pcap/wlan1.local.dns.pcap";
+        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");
+        tte.performExtraction(pkt -> {
+            try {
+                outputter.dump(pkt);
+            } catch (NotOpenException e) {
+                e.printStackTrace();
+            }
+        });
+        outputter.flush();
+        outputter.close();
+        // ----------------------------
 
 
     }
index 968f5deb523ed4b74bf23b79d78c4445f371d27d..e8fc4f52727bf86f5af0351aa621bc4655e0d976 100644 (file)
@@ -46,9 +46,12 @@ public class PcapHandleReader {
             PcapPacket packet;
             while ((packet = mHandle.getNextPacketEx()) != null) {
                 if (prevPacket != null && packet.getTimestamp().isBefore(prevPacket.getTimestamp())) {
+                    System.out.println("Out-of-order (in terms of timestamp) packet detected");
+                    /*
                     // Fail early if assumption doesn't hold.
                     mHandle.close();
                     throw new AssertionError("Packets not in ascending temporal order");
+                    */
                 }
                 if (mPacketFilter.shouldIncludePacket(packet)) {
                     // Packet accepted for inclusion; deliver it to observing client code.
index b17fa5ea1754ece0177de82e8c44f116b1b2c632..86cce0702926727158bcf3b663b7d998e17ccd62 100644 (file)
@@ -54,6 +54,11 @@ public class TriggerTrafficExtractor implements PcapPacketFilter {
 
     @Override
     public boolean shouldIncludePacket(PcapPacket packet) {
+        if (mTriggerIndex >= mTriggerTimes.size()) {
+            // Don't include packet if we've exhausted the list of trigger times.
+            return false;
+        }
+
         // TODO hmm, is this correct?
         Instant trigger = mTriggerTimes.get(mTriggerIndex);
         if (trigger.isBefore(packet.getTimestamp()) &&