diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-04-19 19:06:06 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-04-19 19:06:06 -0400 |
| commit | 10e2bb6b94e562296aea5f6dbc885aa04754d226 (patch) | |
| tree | 3904b387c0cc4e810fd6ea92edf3570902f4e5ff | |
| parent | 78e093b138e2e0e1e90119e4de4edd75d6203651 (diff) | |
| download | hose-0.2.0.zip | |
resolve address of hostv0.2.0
| -rw-r--r-- | main.go | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -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]) +} |