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