コード例 #1
0
ファイル: test_network.py プロジェクト: farikonsec/veripy
class TargetInterface(object):
    def __init__(self, ips=None, ll_protocol=None, link_addr=None):
        self.ips = IPAddressCollection(ips or [])
        self.__ll_addr = link_addr
        self.ll_protocol = ll_protocol

    def global_ip(self, offset=0, type='v6'):
        return self.ips.global_ip(offset=offset, type=type)

    def has_ip(self, ip):
        return str(ip) in self.ips

    def ip(self, offset=0, scope=IPAddressCollection.GLOBAL, type='v6'):
        return self.ips.ip(offset=offset, scope=scope, type=type)

    def link_local_ip(self, offset=0, type='v6'):
        return self.ips.link_local_ip(offset=offset, type=type)

    def ll_addr(self):
        return self.__ll_addr

    def __str__(self):
        s = "<veripy.Target address=" + str(self.__ll_addr)

        for ip in self.ip(offset='*', scope='*'):
            s += "\n                  ip=" + str(ip)

        s += ">"

        return s
コード例 #2
0
ファイル: test_network.py プロジェクト: mwrlabs/veripy
class TargetInterface(object):

    def __init__(self, ips=None, ll_protocol=None, link_addr=None):
        self.ips = IPAddressCollection(ips or [])
        self.__ll_addr = link_addr
        self.ll_protocol = ll_protocol

    def global_ip(self, offset=0, type='v6'):
        return self.ips.global_ip(offset=offset, type=type)

    def has_ip(self, ip):
        return str(ip) in self.ips

    def ip(self, offset=0, scope=IPAddressCollection.GLOBAL, type='v6'):
        return self.ips.ip(offset=offset, scope=scope, type=type)

    def link_local_ip(self, offset=0, type='v6'):
        return self.ips.link_local_ip(offset=offset, type=type)
    
    def ll_addr(self):
        return self.__ll_addr

    def __str__(self):
        s = "<veripy.Target address=" + str(self.__ll_addr)

        for ip in self.ip(offset='*', scope='*'):
            s += "\n                  ip=" + str(ip)

        s += ">"

        return s
コード例 #3
0
ファイル: test_network.py プロジェクト: farikonsec/veripy
    def __init__(self, ips=None, link=None, link_addr=None):
        self.ips = IPAddressCollection(ips or [])
        self.link = link
        self.ll_addr = link_addr
        self.ll_protocol = self.link.ll_protocol
        self.__on_receive_callbacks = []
        self.__on_send_callbacks = []

        self.link.bind(self)
        self.reset()
コード例 #4
0
ファイル: test_network.py プロジェクト: mwrlabs/veripy
    def __init__(self, ips=None, link=None, link_addr=None):
        self.ips = IPAddressCollection(ips or [])
        self.link = link
        self.ll_addr = link_addr
        self.ll_protocol = self.link.ll_protocol
        self.__on_receive_callbacks = []
        self.__on_send_callbacks = []

        self.link.bind(self)
        self.reset()
コード例 #5
0
ファイル: test_network.py プロジェクト: mwrlabs/veripy
 def __init__(self, ips=None, ll_protocol=None, link_addr=None):
     self.ips = IPAddressCollection(ips or [])
     self.__ll_addr = link_addr
     self.ll_protocol = ll_protocol
