diff --git a/SharpSnmpLib/Messaging/Discoverer.cs b/SharpSnmpLib/Messaging/Discoverer.cs
index 3a202d23..e2bbcc8d 100644
--- a/SharpSnmpLib/Messaging/Discoverer.cs
+++ b/SharpSnmpLib/Messaging/Discoverer.cs
@@ -58,7 +58,7 @@ public sealed partial class Discoverer
/// The broadcast address.
/// The community.
/// The discovering time interval, in milliseconds.
- /// must be an IPv4 address. IPv6 is not yet supported here.
+ /// must be configured to a valid multicast address when IPv6 is used. For example, "[ff02::1]:161"
public void Discover(VersionCode version, IPEndPoint broadcastAddress, OctetString community, int interval)
{
if (broadcastAddress == null)
@@ -72,11 +72,6 @@ public void Discover(VersionCode version, IPEndPoint broadcastAddress, OctetStri
}
var addressFamily = broadcastAddress.AddressFamily;
- if (addressFamily == AddressFamily.InterNetworkV6)
- {
- throw new ArgumentException("IP v6 is not yet supported.", nameof(broadcastAddress));
- }
-
byte[] bytes;
_requestId = Messenger.NextRequestId;
if (version == VersionCode.V3)
@@ -91,9 +86,16 @@ public void Discover(VersionCode version, IPEndPoint broadcastAddress, OctetStri
}
using var udp = new UdpClient(addressFamily);
+ if (addressFamily == AddressFamily.InterNetworkV6)
+ {
+ udp.JoinMulticastGroup((IPAddress?)broadcastAddress.Address);
+ }
+ else if (addressFamily == AddressFamily.InterNetwork)
+ {
#if (!CF)
- udp.EnableBroadcast = true;
+ udp.EnableBroadcast = true;
#endif
+ }
#if NET471
udp.Send(bytes, bytes.Length, broadcastAddress);
#else