【问题标题】:Get client IP after received UDP package from Broadcast从 Broadcast 收到 UDP 包后获取客户端 IP
【发布时间】:2018-07-19 04:27:37
【问题描述】:

我目前正在开发一个设备查找器,我真的在为代码苦苦挣扎,因为通常我会编写微控制器代码。

希望有人能帮帮我。

目标是将客户端 IP 从 UDP 广播接收到制造商特定端口。 这对我来说很好。我发送广播并从设备返回数据:

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 个 HEX sn-ps)

但我找不到发件人(客户端)的 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();

【问题讨论】:

    标签: c# tcp udp ip broadcast


    【解决方案1】:

    你必须使用.ReceiveFrom()

        byte[] test = new byte[1024];
        IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        EndPoint senderRemote = (EndPoint)sender;
        bcSocket.Receive(test, ref senderRemote);
    

    现在远程 IP 在sender 变量中可用。

    【讨论】:

    • 还有一个问题,是否有任何变量可以查看有多少答案?因为我们的网络中有不止一个这种类型的设备。我想将它们分开,以获得所有答案。问候!
    【解决方案2】:

    它 100% 工作!你拯救了我的一天。谢谢!

    这里是搜索者的代码:

    (我用它在我的网络中找到 Lantronix Xport 设备并获取他的 IP)


    字节[] 数据 = { 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];
            IPEndPoint _sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint senderRemote = (EndPoint)_sender;
            bcSocket.ReceiveFrom(test, ref senderRemote); //IP steht in senderRemote! / IP is in senderRemote!
    
    
    
            Antwort = System.Text.Encoding.Default.GetString(test).Trim(new char[] { '\0' });
            textBox_IPAdresse.Text = senderRemote.ToString(); //Ausgabe der RemoteIP
            string antworthex = BitConverter.ToString(test);
            textBox1.Text = antworthex;
    
    
    
            // Socket schliessen, nach erfolgreichem Senden des Broadcastes
            bcSocket.Close();
    

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 2011-06-12
      • 2021-07-31
      • 2014-10-06
      • 2012-09-23
      • 2016-05-15
      • 2013-10-28
      • 2020-04-05
      • 2012-09-02
      相关资源
      最近更新 更多