是的,您需要查看 Rob-philpott 为 .net 制作的 Bev.net.dns 类
Click Here
构建发送到 DNS 服务器的请求并不容易,但是一旦您可以从服务器获得答案,那么您需要将其发送回浏览器,这是我一直坚持的一点。
我在端口 53/UDP 上侦听并获取请求并将其发送到 DNS 服务器并获得有效响应,然后我使用远程客户端端口作为 UDP 将其发送回浏览器,但浏览器不会除了回复。
Robs 代码非常易于使用,如下所示“Resolver.Lookup”,我只需要添加一点,以便从 DNS 服务器发送的原始字节数组保存在 Resolver.Message 中,准备好发送回浏览器.
public void Listen()
{
receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp );
receiveEndPoint = new IPEndPoint(IPAddress.Any, receivePort); receiveSocket.Bind(receiveEndPoint);
receivePort = (receiveSocket.LocalEndPoint as IPEndPoint).Port;
receiveBuffer = new byte[BufferSize];
receiveAsyncResult = receiveSocket.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref receiveEndPoint, new AsyncCallback(NetworkMessageReceivedCallback), receiveSocket);
}
public void NetworkMessageReceivedCallback(IAsyncResult asyncResult)
{
EndPoint remoteEndPoint = null;
byte[] bytes = null;
remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); //Will contain the clients port
int bytesRead = receiveSocket.EndReceiveFrom(asyncResult, ref remoteEndPoint);
bytes = new Byte[bytesRead];
Buffer.BlockCopy(receiveBuffer, 0, bytes, 0, bytesRead);
//string ip = "208.67.222.222";
string ip = "192.168.1.254";
IPAddress dnsServer = IPAddress.Parse(ip);
Response R = Resolver.Lookup(bytes, dnsServer);
receiveSocket.SendTo(R.Message , remoteEndPoint);//127.0.0.1
receiveSocket.Close();
Listen();
}