コード例 #6
0
ファイル: test_network.py プロジェクト: mwrlabs/veripy
class Interface(object):

    def __init__(self, ips=None, link=None, link_addr=None):
        self.ips = IPAddressCollection(ips or [])
        self.link = link
        self.ll_addr = link_addr
        self.ll_protocol = self.link.ll_protocol
        self.__on_receive_callbacks = []
        self.__on_send_callbacks = []

        self.link.bind(self)
        self.reset()

    def accept(self, frame):
        try:
            if frame.haslayer(self.ll_protocol.frame):
                packet = frame.getlayer(self.ll_protocol.frame)[1]
            else:
                packet = frame
        except AttributeError:
            packet = frame

        self.__raw_buffer.append(frame)
        self.__receive_buffer.append(packet)

        for callback in self.__on_receive_callbacks:
            callback(packet, self)

    def clear_received(self):
        self.__raw_buffer = []
        self.__receive_buffer = []

    def global_ip(self, offset=0, type='v6'):
        return self.ips.global_ip(offset=offset, type=type)

    def has_ip(self, ip):
        return str(ip) in self.ips
    
    def ip(self, offset=0, scope=IPAddressCollection.GLOBAL, type='v6'):
        return self.ips.ip(offset=offset, scope=scope, type=type)

    def link_local_ip(self, offset=0, type='v6'):
        return self.ips.link_local_ip(offset=offset, type=type)

    def on_send(self, callback):
        self.__on_send_callbacks.append(callback)

    def on_receive(self, callback):
        self.__on_receive_callbacks.append(callback)

    def real(self):
        return RealInterface(self)

    def received(self, src=None, dst=None, lbda=None, seq=None, type=None, raw=False):
        packet_list = PacketList(raw and self.__raw_buffer[:] or self.__receive_buffer[:])

        def packet_dst_in(dsts, p):
            dsts = isinstance(dsts, list) and dsts or [dsts]
            
            for d in dsts:
                d = IPAddress.identify(d)
                
                if d.version() == 4 and p.haslayer(IP) and IPAddress.identify(p.getlayer(IP).dst) == d:
                    return True
                elif d.version() == 6 and p.haslayer(IPv6) and IPAddress.identify(p.getlayer(IPv6).dst) == d:
                    return True

            return False

        def packet_src_in(srcs, p):
            srcs = isinstance(srcs, list) and srcs or [srcs]

            for s in srcs:
                s = IPAddress.identify(s)

                if s.version() == 4 and p.haslayer(IP) and IPAddress.identify(p.getlayer(IP).src) == s:
                    return True
                elif s.version() == 6 and p.haslayer(IPv6) and IPAddress.identify(p.getlayer(IPv6).src) == s:
                    return True

            return False

        if not (src == None and dst == None and lbda == None and seq == None and type == None):
            packet_list = packet_list.filter(lambda p: (src == None or hasattr(p, 'haslayer') and packet_src_in(src, p)) and \
                                                        (dst == None or hasattr(p, 'haslayer') and packet_dst_in(dst, p)) and \
                                                        (seq == None or hasattr(p, 'haslayer') and (p.haslayer(ICMPv6EchoRequest) and p.getlayer(ICMPv6EchoRequest).seq == seq or p.haslayer(ICMPv6EchoReply) and p.getlayer(ICMPv6EchoReply).seq == seq)) and \
                                                        (type == None or hasattr(p, 'haslayer') and p.getlayer(type)) and \
                                                        (lbda == None or lbda(p)))
        
        return packet_list

    def reset(self):
        self.__raw_buffer = []
        self.__receive_buffer = []
        self.__send_buffer = []
    
    def send(self, packet):
        try:
            if not packet.haslayer(self.ll_protocol.frame):
                # TODO: is ff:ff:ff:ff:ff:ff acceptable as the target address
                #       here? or do we need to resolve the target MAC address?
                frame = self.ll_protocol.frame(src=self.ll_addr, dst="ff:ff:ff:ff:ff:ff")/packet
            else:
                frame = packet
        except AttributeError:
            frame = packet
        
        self.__send_buffer.append(packet)
        
        for callback in self.__on_send_callbacks:
            callback(frame, self)
        
        self.link.accept(frame, previous_hop=self)

    def __str__(self):
        return "<veripy.Interface link=" + self.link.name + ">"
コード例 #7
0
ファイル: test_network.py プロジェクト: farikonsec/veripy
 def __init__(self, ips=None, ll_protocol=None, link_addr=None):
     self.ips = IPAddressCollection(ips or [])
     self.__ll_addr = link_addr
     self.ll_protocol = ll_protocol
