Browse Source

Don't bind to temporary Ipv6 addresses (windows)

Grant Limberg 4 năm trước cách đây
mục cha
commit
198e6f765c
1 tập tin đã thay đổi với 19 bổ sung15 xóa
  1. 19 15
      osdep/Binder.hpp

+ 19 - 15
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<InetAddress,std::string>(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<InetAddress, std::string>(ip, std::string()));
+										}
+										break;
+								}
 							}
 						}
 						ua = ua->Next;