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