51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
import signal
|
||
|
from string import Template
|
||
|
import subprocess
|
||
|
import time
|
||
|
from TdcPlugin import TdcPlugin
|
||
|
|
||
|
from tdc_config import *
|
||
|
|
||
|
try:
|
||
|
from scapy.all import *
|
||
|
except ImportError:
|
||
|
print("Unable to import the scapy python module.")
|
||
|
print("\nIf not already installed, you may do so with:")
|
||
|
print("\t\tpip3 install scapy==2.4.2")
|
||
|
exit(1)
|
||
|
|
||
|
class SubPlugin(TdcPlugin):
|
||
|
def __init__(self):
|
||
|
self.sub_class = 'scapy/SubPlugin'
|
||
|
super().__init__()
|
||
|
|
||
|
def post_execute(self):
|
||
|
if 'scapy' not in self.args.caseinfo:
|
||
|
if self.args.verbose:
|
||
|
print('{}.post_execute: no scapy info in test case'.format(self.sub_class))
|
||
|
return
|
||
|
|
||
|
# Check for required fields
|
||
|
scapyinfo = self.args.caseinfo['scapy']
|
||
|
scapy_keys = ['iface', 'count', 'packet']
|
||
|
missing_keys = []
|
||
|
keyfail = False
|
||
|
for k in scapy_keys:
|
||
|
if k not in scapyinfo:
|
||
|
keyfail = True
|
||
|
missing_keys.add(k)
|
||
|
if keyfail:
|
||
|
print('{}: Scapy block present in the test, but is missing info:'
|
||
|
.format(self.sub_class))
|
||
|
print('{}'.format(missing_keys))
|
||
|
|
||
|
pkt = eval(scapyinfo['packet'])
|
||
|
if '$' in scapyinfo['iface']:
|
||
|
tpl = Template(scapyinfo['iface'])
|
||
|
scapyinfo['iface'] = tpl.safe_substitute(NAMES)
|
||
|
for count in range(scapyinfo['count']):
|
||
|
sendp(pkt, iface=scapyinfo['iface'])
|