J'ai remarqué que BT Home renvoyait de faux serveurs DNS à partir de leurs serveurs DNS, ce qui permet aux sites de contourner les adresses IP que j'ai bloquées dans le pare-feu. serveur. Jusqu'à présent, je peux recevoir une requête sur le port UDP 53 et les envoyer au serveur DNS pour obtenir un résultat de flux octet [] valide et je renvoie ensuite au navigateur en utilisant le port client distant sur lequel la requête a été effectuée. le navigateur envoie juste la demande à nouveau.Relais DNS UDP sur le port 53
J'ai testé le code à partir d'un socket et les résultats fonctionnent bien, mais pour une raison quelconque, IE/FF ne sera tout simplement pas à l'exception des résultats.
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();
}
Presque toutes les opérations sont UDP. TCP est seulement requis par AFXR, DNSSEC, et pour les cas de réponses plus petits que 512 octets. – jweyrich