diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py
index 4aec65a0b053ac71b675d322f443be38f762dd17..01ce0f23a7853effe2d8b362d72ec5edcfe599a9 100644
--- a/scapy/layers/inet.py
+++ b/scapy/layers/inet.py
@@ -325,6 +325,26 @@ class ICMPTimeStampField(IntField):
         return val
 
 
+class DestIPField(IPField):
+    __slots__ = ["defaultdst"]
+    def __init__(self, name, default):
+        IPField.__init__(self, name, None)
+        self.defaultdst = default
+    def dst_from_pkt(self, pkt):
+        if isinstance(pkt.payload, UDP):
+            if pkt.payload.dport == 5353:
+                return "224.0.0.251"
+        return self.defaultdst
+    def i2m(self, pkt, x):
+        if x is None:
+            x = self.dst_from_pkt(pkt)
+        return IPField.i2m(self, pkt, x)
+    def i2h(self, pkt, x):
+        if x is None:
+            x = self.dst_from_pkt(pkt)
+        return IPField.i2h(self, pkt, x)
+
+
 class IP(Packet, IPTools):
     __slots__ = ["_defrag_pos"]
     name = "IP"
@@ -340,7 +360,7 @@ class IP(Packet, IPTools):
                     XShortField("chksum", None),
                     #IPField("src", "127.0.0.1"),
                     Emph(SourceIPField("src","dst")),
-                    Emph(IPField("dst", "127.0.0.1")),
+                    Emph(DestIPField("dst", "127.0.0.1")),
                     PacketListField("options", [], IPOption, length_from=lambda p:p.ihl*4-20) ]
     def post_build(self, p, pay):
         ihl = self.ihl
diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py
index a0ce6b3207aa2dd918e62be9474d12182cd52868..185628633df3efa16280eb6af6dbfc2e37040fd3 100644
--- a/scapy/layers/inet6.py
+++ b/scapy/layers/inet6.py
@@ -247,6 +247,25 @@ class SourceIP6Field(IP6Field):
                 iff,x,nh = conf.route6.route(dst)
         return IP6Field.i2h(self, pkt, x)
 
+class DestIP6Field(IP6Field):
+    __slots__ = ["defaultdst"]
+    def __init__(self, name, default):
+        IP6Field.__init__(self, name, None)
+        self.defaultdst = default
+    def dst_from_pkt(self, pkt):
+        if isinstance(pkt.payload, UDP):
+            if pkt.payload.dport == 5353:
+                return "ff02::fb"
+        return self.defaultdst
+    def i2m(self, pkt, x):
+        if x is None:
+            x = self.dst_from_pkt(pkt)
+        return IP6Field.i2m(self, pkt, x)
+    def i2h(self, pkt, x):
+        if x is None:
+            x = self.dst_from_pkt(pkt)
+        return IP6Field.i2h(self, pkt, x)
+
 ipv6nh = { 0:"Hop-by-Hop Option Header",
            4:"IP",
            6:"TCP",
@@ -358,7 +377,7 @@ class IPv6(_IPv6GuessPayload, Packet, IPTools):
                     ByteEnumField("nh", 59, ipv6nh),
                     ByteField("hlim", 64),
                     SourceIP6Field("src", "dst"), # dst is for src @ selection
-                    IP6Field("dst", "::1") ]
+                    DestIP6Field("dst", "::1") ]
 
     def route(self):
         dst = self.dst