Skip to content

Instantly share code, notes, and snippets.

@mike-weiner
Created January 19, 2025 01:08

Revisions

  1. mike-weiner created this gist Jan 19, 2025.
    35 changes: 35 additions & 0 deletions custom-dns-resolver.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    package main

    import (
    "context"
    "fmt"
    "net"
    "time"
    )

    func main() {
    customResolver := &net.Resolver{
    PreferGo: true,
    Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
    return net.Dial(network, "1.1.1.1:53")
    },
    }

    timeout := 10 * time.Second
    ctx, cancel := context.WithTimeout(context.Background(), timeout)
    defer cancel()

    ipAddrs, err := customResolver.LookupIPAddr(ctx, "example.com")
    if err != nil {
    if ctx.Err() == context.DeadlineExceeded {
    fmt.Println("DNS lookup timed out!")
    } else {
    fmt.Println("Error:", err)
    }
    return
    }

    for _, ipAddr := range ipAddrs {
    fmt.Printf("%s\n", ipAddr.String())
    }
    }