2016-08-23 3 views
2

Ich versuche, eine einfache Suche zu tun, zum Beispiel konvertieren "perdu.com" in "208.97.177.124". Ich habe versucht, Network.DNS.Lookup verwenden, da, dass das erste Ergebnis auf Googles, und es funktioniert gut:DNS-Lookup in Haskell

rs <- makeResolvSeed defaultResolvConf 
eIp <- withResolver rs $ \resolver -> lookupA resolver $ BS.pack "perdu.com" 

Das Problem ist, dass scheint, die/etc/hosts-Datei zu ignorieren. Was ist der richtige Weg in Haskell, um eine Domain "normal" aufzulösen, wie andere Software wie Ping oder irgendein Browser es tun würde? Ich nehme an, dass Network.DNS.Lookup einen vollständigen rekursiven Resolver implementiert, anstatt nur die C-Funktionen zu verwenden?

Antwort

4

Das ist für mich gearbeitet:

import Network.BSD (getHostByName, hostAddress) 
import Network.Socket (inet_ntoa) 
import System.Environment (getArgs) 

resolve address = do 
    ent <- getHostByName address 
    inet_ntoa (hostAddress ent) 

main = resolve "perdu.com" >>= putStrLn 
+0

Keine Notwendigkeit 'Namen zu tun <- x; return name', können wir einfach 'x' verwenden. – chi

+0

Danke! Ich habe den Code aktualisiert. –

+0

Vielen Dank, scheint perfekt zu funktionieren! – Ulrar