-
Notifications
You must be signed in to change notification settings - Fork 18.5k
Open
Labels
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone
Description
TL;DR - net.LookupIP may return a different list of addresses depending on the order of multiple names in an /etc/hosts mapping (e.g. 127.0.0.1 my.local localhost). I don't know if this should be surprising or not; however, I did have a NATS client as well as an official NATS sample client malfunction on me, and I wondered what the problem might be.
What version of Go are you using (go version)?
go version go1.10 darwin/amd64
Does this issue reproduce with the latest release?
On latest.
What operating system and processor architecture are you using (go env)?
darwin amd64
What did you do?
- With the following test code:
package main
import (
"fmt"
"net"
)
func main() {
ips, _ := net.LookupIP("localhost")
fmt.Printf("IPs: %v\n", ips)
}- With the following
/etc/hosts:
127.0.0.1 localhost my.local # This line will be varied in the tests below
255.255.255.255 broadcasthost
::1 localhost
- Run the test program four times while varying 1) the resolver and 2) the order of
localhostandmy.localin/etc/hosts. (After changing/etc/hosts, runsudo killall -HUP mDNSResponder).
# localhost FIRST (`127.0.0.1 localhost my.local`) and pure GO resolver:
$ GODEBUG=netdns=go+1 go run junk.go
go package net: GODEBUG setting forcing use of Go's resolver
IPs: [::1 127.0.0.1]
# localhost FIRST (`127.0.0.1 localhost my.local`) and CGO resolver:
$ GODEBUG=netdns=1 go run junk.go
go package net: using cgo DNS resolver
IPs: [::1 127.0.0.1]
# localhost SECOND (`127.0.0.1 my.local localhost`) and pure GO resolver:
$ GODEBUG=netdns=go+1 go run junk.go
go package net: GODEBUG setting forcing use of Go's resolver
IPs: [::1 127.0.0.1]
# localhost SECOND (`127.0.0.1 my.local localhost`) and CGO resolver:
$ GODEBUG=netdns=1 go run junk.go
go package net: using cgo DNS resolver
IPs: [127.0.0.1] # <---- This is the oddball; no IPv6 address
What did you expect to see?
I expected the returned set of IPs to be the same in all four tests.
What did you see instead?
The combination of localhost-last and cgo caused a different set of addresses to be resolved.
Metadata
Metadata
Assignees
Labels
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.