Tôi cần phải xác định IP của một máy đã gửi cho tôi một gói đa hướng, để tôi có thể trả lời nó qua unicast.Làm cách nào để xác định IP nguồn của gói đa hướng trong C#?
Tôi đang sử dụng CSharp sau (Net 3.5) mã để nhận được các gói tin qua kết nối multicast (mã đã được chỉnh sửa cho ngắn gọn, với kiểm tra lỗi và các tùy chọn thích hợp loại bỏ):
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);
Và đây là callback, nơi tôi đang cố gắng để có được địa chỉ IP nguồn:
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());
}
tôi biết đúng nguồn IP là trong tiêu đề IP, kể từ khi tôi có thể thấy rõ nó ở đó khi tôi sniff các gói trong Wireshark. Tuy nhiên, thay vì in ra IP của hệ thống gửi (192.168.3.4), mã trên sẽ in ra IP của nhóm phát đa hướng mà tôi đã đăng ký (225.2.2.6). Có cách nào để lấy IP nguồn thay thế không?
Có. Vâng. Tôi chỉ cần bỏ nó vào một IPEndPoint để có được nó. Cảm ơn bạn. –
Tuyệt vời; lý do duy nhất tôi không chắc chắn là vì trước đây tôi chưa từng làm việc với các nhóm Multicast - một điều gì đó để tôi tìm hiểu! – Bill