Changeset 3672

Show
Ignore:
Timestamp:
08/29/08 19:55:26 (5 years ago)
Author:
nopper
Message:

Implementing save and load in SequenceContext? (Scapy)

Location:
branch/PacketManipulator/PM/Backend/Scapy
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branch/PacketManipulator/PM/Backend/Scapy/Context/Sequence.py

    r3636 r3672  
    2323 
    2424from PM.Core.I18N import _ 
     25from PM.Backend.Scapy.serialize import load_sequence, save_sequence 
    2526from PM.Backend.Scapy.utils import execute_sequence 
    2627 
     
    2829     
    2930    class SequenceContext(BaseSequenceContext): 
     31        file_types = [(_('Scapy sequence'), '*.pms')] 
     32 
    3033        def __init__(self, seq, count, inter, iface, strict, report_recv, report_sent, 
    3134                     scallback, rcallback, sudata=None, rudata=None): 
     
    4043            self.title = _('Unsaved') 
    4144            self.summary = _('Executing sequence (%d packets %d times)') % (self.tot_packet_count, count) 
     45         
     46        def save(self): 
     47            if self.cap_file: 
     48                self.seq = self.load_sequence(self.cap_file) 
     49 
     50                if self.seq is not None: 
     51                    self.state = self.SAVED 
     52                    return True 
     53 
     54            self.state = self.NOT_SAVED 
     55            return False 
     56 
     57        def load(self): 
     58            if self.cap_file and self.seq is not None and \ 
     59               save_sequence(self.cap_file, self.seq): 
     60 
     61                self.state = self.SAVED 
     62                return True 
     63 
     64            self.state = self.NOT_SAVED 
     65            return False 
    4266 
    4367        def get_all_data(self): 
  • branch/PacketManipulator/PM/Backend/Scapy/serialize.py

    r3666 r3672  
    2424 
    2525from PM.Core.Atoms import Node 
    26  
    27 from PM import Backend 
     26from PM.Core.Logger import log 
     27 
     28from PM.Backend.Scapy import * 
    2829from PM.Backend import SequencePacket 
    2930 
     
    6263            self.protocol.time = self.current_protocol.time 
    6364 
    64             self.current_node.data.packet = Backend.MetaPacket(self.protocol) 
     65            self.current_node.data.packet = MetaPacket(self.protocol) 
    6566            self.protocol = self.current_protocol = None 
    6667 
     
    9293                proto_time = eval(attrs['time']) 
    9394 
    94                 protocol = Backend.get_proto(proto_id)() 
     95                protocol = get_proto(proto_id)() 
    9596                protocol.time = proto_time 
    9697 
     
    149150                value = self.field_value 
    150151 
    151             field = Backend.get_proto_field(self.current_protocol, 
     152            field = get_proto_field(self.current_protocol, 
    152153                                            self.field_id) 
    153154 
    154             Backend.set_field_value(self.current_protocol, field, value) 
     155            set_field_value(self.current_protocol, field, value) 
    155156 
    156157class SequenceWriter(object): 
     
    237238 
    238239        for proto in protocols: 
    239             attr_vals = {(None, u'id') : Backend.get_proto_name(proto), 
     240            attr_vals = {(None, u'id') : get_proto_name(proto), 
    240241                         (None, u'time') : "%.6f" % proto.time} 
    241242            attr_qnames = {(None, u'id') : u'id', (None, u'time') : u'time'} 
     
    245246 
    246247 
    247             for field in Backend.get_proto_fields(proto): 
    248                 name = Backend.get_field_name(field) 
    249                 value = Backend.get_field_value(proto, field) 
     248            for field in get_proto_fields(proto): 
     249                name = get_field_name(field) 
     250                value = get_field_value(proto, field) 
    250251 
    251252                attr_vals = {(None, u'id') : name} 
     
    262263            self.endElementNS((None, 'proto'), 'proto') 
    263264 
     265def save_sequence(fname, sequence): 
     266    assert isinstance(sequence, Node) 
     267 
     268    try: 
     269        SequenceWriter(fname, sequence) 
     270    except Exception, err: 
     271        log.debug("Cannot save sequence to file %s (%s)" % (fname, str(err))) 
     272        return False 
     273    else: 
     274        return True 
     275 
     276def load_sequence(fname): 
     277    try: 
     278        tree = SequenceLoader("test.xml").tree 
     279        return tree 
     280    except Exception, err: 
     281        log.debug("Cannot load sequence from file %s (%s)" % (fname, str(err))) 
     282        return None 
     283 
    264284if __name__ == "__main__": 
    265285    tree = Node() 
    266     first = Node(SequencePacket(Backend.MetaPacket(Backend.Ether() / Backend.IP() /  Backend.TCP()))) 
    267     first.append_node(Node(SequencePacket(Backend.MetaPacket(Backend.IP())))) 
     286    first = Node(SequencePacket(MetaPacket(Ether() / IP() /  TCP()))) 
     287    first.append_node(Node(SequencePacket(MetaPacket(IP())))) 
    268288 
    269289    tree.append_node(first)