Skip to content

Commit a6c0c02

Browse files
committed
chore: ignore interfaces not in IfOperStatusUp when fetch system dns server on windows
1 parent 2acb0b7 commit a6c0c02

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

dns/system_windows.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@ func dnsReadConfig() (servers []string, err error) {
1919
return
2020
}
2121
for _, aa := range aas {
22+
// Only take interfaces whose OperStatus is IfOperStatusUp(0x01) into DNS configs.
23+
if aa.OperStatus != windows.IfOperStatusUp {
24+
continue
25+
}
26+
27+
// Only take interfaces which have at least one gateway
28+
if aa.FirstGatewayAddress == nil {
29+
continue
30+
}
31+
2232
for dns := aa.FirstDnsServerAddress; dns != nil; dns = dns.Next {
2333
sa, err := dns.Address.Sockaddr.Sockaddr()
2434
if err != nil {
@@ -63,7 +73,8 @@ func adapterAddresses() ([]*windows.IpAdapterAddresses, error) {
6373
l := uint32(15000) // recommended initial size
6474
for {
6575
b = make([]byte, l)
66-
err := windows.GetAdaptersAddresses(syscall.AF_UNSPEC, windows.GAA_FLAG_INCLUDE_PREFIX, 0, (*windows.IpAdapterAddresses)(unsafe.Pointer(&b[0])), &l)
76+
const flags = windows.GAA_FLAG_INCLUDE_PREFIX | windows.GAA_FLAG_INCLUDE_GATEWAYS
77+
err := windows.GetAdaptersAddresses(syscall.AF_UNSPEC, flags, 0, (*windows.IpAdapterAddresses)(unsafe.Pointer(&b[0])), &l)
6778
if err == nil {
6879
if l == 0 {
6980
return nil, nil

0 commit comments

Comments
 (0)