c# - 收到广播的UDP包后获取客户端IP

标签 c# tcp udp ip broadcast

我目前正在开发设备查找器,我真的很努力地编写代码,因为通常我编写微 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/

相关文章:

tcp - NiFi 转发/复制 TCP 流

ios - iOS 上的 GCDAsyncUdpSocket 缺少多播数据报

java - Spring Integration 多个 UDP 入站/出站 channel

c# - 为什么 C# Math.Floor() 返回 Double 而不是 Int

c# - 带/不带支持字段的二进制格式化程序和属性

delphi - 同一应用程序上的多个 TIdCmdTCPServers

android - 不要在 Android 中使用 UDP 阻止接收

c# - 加载 RSS XML 时出错 : Element 'channel' with namespace name '' was not found.

c# - 确定文本文件中使用的行结尾

具有 IPv6 地址的 Python TCP 套接字失败