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

时间:2014-10-24 08:03:42

标签: c# .net sockets udp


我在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?google?com? ?
第二条消息:
 " \ 0 \ 0 \ 0 \ 0spsprodch1su1dedicatedsb2 \ nservicebus \ awindowsnet \ 0 \ 0 \ 0"
您对如何从该数据中获取有效信息有任何想法吗? THX

1 个答案:

答案 0 :(得分:1)

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