55 lines · python
1#!/usr/bin/env python32 3import os4import signal5from string import Template6import subprocess7import time8from TdcPlugin import TdcPlugin9 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 return30 31 # Check for required fields32 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 = False40 for k in scapy_keys:41 if k not in scapyinfo:42 keyfail = True43 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'])55