File: scapyPlugin.py

package info (click to toggle)
linux 6.1.8-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,488,076 kB
  • sloc: ansic: 23,401,844; asm: 266,744; sh: 108,976; makefile: 49,705; python: 36,927; perl: 36,810; cpp: 6,044; yacc: 4,904; lex: 2,722; awk: 1,440; ruby: 25; sed: 5
file content (54 lines) | stat: -rw-r--r-- 1,703 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/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
        lscapyinfo = self.args.caseinfo['scapy']
        if type(lscapyinfo) != list:
            lscapyinfo = [ lscapyinfo, ]

        for scapyinfo in lscapyinfo:
            scapy_keys = ['iface', 'count', 'packet']
            missing_keys = []
            keyfail = False
            for k in scapy_keys:
                if k not in scapyinfo:
                    keyfail = True
                    missing_keys.append(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'])