Wie bestimme ich die Quell-IP eines Multicast-Pakets in C #?

Ich muss die IP eines Computers ermitteln, der mir ein Multicast-Paket gesendet hat, damit ich per Unicast darauf antworten kann.

Ich verwende den folgenden csharp (.Net 3.5) -Code, um die Pakete über eine Multicast-Verbindung zu empfangen (der Kürze halber wurde der Code bearbeitet, Fehlerüberprüfung und irrelevante Optionen wurden entfernt):

IPEndPoint LocalHostIPEnd = new IPEndPoint(IPAddress.Any, 8623);
Socket UDPSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); 
UDPSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, 1);

UDPSocket.Bind(LocalHostIPEnd);

//Join the multicast group
UDPSocket.SetSocketOption(
     SocketOptionLevel.IP,
     SocketOptionName.AddMembership,
     new MulticastOption(IPAddress.Parse("225.2.2.6")));

IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any ,Target_Port); 
EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint; 

// Create the state object. 
StateObject state = new StateObject();
state.buffer.Initialize();
state.workSocket = UDPSocket;
state.id = "state0";
//Set up my callback
UDPSocket.BeginReceiveMessageFrom(
    state.buffer, 
    0,
    StateObject.BufferSize, 
    0,
    ref LocalEndPoint, 
    new AsyncCallback(ReceiveCallback), 
    state);

Und hier ist der Rückruf, bei dem ich versuche, die Quell-IP zu erhalten:

private void ReceiveCallback( IAsyncResult ar ) 
{
    IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any, Target_Port);
    EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint;

    // Read data from the remote device. 
    // The following code attempts to determine the IP of the sender,
    // but instead gets the IP of the multicast group.
    SocketFlags sFlags = new SocketFlags();
    IPPacketInformation ipInf = new IPPacketInformation();

    int bytesRead = client.EndReceiveMessageFrom(ar, ref sFlags,
        ref LocalEndPoint, out ipInf);

    log.Warn("Got address: " + ipInf.Address.ToString());
}

Ich weiß, dass die richtige Quell-IP im IP-Header enthalten ist, da ich sie dort deutlich sehen kann, wenn ich das Paket in Wireshark schnüffle. Anstatt jedoch die IP des sendenden Systems (192.168.3.4) auszudrucken, druckt der obige Code die IP der von mir abonnierten Multicast-Gruppe (225.2.2.6) aus. Gibt es eine Möglichkeit, stattdessen die Quell-IP zu ermitteln?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage