Tengo una aplicación WinForms, y estoy tratando de obtener entradas DNS inversas para una lista de direcciones IP que se muestran en el formulario.GetHostEntry es muy lento
El problema principal con el que me he encontrado es System.Net.Dns.GetHostEntry es ridículamente lento, particularmente cuando no se encuentra una entrada DNS inversa. Con DNS directo, esto debería ser rápido, ya que el servidor DNS devolverá NXDOMAIN. Internamente, está llamando al ws2_32.dll getnameinfo(), que dice "La resolución del nombre puede ser por el Sistema de nombres de dominio (DNS), un archivo de hosts local o por otros mecanismos de denominación", así que supongo que son esos "otros mecanismos de nomenclatura" los que lo causan. sea tan lento, pero ¿alguien sabe cuáles son esos mecanismos?
Generalmente esto demora 5 segundos por IP, a menos que encuentre una entrada inversa, y luego es casi inmediato. En parte, he trabajado en esto usando hilos, pero dado que estoy haciendo una gran lista y solo puedo ejecutar tantos hilos a la vez, todavía me lleva un tiempo superarlos.
¿Existe una forma mejor de encontrar entradas DNS inversas que sea más rápida?
En realidad usé esa versión para comenzar. Efectivamente soluciona el problema del tiempo de espera. Mi problema es más que tiene que haber un tiempo de espera en absoluto. Ve a ejecutar nslookup o excava en la línea de comando con una IP aleatoria; por lo general, volverá en <1 s y dirá "*** server.pf.local no puede encontrar 42.23.1.42: dominio inexistente" (o NXDOMAIN, en el caso de dig) - Me pregunto por qué GetHostEntry() no funciona de la misma manera. – gregmac
Creo que puede lograr lo que quiere a través de P/Invoke, mediante el uso de diferentes banderas que los valores predeterminados en getnameinfo. Ver mi edición –