读取UDP连接中接收到的正确数据

本文关键字:数据 UDP 连接 读取 | 更新日期: 2023-09-27 18:27:44


我在windows 7 64位上用c#.net 4.0编写了一个应用程序。该应用程序正在侦听特定端口上的UDP数据,我正试图在Windows DNS的帮助下确定请求者的主机IP。要做到这一点,我需要收到UDP信息的正确URL,但由于大量垃圾和消息不一致(缺乏格式),我无法正确获取。这是用于侦听UDP请求的代码:

public void StartListener()
{
    m_udpClient = new UdpClient(53);
    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 53);
    try
    {
        while (true)
        {
            byte[] bytes = m_udpClient.Receive(ref groupEP);
            Console.WriteLine("UDPListener::StartListener Waiting for broadcast");
            string udpData = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
            Console.WriteLine("UDPListener::StartListener Received broadcast from {0} :'n {1}'n",
                groupEP.ToString(), udpData);
        }
        Console.WriteLine("UDPListener::StartListener UDP server stopped!");
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
}

代码运行良好,它在udpData上接收数据,但它有很多垃圾,我找不到只提取必要信息的方法。我收到的样品:
?www?谷歌?com
第二条消息:
"''0''0''0spsprodch1su1dicateddsb2''nserverebus''awindowsnet''0''0''0"
你知道我如何从这些数据中获得有效信息吗?THX

读取UDP连接中接收到的正确数据

UdpClient.Receive只返回对等方发送的UDP数据报。由于您使用的是端口53,我认为您正在期待DNS查询。在这种情况下,您不能简单地将此UDP数据报视为字符串,但必须将数据报解析为DNS数据包,有关数据包格式,请参阅RFC1035。