我目前正在开发设备查找器,我真的很努力地编写代码,因为通常我编写微 Controller 代码。
希望有人能帮助我。
目标是从 UDP 广播接收客户端 IP 到制造商特定端口。 这对我来说效果很好。我发送广播并收到从设备发送的数据:
00-00-00-F7-00-20-A0-06-58-39-30-12-63-16-00-00-62-A7-52-0B-FF-00-00-00 -00-80-A3-BE-2F-XX
它包括设备的 MAC 地址(最后 6 个十六进制片段)
但我找不到发件人(客户端)IP 地址
如何保存客户端发送的整个数据包?包括IP? 因为在 Wireshark 中我看到了整个包(发送自:192.xxx...)
非常感谢! 最好的问候
我的代码是:
字节[]数据 = { 0x00, 0x00, 0x00, 0xF6 };
//string s1 = Encoding.UTF8.GetString(data);
int port = 30718;
string Antwort;
// Socket definieren
Socket bcSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//bcSocket.Connect(new IPEndPoint(IPAddress.Broadcast, port));
// EndPoint definieren bzw. Ziel des Broadcastes
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, port);
// Optionen auf den Socket binden
bcSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
// Broadcast senden
bcSocket.SendTo(data, iep);
bcSocket.ReceiveTimeout = 5000;
byte[] test = new byte[1024];
bcSocket.Receive(test);
Antwort = System.Text.Encoding.Default.GetString(test).Trim(new char[] { '\0' });
textBox_IPAdresse.Text = Antwort;
string antworthex = BitConverter.ToString(test);
textBox1.Text = antworthex;
// Socket schliessen, nach erfolgreichem Senden des Broadcastes
bcSocket.Close();
最佳答案
您必须使用.ReceiveFrom()
byte[] test = new byte[1024];
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sender;
bcSocket.Receive(test, ref senderRemote);
现在远程 IP 可在 sender
变量中使用。
关于c# - 收到广播的UDP包后获取客户端IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48688245/