必要なパッケージ: Network.DNS(dnsパッケージ)を使用してDNSクエリを実行。
その他、標準ライブラリのモジュールを使用。
1. whois
import Network.DNS import Data.List (isSuffixOf) import Control.Monad (forM_) import System.Environment (getArgs) import System.Exit (exitFailure) -- NSレコードからホスト名を抽出する関数 extractHostnames :: [ResourceRecord] -> [String] extractHostnames records = [ rdata | RR _ _ NS rdata _ <- records ] main :: IO () main = do -- コマンドライン引数からドメインを取得 args <- getArgs let domain = case args of [d] -> d _ -> error "Usage: program <domain>" -- DNSリゾルバの設定 res <- makeResolvSeed defaultResolvConf withResolver res $ \resolver -> do -- NSレコードのクエリ result <- lookupNS resolver domain case result of Left err -> do putStrLn $ "DNS lookup failed: " ++ show err exitFailure Right records -> do let hostnames = extractHostnames records if null hostnames then putStrLn "No NS records found." else forM_ hostnames $ \hostname -> putStrLn hostname