Ich muss die IP eines Computers ermitteln, der mir ein Multicast-Paket gesendet hat, damit ich über Unicast darauf antworten kann.Wie kann ich die Quell-IP eines Multicast-Pakets in C# ermitteln?
ich die folgende csharp (.NET 3.5) Code unter Verwendung der Pakete über eine Multicast-Verbindung (Code bearbeitet wurde der Kürze halber mit Fehlerprüfung und irrelevant Optionen entfernt) zu erhalten:
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, wo 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ß, die richtige Quelle IP im IP-Header ist, da ich es klar dort sehen kann, wenn ich das Paket in wireshark schnuppern. Anstatt jedoch die IP des sendenden Systems (192.168.3.4) auszudrucken, druckt der obige Code die IP der Multicast-Gruppe, die ich abonniert habe (225.2.2.6). Gibt es eine Möglichkeit, stattdessen die Quell-IP zu erhalten?
Ja. Ja, so ist es. Ich musste es nur auf einen IPEndPoint werfen, um daran zu kommen. Vielen Dank. –
Großartig; Der einzige Grund, warum ich mir nicht sicher war, war, dass ich vorher nicht mit Multicast-Gruppen gearbeitet hatte - etwas, über das ich etwas lernen konnte! – Bill