cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scapyPlugin.py (1703B)


      1#!/usr/bin/env python3
      2
      3import os
      4import signal
      5from string import Template
      6import subprocess
      7import time
      8from TdcPlugin import TdcPlugin
      9
     10from tdc_config import *
     11
     12try:
     13    from scapy.all import *
     14except ImportError:
     15    print("Unable to import the scapy python module.")
     16    print("\nIf not already installed, you may do so with:")
     17    print("\t\tpip3 install scapy==2.4.2")
     18    exit(1)
     19
     20class SubPlugin(TdcPlugin):
     21    def __init__(self):
     22        self.sub_class = 'scapy/SubPlugin'
     23        super().__init__()
     24
     25    def post_execute(self):
     26        if 'scapy' not in self.args.caseinfo:
     27            if self.args.verbose:
     28                print('{}.post_execute: no scapy info in test case'.format(self.sub_class))
     29            return
     30
     31        # Check for required fields
     32        lscapyinfo = self.args.caseinfo['scapy']
     33        if type(lscapyinfo) != list:
     34            lscapyinfo = [ lscapyinfo, ]
     35
     36        for scapyinfo in lscapyinfo:
     37            scapy_keys = ['iface', 'count', 'packet']
     38            missing_keys = []
     39            keyfail = False
     40            for k in scapy_keys:
     41                if k not in scapyinfo:
     42                    keyfail = True
     43                    missing_keys.append(k)
     44            if keyfail:
     45                print('{}: Scapy block present in the test, but is missing info:'
     46                    .format(self.sub_class))
     47                print('{}'.format(missing_keys))
     48
     49            pkt = eval(scapyinfo['packet'])
     50            if '$' in scapyinfo['iface']:
     51                tpl = Template(scapyinfo['iface'])
     52                scapyinfo['iface'] = tpl.safe_substitute(NAMES)
     53            for count in range(scapyinfo['count']):
     54                sendp(pkt, iface=scapyinfo['iface'])