code: def _NDP_Attack_DAD_DoS(reply_callback, iface=None, mac_src_filter=None,
                          tgt_filter=None, reply_mac=None):
      
  
      def is_request(req, mac_src_filter, tgt_filter):
          """
          Check if packet req is a request
          """
  
          # Those simple checks are based on Section 5.4.2 of RFC 4862
          if not (Ether in req and IPv6 in req and ICMPv6ND_NS in req):
              return 0
  
          # Get and compare the MAC address
          mac_src = req[Ether].src
          if mac_src_filter and mac_src != mac_src_filter:
              return 0
  
          # Source must be the unspecified address
          if req[IPv6].src != "::":
              return 0
  
          # Check destination is the link-local solicited-node multicast
          # address associated with target address in received NS
          tgt = inet_pton(socket.AF_INET6, req[ICMPv6ND_NS].tgt)
          if tgt_filter and tgt != tgt_filter:
              return 0
          received_snma = inet_pton(socket.AF_INET6, req[IPv6].dst)
          expected_snma = in6_getnsma(tgt)
          if received_snma != expected_snma:
              return 0
  
          return 1
  
      if not iface:
          iface = conf.iface
  
      # To prevent sniffing our own traffic
      if not reply_mac:
          reply_mac = get_if_hwaddr(iface)
      sniff_filter = "icmp6 and not ether src %s" % reply_mac
  
      sniff(store=0,
            filter=sniff_filter,
            lfilter=lambda x: is_request(x, mac_src_filter, tgt_filter),
            prn=lambda x: reply_callback(x, reply_mac, iface),
            iface=iface)
docs: Internal generic helper accepting a specific callback as first argument,
      for NS or NA reply. See the two specific functions below.