示例#1
0
    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
示例#2
0
    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