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