für eine kleine Bastelei versuche ich mich derzeit daran UDP Pakete aus einer Multicastgruppe abzufischen.
Sinn und Zwecke des ganzen ist es, die SSDP/UPnP Announcements mitzubekommen und zu verarbeiten.
Ich habe mir einen kleinen Test zusammengebaut der wie ich meine eigentlich so funktionieren müsste aber nicht tut.
Anstatt die gewünschten Pakete zu empfangen, bekomme ich nur die Discovery-Messages die der lokale Client selbst in die Gruppe sendet.
Dabei ist es egal ob der lokale Endpunkt IPAddress.Any oder die konkrete IP des NICs ist.
Mitglied in der Gruppe bin ich auch sonst würde ich zumindest die Discoveryversuche nicht mitbekommen.
Per WireShark sehe ich auch die Announcements die ich eigentlich hätte abfischen wollen.
Könnt ihr mir mitteilen wo hier mein Fehler liegt?
[TestMethod]
public void SocketTest()
{
int port = 1900;
IPAddress multicastIP = IPAddress.Parse("239.255.255.250");
IPAddress localIP = IPAddress.Any;
IPEndPoint localEP = new IPEndPoint(localIP, port);
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(multicastIP));
socket.Bind(localEP);
EndPoint ep = new IPEndPoint(multicastIP, port);
while (true)
{
var buffer = new byte[1024];
EndPoint senderEP = new IPEndPoint(IPAddress.Any, 0);
var received = socket.ReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref senderEP);
var message = Encoding.UTF8.GetString(buffer, 0, received);
Debug.WriteLine($"{senderEP}\r\n{message}");
}
}
}