4
4
* Based on Joshua Tauberer's DNS LIBRARY IN JAVASCRIPT
5
5
* from "Sender Verification Extension" version 0.9.0.6
6
6
*
7
- * Version: 1.0.3 (06 September 2014 )
7
+ * Version: 1.1.0pre1 (20 October 2015 )
8
8
*
9
- * Copyright (c) 2013-2014 Philippe Lieser
9
+ * Copyright (c) 2013-2015 Philippe Lieser
10
10
*
11
11
* This software is licensed under the terms of the MIT License.
12
12
*
55
55
* Changelog:
56
56
* ==========
57
57
*
58
+ * 1.1.0
59
+ * -----
60
+ * - no longer get the DNS servers from deactivated interfaces under windows
61
+ *
58
62
* 1.0.3
59
63
* -----
60
64
* - increased max read length of TXT record
@@ -334,32 +338,50 @@ function DNS_get_OS_DNSServers() {
334
338
var registry_class = Components . classes [ "@mozilla.org/windows-registry-key;1" ] ;
335
339
var registry_object = registry_class . createInstance ( ) ;
336
340
var registry = registry_object . QueryInterface ( Components . interfaces . nsIWindowsRegKey ) ;
341
+ var reg ;
337
342
338
343
registry . open ( registry . ROOT_KEY_LOCAL_MACHINE ,
339
- "SYSTEM\\CurrentControlSet\\Services\\Tcpip " ,
344
+ "SYSTEM\\CurrentControlSet" ,
340
345
registry . ACCESS_QUERY_VALUE ) ;
341
346
342
347
// get interfaces in routing order
343
- var registryLinkage = registry . openChild ( "Linkage" , registry . ACCESS_READ ) ;
348
+ var registryLinkage = registry . openChild ( "Services\\Tcpip\\Linkage" ,
349
+ registry . ACCESS_READ ) ;
344
350
// nsIWindowsRegKey doesn't support REG_MULTI_SZ type out of the box
345
351
// from http://mxr.mozilla.org/comm-central/source/mozilla/browser/components/migration/src/IEProfileMigrator.js#129
346
352
// slice(1,-1) to remove the " at the beginning and end
347
353
var str = registryLinkage . readStringValue ( "Route" ) ;
348
354
var interfaces = [ v . slice ( 1 , - 1 ) for ( v of str . split ( "\0" ) ) if ( v ) ] ;
349
- registryLinkage . close ( ) ;
355
+
356
+ // filter out deactivated interfaces
357
+ var registryNetworkAdapters = registry . openChild (
358
+ "Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}" ,
359
+ registry . ACCESS_QUERY_VALUE ) ;
360
+ var registryDevInterfaces = registry . openChild (
361
+ "Control\\DeviceClasses\\{cac88484-7515-4c03-82e6-71a87abac361}" ,
362
+ registry . ACCESS_QUERY_VALUE ) ;
363
+ interfaces = interfaces . filter ( function ( element /*, index, array*/ ) {
364
+ reg = registryNetworkAdapters . openChild ( element + "\\Connection" ,
365
+ registry . ACCESS_READ ) ;
366
+ var interfaceID = reg . readStringValue ( "PnpInstanceID" ) ;
367
+ reg . close ( ) ;
368
+ interfaceID = interfaceID . replace ( / \\ / g, "#" ) ;
369
+ interfaceID = "##?#" + interfaceID +
370
+ "#{cac88484-7515-4c03-82e6-71a87abac361}" ;
371
+ reg = registryDevInterfaces . openChild ( interfaceID + "\\#\\Control" ,
372
+ registry . ACCESS_READ ) ;
373
+ var linked = reg . readIntValue ( "Linked" ) ;
374
+ reg . close ( ) ;
375
+ return linked === 1 ;
376
+ } ) ;
350
377
351
378
// get NameServer and DhcpNameServer of all interfaces
352
379
var registryInterfaces = registry . openChild (
353
- "Parameters\\Interfaces" ,
354
- registry . ACCESS_READ
355
- ) ;
356
- var reg ;
380
+ "Services\\Tcpip\\Parameters\\Interfaces" ,
381
+ registry . ACCESS_READ ) ;
357
382
var ns = "" ;
358
383
for ( var i = 0 ; i < interfaces . length ; i ++ ) {
359
- reg = registryInterfaces . openChild (
360
- interfaces [ i ] ,
361
- registry . ACCESS_READ
362
- ) ;
384
+ reg = registryInterfaces . openChild ( interfaces [ i ] , registry . ACCESS_READ ) ;
363
385
if ( reg . hasValue ( "NameServer" ) ) {
364
386
ns += " " + reg . readStringValue ( "NameServer" ) ;
365
387
}
@@ -368,9 +390,6 @@ function DNS_get_OS_DNSServers() {
368
390
}
369
391
reg . close ( ) ;
370
392
}
371
- registryInterfaces . close ( ) ;
372
-
373
- registry . close ( ) ;
374
393
375
394
if ( ns !== "" ) {
376
395
var servers = ns . split ( / | , / ) ;
@@ -387,10 +406,13 @@ function DNS_get_OS_DNSServers() {
387
406
}
388
407
} catch ( e ) {
389
408
log . error ( "Error reading Registry: " + e + "\n" + e . stack ) ;
390
-
409
+ } finally {
391
410
if ( registry ) {
392
411
registry . close ( ) ;
393
412
}
413
+ if ( registryLinkage ) {
414
+ registryLinkage . close ( ) ;
415
+ }
394
416
if ( registryInterfaces ) {
395
417
registryInterfaces . close ( ) ;
396
418
}
0 commit comments