brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · 254136e Raw
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