コード例 #8
0
ファイル: test_network.py プロジェクト: farikonsec/veripy
class Interface(object):
    def __init__(self, ips=None, link=None, link_addr=None):
        self.ips = IPAddressCollection(ips or [])
        self.link = link
        self.ll_addr = link_addr
        self.ll_protocol = self.link.ll_protocol
        self.__on_receive_callbacks = []
        self.__on_send_callbacks = []

        self.link.bind(self)
        self.reset()

    def accept(self, frame):
        try:
            if frame.haslayer(self.ll_protocol.frame):
                packet = frame.getlayer(self.ll_protocol.frame)[1]
            else:
                packet = frame
        except AttributeError:
            packet = frame

        self.__raw_buffer.append(frame)
        self.__receive_buffer.append(packet)

        for callback in self.__on_receive_callbacks:
            callback(packet, self)

    def clear_received(self):
        self.__raw_buffer = []
        self.__receive_buffer = []

    def global_ip(self, offset=0, type='v6'):
        return self.ips.global_ip(offset=offset, type=type)

    def has_ip(self, ip):
        return str(ip) in self.ips

    def ip(self, offset=0, scope=IPAddressCollection.GLOBAL, type='v6'):
        return self.ips.ip(offset=offset, scope=scope, type=type)

    def link_local_ip(self, offset=0, type='v6'):
        return self.ips.link_local_ip(offset=offset, type=type)

    def on_send(self, callback):
        self.__on_send_callbacks.append(callback)

    def on_receive(self, callback):
        self.__on_receive_callbacks.append(callback)

    def real(self):
        return RealInterface(self)

    def received(self,
                 src=None,
                 dst=None,
                 lbda=None,
                 seq=None,
                 type=None,
                 raw=False):
        packet_list = PacketList(raw and self.__raw_buffer[:]
                                 or self.__receive_buffer[:])

        def packet_dst_in(dsts, p):
            dsts = isinstance(dsts, list) and dsts or [dsts]

            for d in dsts:
                d = IPAddress.identify(d)

                if d.version() == 4 and p.haslayer(IP) and IPAddress.identify(
                        p.getlayer(IP).dst) == d:
                    return True
                elif d.version() == 6 and p.haslayer(
                        IPv6) and IPAddress.identify(
                            p.getlayer(IPv6).dst) == d:
                    return True

            return False

        def packet_src_in(srcs, p):
            srcs = isinstance(srcs, list) and srcs or [srcs]

            for s in srcs:
                s = IPAddress.identify(s)

                if s.version() == 4 and p.haslayer(IP) and IPAddress.identify(
                        p.getlayer(IP).src) == s:
                    return True
                elif s.version() == 6 and p.haslayer(
                        IPv6) and IPAddress.identify(
                            p.getlayer(IPv6).src) == s:
                    return True

            return False

        if not (src == None and dst == None and lbda == None and seq == None
                and type == None):
            packet_list = packet_list.filter(lambda p: (src == None or hasattr(p, 'haslayer') and packet_src_in(src, p)) and \
                                                        (dst == None or hasattr(p, 'haslayer') and packet_dst_in(dst, p)) and \
                                                        (seq == None or hasattr(p, 'haslayer') and (p.haslayer(ICMPv6EchoRequest) and p.getlayer(ICMPv6EchoRequest).seq == seq or p.haslayer(ICMPv6EchoReply) and p.getlayer(ICMPv6EchoReply).seq == seq)) and \
                                                        (type == None or hasattr(p, 'haslayer') and p.getlayer(type)) and \
                                                        (lbda == None or lbda(p)))

        return packet_list

    def reset(self):
        self.__raw_buffer = []
        self.__receive_buffer = []
        self.__send_buffer = []

    def send(self, packet):
        try:
            if not packet.haslayer(self.ll_protocol.frame):
                # TODO: is ff:ff:ff:ff:ff:ff acceptable as the target address
                #       here? or do we need to resolve the target MAC address?
                frame = self.ll_protocol.frame(
                    src=self.ll_addr, dst="ff:ff:ff:ff:ff:ff") / packet
            else:
                frame = packet
        except AttributeError:
            frame = packet

        self.__send_buffer.append(packet)

        for callback in self.__on_send_callbacks:
            callback(frame, self)

        self.link.accept(frame, previous_hop=self)

    def __str__(self):
        return "<veripy.Interface link=" + self.link.name + ">"