X-Git-Url: http://plrg.eecs.uci.edu/git/?p=pingpong.git;a=blobdiff_plain;f=Code%2FProjects%2FSmartPlugDetector%2Fsrc%2Fmain%2Fjava%2Fedu%2Fuci%2Fiotproject%2FMain.java;h=8a0aa7fbc7cfff4ebbad836e16e5194700c4d420;hp=a687cacc3c6476a538b45ce1a402139598677f94;hb=2e29319e311ab1cb579a42f3664dabc029bd819d;hpb=b1acb219ba6e405def38b248381627d8eac59605 diff --git a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java index a687cac..8a0aa7f 100644 --- a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java +++ b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java @@ -34,31 +34,57 @@ public class Main { // ------------ # Code for extracting traffic generated by a device within x seconds of a trigger # ------------ // Paths to input and output files (consider supplying these as arguments instead) and IP of the device for // which traffic is to be extracted: + String path = "/scratch/July-2018"; // Rahmadi + //String path = "/Users/varmarken/temp/UCI IoT Project/experiments"; // Janus // D-Link July 26 experiment -// final String inputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/dlink/dlink.wlan1.local.pcap"; -// final String outputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/dlink/dlink-processed.pcap"; -// final String triggerTimesFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/dlink/dlink-july-26-2018.timestamps"; -// final String deviceIp = "192.168.1.246"; // .246 == phone; .199 == dlink plug? +// final String inputPcapFile = path + "/2018-07/dlink/dlink.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-07/dlink/dlink-processed.pcap"; +// final String triggerTimesFile = path + "/2018-07/dlink/dlink-july-26-2018.timestamps"; +// final String deviceIp = "192.168.1.199"; // .246 == phone; .199 == dlink plug? // TP-Link July 25 experiment -// final String inputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/tplink/tplink.wlan1.local.pcap"; -// final String outputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/tplink/tplink-processed.pcap"; -// final String triggerTimesFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/tplink/tplink-july-25-2018.timestamps"; +// final String inputPcapFile = path + "/2018-07/tplink/tplink.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-07/tplink/tplink-processed.pcap"; +// final String triggerTimesFile = path + "/2018-07/tplink/tplink-july-25-2018.timestamps"; // final String deviceIp = "192.168.1.159"; + // SmartThings Plug July 25 experiment +// final String inputPcapFile = path + "/2018-07/stplug/stplug.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-07/stplug/stplug-processed.pcap"; +// final String triggerTimesFile = path + "/2018-07/stplug/smartthings-july-25-2018.timestamps"; +// final String deviceIp = "192.168.1.246"; // .246 == phone; .142 == SmartThings Hub (note: use eth0 capture for this!) + // Wemo July 30 experiment - final String inputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/wemo/wemo.wlan1.local.pcap"; - final String outputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/wemo/wemo-processed.pcap"; - final String triggerTimesFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-07/wemo/wemo-july-30-2018.timestamps"; - final String deviceIp = "192.168.1.145"; +// final String inputPcapFile = path + "/2018-07/wemo/wemo.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-07/wemo/wemo-processed.pcap"; +// final String triggerTimesFile = path + "/2018-07/wemo/wemo-july-30-2018.timestamps"; +// final String deviceIp = "192.168.1.145"; + + // Wemo Insight July 31 experiment +// final String inputPcapFile = path + "/2018-07/wemoinsight/wemoinsight.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-07/wemoinsight/wemoinsight-processed.pcap"; +// final String triggerTimesFile = path + "/2018-07/wemoinsight/wemo-insight-july-31-2018.timestamps"; +// final String deviceIp = "192.168.1.135"; // TP-Link BULB August 1 experiment -// final String inputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-08/tplink-bulb/tplink-bulb.wlan1.local.pcap"; -// final String outputPcapFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-08/tplink-bulb/tplink-bulb-processed.pcap"; -// final String triggerTimesFile = "/Users/varmarken/temp/UCI IoT Project/experiments/2018-08/tplink-bulb/tplink-bulb-aug-1-2018.timestamps"; +// final String inputPcapFile = path + "/2018-08/tplink-bulb/tplinkbulb.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-08/tplink-bulb/tplinkbulb-processed.pcap"; +// final String triggerTimesFile = path + "/2018-08/tplink-bulb/tplink-bulb-aug-3-2018.timestamps"; // final String deviceIp = "192.168.1.140"; + // Kwikset Doorlock August 6 experiment +// final String inputPcapFile = path + "/2018-08/kwikset-doorlock/kwikset-doorlock.wlan1.local.pcap"; +// final String outputPcapFile = path + "/2018-08/kwikset-doorlock/kwikset-doorlock-processed.pcap"; +// final String triggerTimesFile = path + "/2018-08/kwikset-doorlock/kwikset-doorlock-aug-6-2018.timestamps"; +// final String deviceIp = "192.168.1.246"; // .246 == phone; .142 == SmartThings Hub (note: use eth0 capture for this!) + + // Hue BULB August 1 experiment + final String inputPcapFile = path + "/2018-08/hue-bulb/hue-bulb.wlan1.local.pcap"; + final String outputPcapFile = path + "/2018-08/hue-bulb/hue-bulb-processed.pcap"; + final String triggerTimesFile = path + "/2018-08/hue-bulb/hue-bulb-aug-7-2018.timestamps"; + final String deviceIp = "192.168.1.246"; + TriggerTimesFileReader ttfr = new TriggerTimesFileReader(); List triggerTimes = ttfr.readTriggerTimes(triggerTimesFile, false); // Tag each trigger with "ON" or "OFF", assuming that the first trigger is an "ON" and that they alternate. @@ -105,6 +131,34 @@ public class Main { final Map> pktPairFreqsByHostname = TcpConversationUtils.countPacketPairFrequenciesByHostname(allConversations, dnsMap); System.out.println("Counted frequencies of packet pairs per hostname"); + // For each user action, reassemble the set of TCP connections occurring shortly after + final Map> userActionToConversations = trafficLabeler.getLabeledReassembledTcpTraffic(); + final Map>> userActionsToConvsByHostname = trafficLabeler.getLabeledReassembledTcpTraffic(dnsMap); + System.out.println("Reassembled TCP conversations occurring shortly after each user event"); + + + + // Contains all ON events: hostname -> sequence identifier -> list of conversations with that sequence + Map>> ons = new HashMap<>(); + // Contains all OFF events: hostname -> sequence identifier -> list of conversations with that sequence + Map>> offs = new HashMap<>(); + userActionsToConvsByHostname.forEach((ua, hostnameToConvs) -> { + Map>> outer = ua.getType() == Type.TOGGLE_ON ? ons : offs; + hostnameToConvs.forEach((host, convs) -> { + Map> seqsToConvs = TcpConversationUtils. + groupConversationsByPacketSequence(convs); + outer.merge(host, seqsToConvs, (oldMap, newMap) -> { + newMap.forEach((sequence, cs) -> oldMap.merge(sequence, cs, (list1, list2) -> { + list1.addAll(list2); + return list1; + })); + return oldMap; + }); + }); + }); + + System.out.println(""); + // ------------------------------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------------------------------- }