From 198e6f765cc6e56ede9238ff205213141e4a1bd5 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 26 May 2021 09:15:24 -0700 Subject: [PATCH] Don't bind to temporary Ipv6 addresses (windows) --- osdep/Binder.hpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/osdep/Binder.hpp b/osdep/Binder.hpp index c52f303b9..00b7dd346 100644 --- a/osdep/Binder.hpp +++ b/osdep/Binder.hpp @@ -135,21 +135,25 @@ public: while (a) { PIP_ADAPTER_UNICAST_ADDRESS ua = a->FirstUnicastAddress; while (ua) { - InetAddress ip(ua->Address.lpSockaddr); - char strBuf[128] = { 0 }; - wcstombs(strBuf, a->FriendlyName, sizeof(strBuf)); - if (ifChecker.shouldBindInterface(strBuf,ip)) { - switch(ip.ipScope()) { - default: break; - case InetAddress::IP_SCOPE_PSEUDOPRIVATE: - case InetAddress::IP_SCOPE_GLOBAL: - case InetAddress::IP_SCOPE_SHARED: - case InetAddress::IP_SCOPE_PRIVATE: - for(int x=0;x<(int)portCount;++x) { - ip.setPort(ports[x]); - localIfAddrs.insert(std::pair(ip,std::string())); - } - break; + // Don't bind temporary/random IPv6 addresses + if (ua->SuffixOrigin != IpSuffixOriginRandom) { + InetAddress ip(ua->Address.lpSockaddr); + char strBuf[128] = { 0 }; + wcstombs(strBuf, a->FriendlyName, sizeof(strBuf)); + if (ifChecker.shouldBindInterface(strBuf, ip)) { + switch (ip.ipScope()) { + default: + break; + case InetAddress::IP_SCOPE_PSEUDOPRIVATE: + case InetAddress::IP_SCOPE_GLOBAL: + case InetAddress::IP_SCOPE_SHARED: + case InetAddress::IP_SCOPE_PRIVATE: + for (int x = 0; x < (int)portCount; ++x) { + ip.setPort(ports[x]); + localIfAddrs.insert(std::pair(ip, std::string())); + } + break; + } } } ua = ua->Next;