From 10e2bb6b94e562296aea5f6dbc885aa04754d226 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 19 Apr 2025 19:06:06 -0400 Subject: resolve address of host --- main.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 0ff7430..857c8ca 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "flag" + "fmt" "github.com/keybase/saltpack" "github.com/keybase/saltpack/basic" "github.com/tonistiigi/units" @@ -124,7 +125,7 @@ func send(rHostName string) error { // Load receiver encryption key. util.Logf("loading encryption key for %s", rHostName) - rAddr, err := netip.ParseAddr(rHostName) + rAddr, err := resolve(rHostName) if err != nil { return err } @@ -157,3 +158,21 @@ func send(rHostName string) error { util.Logf("sent %.2f", units.Bytes(n)*units.B) return err } + +// resolve resolves the address of a host. +// Host can either be the name of a host, or an IP address. +func resolve(host string) (netip.Addr, error) { + if addr, err := netip.ParseAddr(host); err == nil { + // Host is an IP address. + return addr, nil + } + + // Host is a hostname; resolve its address. + addrs, err := net.LookupHost(host) + if err != nil { + return netip.Addr{}, err + } else if len(addrs) < 1 { + return netip.Addr{}, fmt.Errorf("no such host %s", host) + } + return netip.ParseAddr(addrs[0]) +} -- cgit v1.2.3