5 from string import Template
8 from TdcPlugin import TdcPlugin
10 from tdc_config import *
13 from scapy.all import *
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")
20 class SubPlugin(TdcPlugin):
22 self.sub_class = 'scapy/SubPlugin'
25 def post_execute(self):
26 if 'scapy' not in self.args.caseinfo:
28 print('{}.post_execute: no scapy info in test case'.format(self.sub_class))
31 # Check for required fields
32 lscapyinfo = self.args.caseinfo['scapy']
33 if type(lscapyinfo) != list:
34 lscapyinfo = [ lscapyinfo, ]
36 for scapyinfo in lscapyinfo:
37 scapy_keys = ['iface', 'count', 'packet']
41 if k not in scapyinfo:
43 missing_keys.append(k)
45 print('{}: Scapy block present in the test, but is missing info:'
46 .format(self.sub_class))
47 print('{}'.format(missing_keys))
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'])