Wordfence Security – Firewall & Malware Scan - Version 3.6.1

Version Description

  • Major new release that includes the much asked for IP Range blocking with ISP blocking ability and browser blocking.
  • Added feature: WHOIS for IP's and Domains. Supports all registries and local rWhois
  • Added feature: Advanced Blocking to block IP ranges and browser patterns.
  • Added feature: WHOIS on live traffic pages.
  • Added feature: network blocking links on live traffic pages.
  • Fixed bug where W3 Total Cache and WP Super Cache cache blocked pages.
  • Added explanation of how caching affects live traffic logging if we detect a caching plugin.
  • Fixed AJAX loading to deal with multiple parallel ajax requests.
  • Updated tour to include info on new WHOIS and Advanced Blocking features.
  • Changed manual IP blocks to be permanent by default.
  • Fixed issue that caused live traffic page not to reload when IP is unblocked.
  • Modified "How does your site get IP's" config to avoid confusing new users.
  • Changed 503 block message to be more helpful with link to FAQ on how to unblock.
  • Removed redundant code in wfAPI.php
  • Optimized code by moving firewall specific code to execute only if firewall is enabled.
  • Fixed issue that caused "last attempted access" to show over 500 months ago.
  • Fixed issue that was causing warning in getIP() code.
  • Upgraded to Wordfence API version 2.6.
Download this release

Release Info

Developer mmaunder
Plugin Icon 128x128 Wordfence Security – Firewall & Malware Scan
Version 3.6.1
Comparing to
See all releases

Code changes from version 3.5.2 to 3.6.1

Files changed (146) hide show
  1. js/admin.js +178 -9
  2. lib/menu_activity.php +14 -1
  3. lib/menu_blockedIPs.php +1 -1
  4. lib/menu_options.php +4 -6
  5. lib/menu_rangeBlocking.php +93 -0
  6. lib/menu_scan.php +34 -0
  7. lib/menu_whois.php +66 -0
  8. lib/wf503.php +12 -8
  9. lib/wfAPI.php +1 -6
  10. lib/wfConfig.php +5 -0
  11. lib/wfLockedOut.php +1 -1
  12. lib/wfLog.php +111 -22
  13. lib/wfScanEngine.php +16 -1
  14. lib/wfSchema.php +9 -0
  15. lib/wfUnlockMsg.php +1 -1
  16. lib/wfUtils.php +22 -1
  17. lib/whois/.htaccess +2 -0
  18. lib/whois/LICENSE +340 -0
  19. lib/whois/handler.template.php +40 -0
  20. lib/whois/npdata.ser +1 -0
  21. lib/whois/whois.ae.php +58 -0
  22. lib/whois/whois.aero.php +45 -0
  23. lib/whois/whois.ag.php +45 -0
  24. lib/whois/whois.asia.php +44 -0
  25. lib/whois/whois.at.php +102 -0
  26. lib/whois/whois.au.php +63 -0
  27. lib/whois/whois.be.php +76 -0
  28. lib/whois/whois.biz.php +45 -0
  29. lib/whois/whois.br.php +84 -0
  30. lib/whois/whois.ca.php +76 -0
  31. lib/whois/whois.cat.php +47 -0
  32. lib/whois/whois.ch.php +82 -0
  33. lib/whois/whois.cl.php +56 -0
  34. lib/whois/whois.client.php +595 -0
  35. lib/whois/whois.cn.php +91 -0
  36. lib/whois/whois.co.php +43 -0
  37. lib/whois/whois.co.za.php +73 -0
  38. lib/whois/whois.coop.php +106 -0
  39. lib/whois/whois.cz.php +73 -0
  40. lib/whois/whois.de.php +78 -0
  41. lib/whois/whois.edu.php +62 -0
  42. lib/whois/whois.eu.php +85 -0
  43. lib/whois/whois.fi.php +57 -0
  44. lib/whois/whois.fj.php +67 -0
  45. lib/whois/whois.fm.php +80 -0
  46. lib/whois/whois.fr.php +78 -0
  47. lib/whois/whois.gtld.afternic.php +51 -0
  48. lib/whois/whois.gtld.alldomains.php +49 -0
  49. lib/whois/whois.gtld.ascio.php +51 -0
  50. lib/whois/whois.gtld.assorted.php +51 -0
  51. lib/whois/whois.gtld.corporatedomains.php +53 -0
  52. lib/whois/whois.gtld.directnic.php +53 -0
  53. lib/whois/whois.gtld.domaindiscover.php +51 -0
  54. lib/whois/whois.gtld.domainpeople.php +59 -0
  55. lib/whois/whois.gtld.dotster.php +53 -0
  56. lib/whois/whois.gtld.dreamhost.php +54 -0
  57. lib/whois/whois.gtld.enom.php +62 -0
  58. lib/whois/whois.gtld.fabulous.php +54 -0
  59. lib/whois/whois.gtld.fastdomain.php +78 -0
  60. lib/whois/whois.gtld.gandi.php +56 -0
  61. lib/whois/whois.gtld.genericb.php +40 -0
  62. lib/whois/whois.gtld.godaddy.php +56 -0
  63. lib/whois/whois.gtld.iana.php +51 -0
  64. lib/whois/whois.gtld.interdomain.php +80 -0
  65. lib/whois/whois.gtld.itsyourdomain.php +52 -0
  66. lib/whois/whois.gtld.joker.php +78 -0
  67. lib/whois/whois.gtld.markmonitor.php +55 -0
  68. lib/whois/whois.gtld.melbourneit.php +59 -0
  69. lib/whois/whois.gtld.moniker.php +52 -0
  70. lib/whois/whois.gtld.namejuice.php +53 -0
  71. lib/whois/whois.gtld.nameking.php +70 -0
  72. lib/whois/whois.gtld.names4ever.php +54 -0
  73. lib/whois/whois.gtld.namevault.php +52 -0
  74. lib/whois/whois.gtld.networksolutions.php +50 -0
  75. lib/whois/whois.gtld.nicco.php +62 -0
  76. lib/whois/whois.gtld.nicline.php +51 -0
  77. lib/whois/whois.gtld.onlinenic.php +83 -0
  78. lib/whois/whois.gtld.opensrs.php +58 -0
  79. lib/whois/whois.gtld.ovh.php +51 -0
  80. lib/whois/whois.gtld.php +81 -0
  81. lib/whois/whois.gtld.psiusa.php +90 -0
  82. lib/whois/whois.gtld.publicdomainregistry.php +57 -0
  83. lib/whois/whois.gtld.register.php +62 -0
  84. lib/whois/whois.gtld.rrpproxy.php +92 -0
  85. lib/whois/whois.gtld.schlund.php +86 -0
  86. lib/whois/whois.gtld.srsplus.php +51 -0
  87. lib/whois/whois.gtld.tmagnic.php +52 -0
  88. lib/whois/whois.gtld.tvcorp.php +50 -0
  89. lib/whois/whois.gtld.wildwestdomains.php +52 -0
  90. lib/whois/whois.hu.php +95 -0
  91. lib/whois/whois.icon.png +0 -0
  92. lib/whois/whois.idna.php +969 -0
  93. lib/whois/whois.ie.php +64 -0
  94. lib/whois/whois.in.php +45 -0
  95. lib/whois/whois.info.php +45 -0
  96. lib/whois/whois.int.php +44 -0
  97. lib/whois/whois.ip.afrinic.php +77 -0
  98. lib/whois/whois.ip.apnic.php +122 -0
  99. lib/whois/whois.ip.arin.php +78 -0
  100. lib/whois/whois.ip.krnic.php +112 -0
  101. lib/whois/whois.ip.lacnic.php +79 -0
  102. lib/whois/whois.ip.lib.php +120 -0
  103. lib/whois/whois.ip.php +285 -0
  104. lib/whois/whois.ip.ripe.php +85 -0
  105. lib/whois/whois.ir.php +60 -0
  106. lib/whois/whois.is.php +69 -0
  107. lib/whois/whois.it.php +78 -0
  108. lib/whois/whois.jp.php +111 -0
  109. lib/whois/whois.lt.php +64 -0
  110. lib/whois/whois.lu.php +78 -0
  111. lib/whois/whois.ly.php +72 -0
  112. lib/whois/whois.main.php +327 -0
  113. lib/whois/whois.me.php +45 -0
  114. lib/whois/whois.mobi.php +47 -0
  115. lib/whois/whois.museum.php +45 -0
  116. lib/whois/whois.mx.php +70 -0
  117. lib/whois/whois.name.php +45 -0
  118. lib/whois/whois.nl.php +88 -0
  119. lib/whois/whois.nu.php +90 -0
  120. lib/whois/whois.nz.php +102 -0
  121. lib/whois/whois.org.php +47 -0
  122. lib/whois/whois.org.za.php +64 -0
  123. lib/whois/whois.parser.php +873 -0
  124. lib/whois/whois.pl.php +54 -0
  125. lib/whois/whois.pro.php +43 -0
  126. lib/whois/whois.pt.php +81 -0
  127. lib/whois/whois.ro.php +99 -0
  128. lib/whois/whois.ru.php +63 -0
  129. lib/whois/whois.rwhois.php +58 -0
  130. lib/whois/whois.sc.php +45 -0
  131. lib/whois/whois.se.php +58 -0
  132. lib/whois/whois.servers.php +252 -0
  133. lib/whois/whois.si.php +55 -0
  134. lib/whois/whois.su.php +63 -0
  135. lib/whois/whois.tel.php +45 -0
  136. lib/whois/whois.travel.php +43 -0
  137. lib/whois/whois.uk.php +72 -0
  138. lib/whois/whois.us.php +44 -0
  139. lib/whois/whois.utils.php +152 -0
  140. lib/whois/whois.ve.php +75 -0
  141. lib/whois/whois.ws.php +76 -0
  142. lib/whois/whois.zanet.php +90 -0
  143. lib/wordfenceClass.php +89 -20
  144. lib/wordfenceConstants.php +1 -1
  145. readme.txt +31 -6
  146. wordfence.php +4 -4
js/admin.js CHANGED
@@ -1,6 +1,7 @@
1
  if(! window['wordfenceAdmin']){
2
  window['wordfenceAdmin'] = {
3
  loading16: '<div class="wfLoading16"></div>',
 
4
  actUpdateInterval: 2000,
5
  dbCheckTables: [],
6
  dbCheckCount_ok: 0,
@@ -92,13 +93,32 @@ window['wordfenceAdmin'] = {
92
  var self = this;
93
  this.tour('wfWelcomeContentCntBlk', 'wfHeading', 'top', 'left', "Learn how to Schedule Scans", function(){ self.tourRedir('WordfenceScanSchedule'); });
94
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  } else if(jQuery('#wordfenceMode_scanScheduling').length > 0){
96
  this.mode = 'scanScheduling';
97
  startTicker = false;
98
  this.sched_modeChange();
99
  if(! this.tourClosed){
100
  var self = this;
101
- this.tour('wfWelcomeContentScanSched', 'wfHeading', 'top', 'left', "Learn how to Customize Wordfence", function(){ self.tourRedir('WordfenceSecOpt'); });
102
  }
103
  } else {
104
  this.mode = false;
@@ -165,11 +185,16 @@ window['wordfenceAdmin'] = {
165
  this.scanTourStart();
166
  },
167
  showLoading: function(){
168
- this.removeLoading();
169
- jQuery('<div id="wordfenceWorking">Wordfence is working...</div>').appendTo('body');
 
 
170
  },
171
  removeLoading: function(){
172
- jQuery('#wordfenceWorking').remove();
 
 
 
173
  },
174
  startActivityLogUpdates: function(){
175
  var self = this;
@@ -563,7 +588,9 @@ window['wordfenceAdmin'] = {
563
  dataType: "json",
564
  data: data,
565
  success: function(json){
566
- self.removeLoading();
 
 
567
  if(json && json.nonce){
568
  self.nonce = json.nonce;
569
  }
@@ -572,7 +599,12 @@ window['wordfenceAdmin'] = {
572
  }
573
  cb(json);
574
  },
575
- error: function(){ self.removeLoading(); cbErr(); }
 
 
 
 
 
576
  });
577
  },
578
  colorbox: function(width, heading, body){
@@ -840,6 +872,117 @@ window['wordfenceAdmin'] = {
840
  return m1 + ' ' + t1;
841
  }
842
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
843
  blockIP: function(IP, reason){
844
  var self = this;
845
  this.ajax('wordfence_blockIP', {
@@ -853,11 +996,12 @@ window['wordfenceAdmin'] = {
853
  }
854
  });
855
  },
856
- blockIPTwo: function(IP, reason){
857
  var self = this;
858
  this.ajax('wordfence_blockIP', {
859
  IP: IP,
860
- reason: reason
 
861
  }, function(res){
862
  if(res.errorMsg){
863
  return;
@@ -876,7 +1020,9 @@ window['wordfenceAdmin'] = {
876
  var self = this;
877
  this.ajax('wordfence_unblockIP', {
878
  IP: IP
879
- }, function(res){ self.staticTabChanged(); });
 
 
880
  },
881
  permBlockIP: function(IP){
882
  var self = this;
@@ -1113,6 +1259,29 @@ window['wordfenceAdmin'] = {
1113
  jQuery('.wfAjax24').hide();
1114
  self.pulse('.wfSaveMsg');
1115
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1116
  }
1117
  };
1118
  window['WFAD'] = window['wordfenceAdmin'];
1
  if(! window['wordfenceAdmin']){
2
  window['wordfenceAdmin'] = {
3
  loading16: '<div class="wfLoading16"></div>',
4
+ loadingCount: 0,
5
  actUpdateInterval: 2000,
6
  dbCheckTables: [],
7
  dbCheckCount_ok: 0,
93
  var self = this;
94
  this.tour('wfWelcomeContentCntBlk', 'wfHeading', 'top', 'left', "Learn how to Schedule Scans", function(){ self.tourRedir('WordfenceScanSchedule'); });
95
  }
96
+ } else if(jQuery('#wordfenceMode_rangeBlocking').length > 0){
97
+ this.mode = 'rangeBlocking';
98
+ startTicker = false;
99
+ if(! this.tourClosed){
100
+ var self = this;
101
+ this.tour('wfWelcomeContentRangeBlocking', 'wfHeading', 'top', 'left', "Learn how to Customize Wordfence", function(){ self.tourRedir('WordfenceSecOpt'); });
102
+ }
103
+ this.calcRangeTotal();
104
+ this.loadBlockRanges();
105
+ } else if(jQuery('#wordfenceMode_whois').length > 0){
106
+ this.mode = 'whois';
107
+ startTicker = false;
108
+ if(! this.tourClosed){
109
+ var self = this;
110
+ this.tour('wfWelcomeContentWhois', 'wfHeading', 'top', 'left', "Learn how to use Advanced Blocking", function(){ self.tourRedir('WordfenceRangeBlocking'); });
111
+ }
112
+ this.calcRangeTotal();
113
+ this.loadBlockRanges();
114
+
115
  } else if(jQuery('#wordfenceMode_scanScheduling').length > 0){
116
  this.mode = 'scanScheduling';
117
  startTicker = false;
118
  this.sched_modeChange();
119
  if(! this.tourClosed){
120
  var self = this;
121
+ this.tour('wfWelcomeContentScanSched', 'wfHeading', 'top', 'left', "Learn about WHOIS", function(){ self.tourRedir('WordfenceWhois'); });
122
  }
123
  } else {
124
  this.mode = false;
185
  this.scanTourStart();
186
  },
187
  showLoading: function(){
188
+ this.loadingCount++;
189
+ if(this.loadingCount == 1){
190
+ jQuery('<div id="wordfenceWorking">Wordfence is working...</div>').appendTo('body');
191
+ }
192
  },
193
  removeLoading: function(){
194
+ this.loadingCount--;
195
+ if(this.loadingCount == 0){
196
+ jQuery('#wordfenceWorking').remove();
197
+ }
198
  },
199
  startActivityLogUpdates: function(){
200
  var self = this;
588
  dataType: "json",
589
  data: data,
590
  success: function(json){
591
+ if(! noLoading){
592
+ self.removeLoading();
593
+ }
594
  if(json && json.nonce){
595
  self.nonce = json.nonce;
596
  }
599
  }
600
  cb(json);
601
  },
602
+ error: function(){
603
+ if(! noLoading){
604
+ self.removeLoading();
605
+ }
606
+ cbErr();
607
+ }
608
  });
609
  },
610
  colorbox: function(width, heading, body){
872
  return m1 + ' ' + t1;
873
  }
874
  },
875
+ calcRangeTotal: function(){
876
+ var range = jQuery('#ipRange').val();
877
+ if(! range){ return; }
878
+ range = range.replace(/ /g, '');
879
+ if(range && /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s*\-\s*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(range)){
880
+ var ips = range.split('-');
881
+ var total = this.inet_aton(ips[1]) - this.inet_aton(ips[0]) + 1;
882
+ if(total < 1){
883
+ jQuery('#wfShowRangeTotal').html("<span style=\"color: #F00;\">Invalid. Starting IP is greater than ending IP.</span>");
884
+ return;
885
+ }
886
+ jQuery('#wfShowRangeTotal').html("<span style=\"color: #0A0;\">Valid: " + total + " addresses in range.</span>");
887
+ } else {
888
+ jQuery('#wfShowRangeTotal').empty();
889
+ }
890
+ },
891
+ loadBlockRanges: function(){
892
+ var self = this;
893
+ this.ajax('wordfence_loadBlockRanges', {}, function(res){ self.completeLoadBlockRanges(res); });
894
+
895
+ },
896
+ completeLoadBlockRanges: function(res){
897
+ jQuery('#currentBlocks').empty();
898
+ if(res.results && res.results.length > 0){
899
+ jQuery('#wfBlockedRangesTmpl').tmpl(res).prependTo('#currentBlocks');
900
+ } else {
901
+ jQuery('#currentBlocks').html("You have not blocked any IP ranges or other patterns yet.");
902
+ }
903
+ },
904
+ whois: function(val){
905
+ val = val.replace(' ','');
906
+ if( ! /\w+/.test(val)){
907
+ this.colorbox('300px', "Enter a valid IP or domain", "Please enter a valid IP address or domain name for your whois lookup.");
908
+ return;
909
+ }
910
+ var self = this;
911
+ jQuery('#whoisbutton').attr('disabled', 'disabled');
912
+ jQuery('#whoisbutton').attr('value', 'Loading...');
913
+ this.ajax('wordfence_whois', {
914
+ val: val,
915
+ }, function(res){
916
+ jQuery('#whoisbutton').removeAttr('disabled');
917
+ jQuery('#whoisbutton').attr('value', 'Look up IP or Domain');
918
+ if(res.ok){
919
+ self.completeWhois(res);
920
+ }
921
+ });
922
+ },
923
+ completeWhois: function(res){
924
+ if(res.ok && res.result && res.result.rawdata && res.result.rawdata.length > 0){
925
+ var rawhtml = "";
926
+ for(var i = 0; i < res.result.rawdata.length; i++){
927
+ res.result.rawdata[i] = res.result.rawdata[i].replace(/([^\s\t\r\n:;]+@[^\s\t\r\n:;\.]+\.[^\s\t\r\n:;]+)/, "<a href=\"mailto:$1\">$1<\/a>");
928
+ res.result.rawdata[i] = res.result.rawdata[i].replace(/(https?:\/\/[^\/]+[^\s\r\n\t]+)/, "<a target=\"_blank\" href=\"$1\">$1<\/a>");
929
+ var redStyle = "";
930
+ if(this.getQueryParam('wfnetworkblock')){
931
+ redStyle = " style=\"color: #F00;\"";
932
+ }
933
+ var self = this;
934
+ function wfm21(str, ipRange, offset, str){
935
+ var ips = ipRange.split(/\s*\-\s*/);
936
+ var ip1num = self.inet_aton(ips[0]);
937
+ var ip2num = self.inet_aton(ips[1]);
938
+ var totalIPs = ip2num - ip1num + 1;
939
+ return "<a href=\"admin.php?page=WordfenceRangeBlocking&wfBlockRange=" + ipRange + "\"" + redStyle + ">" + ipRange + " [<strong>" + totalIPs + "</strong> addresses in this network. Click to block this network]<\/a>";
940
+ }
941
+
942
+ res.result.rawdata[i] = res.result.rawdata[i].replace(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} - \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/, wfm21);
943
+ rawhtml += res.result.rawdata[i] + "<br />";
944
+ }
945
+ jQuery('#wfrawhtml').html(rawhtml);
946
+ } else {
947
+ jQuery('#wfrawhtml').html('<span style="color: #F00;">Sorry, but no data for that IP or domain was found.</span>');
948
+ }
949
+ },
950
+ blockIPUARange: function(ipRange, uaRange, reason){
951
+ if(! /\w+/.test(reason)){
952
+ this.colorbox('300px', "Please specify a reason", "You forgot to include a reason you're blocking this IP range. We ask you to include this for your own record keeping.");
953
+ return;
954
+ }
955
+ ipRange = ipRange.replace(/ /g, '');
956
+ if(ipRange){
957
+ if(! /^\d+\.\d+\.\d+\.\d+\-\d+\.\d+\.\d+\.\d+$/.test(ipRange)){
958
+ this.colorbox('300px', 'Specify a valid IP range', "Please specify a valid IP address range in the form of \"1.2.3.4 - 1.2.3.5\" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash.");
959
+ return;
960
+ }
961
+ }
962
+ if( ! (/\w+/.test(ipRange) || /\w+/.test(uaRange))){
963
+ this.colorbox('300px', 'Specify an IP range or Browser pattern', "Please specify either an IP address range or a web browser pattern to match.");
964
+ return;
965
+ }
966
+ var self = this;
967
+ this.ajax('wordfence_blockIPUARange', {
968
+ ipRange: ipRange,
969
+ uaRange: uaRange,
970
+ reason: reason,
971
+ }, function(res){
972
+ if(res.ok){
973
+ self.loadBlockRanges();
974
+ return;
975
+ }
976
+ });
977
+ },
978
+ unblockRange: function(id){
979
+ var self = this;
980
+ this.ajax('wordfence_unblockRange', {
981
+ id: id
982
+ }, function(res){
983
+ self.loadBlockRanges();
984
+ });
985
+ },
986
  blockIP: function(IP, reason){
987
  var self = this;
988
  this.ajax('wordfence_blockIP', {
996
  }
997
  });
998
  },
999
+ blockIPTwo: function(IP, reason, perm){
1000
  var self = this;
1001
  this.ajax('wordfence_blockIP', {
1002
  IP: IP,
1003
+ reason: reason,
1004
+ perm: (perm ? '1' : '0')
1005
  }, function(res){
1006
  if(res.errorMsg){
1007
  return;
1020
  var self = this;
1021
  this.ajax('wordfence_unblockIP', {
1022
  IP: IP
1023
+ }, function(res){
1024
+ self.reloadActivities();
1025
+ });
1026
  },
1027
  permBlockIP: function(IP){
1028
  var self = this;
1259
  jQuery('.wfAjax24').hide();
1260
  self.pulse('.wfSaveMsg');
1261
  });
1262
+ },
1263
+ getQueryParam: function(name){
1264
+ name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
1265
+ var regexS = "[\\?&]" + name + "=([^&#]*)";
1266
+ var regex = new RegExp(regexS);
1267
+ var results = regex.exec(window.location.search);
1268
+ if(results == null){
1269
+ return "";
1270
+ } else {
1271
+ return decodeURIComponent(results[1].replace(/\+/g, " "));
1272
+ }
1273
+ },
1274
+ inet_aton: function(dot) {
1275
+ var d = dot.split('.');
1276
+ return ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]);i
1277
+ },
1278
+ inet_ntoa: function(num){
1279
+ var d = num % 256;
1280
+ for(var i = 3; i > 0; i--) {
1281
+ num = Math.floor(num/256);
1282
+ d = num%256 + '.' + d;
1283
+ }
1284
+ return d;
1285
  }
1286
  };
1287
  window['WFAD'] = window['wordfenceAdmin'];
lib/menu_activity.php CHANGED
@@ -157,6 +157,18 @@
157
  </td></tr>
158
  {{if browser && browser.browser != 'Default Browser'}}<tr><td><strong>Browser:</strong> ${browser.browser}{{if browser.version}} version ${browser.version}{{/if}}{{if browser.platform && browser.platform != 'unknown'}} running on ${browser.platform}{{/if}}</td></tr>{{/if}}
159
  <tr><td style="color: #AAA;">${UA}</td></tr>
 
 
 
 
 
 
 
 
 
 
 
 
160
  <tr><td></td></tr>
161
  </table>
162
  </div>
@@ -181,7 +193,8 @@
181
  <p>
182
  Start by looking at "All Hits" because you may notice that a single IP address is generating most of your traffic.
183
  This could be a denial of service attack, someone stealing your content or a hacker probing for weaknesses.
184
- If you see a suspicious pattern, simply block that IP address.
 
185
  </p>
186
  <p>
187
  If you don't see any clear patterns of attack, take a look at "Top 404s" which will show you IP addresses that are generating excessive page not found errors.
157
  </td></tr>
158
  {{if browser && browser.browser != 'Default Browser'}}<tr><td><strong>Browser:</strong> ${browser.browser}{{if browser.version}} version ${browser.version}{{/if}}{{if browser.platform && browser.platform != 'unknown'}} running on ${browser.platform}{{/if}}</td></tr>{{/if}}
159
  <tr><td style="color: #AAA;">${UA}</td></tr>
160
+ <tr><td>
161
+ {{if blocked}}
162
+ [<a href="#" onclick="WFAD.unblockIP('${IP}'); return false;">Unblock this IP</a>]
163
+ {{else}}
164
+ [<a href="#" onclick="WFAD.blockIP('${IP}', 'Manual block by administrator'); return false;">Block this IP</a>]
165
+ {{/if}}
166
+ &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
167
+ [<a href="admin.php?page=WordfenceWhois&whoisval=${IP}&wfnetworkblock=1">Block this network</a>]
168
+ &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
169
+ [<a href="admin.php?page=WordfenceWhois&whoisval=${IP}">Run WHOIS on ${IP}</a>]
170
+ &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
171
+ [<a href="#">See recent traffic</a>]
172
  <tr><td></td></tr>
173
  </table>
174
  </div>
193
  <p>
194
  Start by looking at "All Hits" because you may notice that a single IP address is generating most of your traffic.
195
  This could be a denial of service attack, someone stealing your content or a hacker probing for weaknesses.
196
+ If you see a suspicious pattern, simply block that IP address. If they attack from a different IP on the same network, simply block that network.
197
+ You can also run a WHOIS on any IP address to find the host and report abuse via email.
198
  </p>
199
  <p>
200
  If you don't see any clear patterns of attack, take a look at "Top 404s" which will show you IP addresses that are generating excessive page not found errors.
lib/menu_blockedIPs.php CHANGED
@@ -8,7 +8,7 @@
8
  </div>
9
  <div class="wordfenceWrap" style="margin: 20px 20px 20px 30px;">
10
  <a href="#" onclick="WFAD.clearAllBlocked('blocked'); return false;">Clear all blocked IP addresses</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="WFAD.clearAllBlocked('locked'); return false;">Clear all locked out IP addresses</a><br />
11
- You can manually block an IP by entering the address here: <input type="text" id="wfManualBlock" size="20" maxlength="40" value="" />&nbsp;<input type="button" name="but1" value="Manually block IP" onclick="WFAD.blockIPTwo(jQuery('#wfManualBlock').val(), 'Manual block by administrator'); return false;" />
12
  </div>
13
  <div class="wordfenceWrap">
14
  <div>
8
  </div>
9
  <div class="wordfenceWrap" style="margin: 20px 20px 20px 30px;">
10
  <a href="#" onclick="WFAD.clearAllBlocked('blocked'); return false;">Clear all blocked IP addresses</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="WFAD.clearAllBlocked('locked'); return false;">Clear all locked out IP addresses</a><br />
11
+ You can manually (and permanently) block an IP by entering the address here: <input type="text" id="wfManualBlock" size="20" maxlength="40" value="" onkeydown="if(event.keyCode == 13){ WFAD.blockIPTwo(jQuery('#wfManualBlock').val(), 'Manual block by administrator', true); return false; }" />&nbsp;<input type="button" name="but1" value="Manually block IP" onclick="WFAD.blockIPTwo(jQuery('#wfManualBlock').val(), 'Manual block by administrator', true); return false;" />
12
  </div>
13
  <div class="wordfenceWrap">
14
  <div>
lib/menu_options.php CHANGED
@@ -36,17 +36,14 @@ var WFSLevels = <?php echo json_encode(wfConfig::$securityLevels); ?>;
36
  <option value="CUSTOM"<?php $w->sel('securityLevel', 'CUSTOM'); ?>>Custom settings</option>
37
  </select>
38
  </td></tr>
39
- <?php if(! wfConfig::get('howGetIPs', false)){ ?>
40
- <tr><td colspan="2" style="color: #F00;"><strong>Please set this now to avoid spoofing attacks:</strong></td></tr>
41
- <?php } ?>
42
- <tr><th>How does Wordfence get IPs:</td><td>
43
  <select id="howGetIPs" name="howGetIPs">
44
- <option value="">This is not set. We STRONGLY recommend you set this by choosing an option and hitting "Save" for a more secure site.</option>
45
  <option value="REMOTE_ADDR"<?php $w->sel('howGetIPs', 'REMOTE_ADDR'); ?>>Use PHP's built in REMOTE_ADDR. Use this if you're not using Nginx or any separate front-end proxy or firewall. Try this first.</option>
46
  <option value="HTTP_X_REAL_IP"<?php $w->sel('howGetIPs', 'HTTP_X_REAL_IP'); ?>>Use the X-Real-IP HTTP header which my Nginx, firewall or front-end proxy is setting. Try this next.</option>
47
  <option value="HTTP_X_FORWARDED_FOR"<?php $w->sel('howGetIPs', 'HTTP_X_FORWARDED_FOR'); ?>>Use the X-Forwarded-For HTTP header which my Nginx, firewall or front-end proxy is setting.</option>
48
  <option value="HTTP_CF_CONNECTING_IP"<?php $w->sel('howGetIPs', 'HTTP_CF_CONNECTING_IP'); ?>>I'm using Cloudflare so use the "CF-Connecting-IP" HTTP header to get a visitor IP</option>
49
- </select><br /><span style="color: #999;">Check the status messages at the top of this page and your "Live Traffic" view to verify this is set correctly.</span>
50
  </td></tr>
51
  </table>
52
  <p><table border="0" cellpadding="0" cellspacing="0"><tr><td><input type="button" id="button1" name="button1" class="button-primary" value="Save Changes" onclick="WFAD.saveConfig();" /></td><td style="height: 24px;"><div class="wfAjax24"></div><span class="wfSavedMsg">&nbsp;Your changes have been saved!</span></td></tr></table></p>
@@ -102,6 +99,7 @@ var WFSLevels = <?php echo json_encode(wfConfig::$securityLevels); ?>;
102
  <tr><th>Scan comments for known dangerous URLs and suspicious content</th><td><input type="checkbox" id="scansEnabled_comments" class="wfConfigElem" name="scansEnabled_comments" value="1" <?php $w->cb('scansEnabled_comments'); ?>/></td></tr>
103
  <tr><th>Scan for out of date plugins, themes and WordPress versions</th><td><input type="checkbox" id="scansEnabled_oldVersions" class="wfConfigElem" name="scansEnabled_oldVersions" value="1" <?php $w->cb('scansEnabled_oldVersions'); ?>/></td></tr>
104
  <tr><th>Check the strength of passwords</th><td><input type="checkbox" id="scansEnabled_passwds" class="wfConfigElem" name="scansEnabled_passwds" value="1" <?php $w->cb('scansEnabled_passwds'); ?>/></td></tr>
 
105
  <tr><th>Monitor disk space</th><td><input type="checkbox" id="scansEnabled_diskSpace" class="wfConfigElem" name="scansEnabled_diskSpace" value="1" <?php $w->cb('scansEnabled_diskSpace'); ?>/></td></tr>
106
  <tr><th>Scan for unauthorized DNS changes</th><td><input type="checkbox" id="scansEnabled_dns" class="wfConfigElem" name="scansEnabled_dns" value="1" <?php $w->cb('scansEnabled_dns'); ?>/></td></tr>
107
  <tr><th>Scan files outside your WordPress installation</th><td><input type="checkbox" id="other_scanOutside" class="wfConfigElem" name="other_scanOutside" value="1" <?php $w->cb('other_scanOutside'); ?> /></td></tr>
36
  <option value="CUSTOM"<?php $w->sel('securityLevel', 'CUSTOM'); ?>>Custom settings</option>
37
  </select>
38
  </td></tr>
39
+ <tr><th>How does Wordfence get IPs:</th><td>
 
 
 
40
  <select id="howGetIPs" name="howGetIPs">
41
+ <option value="">Set this option if you're seeing visitors from fake IP addresses or who appear to be from your internal network but aren't.</option>
42
  <option value="REMOTE_ADDR"<?php $w->sel('howGetIPs', 'REMOTE_ADDR'); ?>>Use PHP's built in REMOTE_ADDR. Use this if you're not using Nginx or any separate front-end proxy or firewall. Try this first.</option>
43
  <option value="HTTP_X_REAL_IP"<?php $w->sel('howGetIPs', 'HTTP_X_REAL_IP'); ?>>Use the X-Real-IP HTTP header which my Nginx, firewall or front-end proxy is setting. Try this next.</option>
44
  <option value="HTTP_X_FORWARDED_FOR"<?php $w->sel('howGetIPs', 'HTTP_X_FORWARDED_FOR'); ?>>Use the X-Forwarded-For HTTP header which my Nginx, firewall or front-end proxy is setting.</option>
45
  <option value="HTTP_CF_CONNECTING_IP"<?php $w->sel('howGetIPs', 'HTTP_CF_CONNECTING_IP'); ?>>I'm using Cloudflare so use the "CF-Connecting-IP" HTTP header to get a visitor IP</option>
46
+ </select>
47
  </td></tr>
48
  </table>
49
  <p><table border="0" cellpadding="0" cellspacing="0"><tr><td><input type="button" id="button1" name="button1" class="button-primary" value="Save Changes" onclick="WFAD.saveConfig();" /></td><td style="height: 24px;"><div class="wfAjax24"></div><span class="wfSavedMsg">&nbsp;Your changes have been saved!</span></td></tr></table></p>
99
  <tr><th>Scan comments for known dangerous URLs and suspicious content</th><td><input type="checkbox" id="scansEnabled_comments" class="wfConfigElem" name="scansEnabled_comments" value="1" <?php $w->cb('scansEnabled_comments'); ?>/></td></tr>
100
  <tr><th>Scan for out of date plugins, themes and WordPress versions</th><td><input type="checkbox" id="scansEnabled_oldVersions" class="wfConfigElem" name="scansEnabled_oldVersions" value="1" <?php $w->cb('scansEnabled_oldVersions'); ?>/></td></tr>
101
  <tr><th>Check the strength of passwords</th><td><input type="checkbox" id="scansEnabled_passwds" class="wfConfigElem" name="scansEnabled_passwds" value="1" <?php $w->cb('scansEnabled_passwds'); ?>/></td></tr>
102
+ <tr><th>Scan options table</th><td><input type="checkbox" id="scansEnabled_options" class="wfConfigElem" name="scansEnabled_options" value="1" <?php $w->cb('scansEnabled_options'); ?>/></td></tr>
103
  <tr><th>Monitor disk space</th><td><input type="checkbox" id="scansEnabled_diskSpace" class="wfConfigElem" name="scansEnabled_diskSpace" value="1" <?php $w->cb('scansEnabled_diskSpace'); ?>/></td></tr>
104
  <tr><th>Scan for unauthorized DNS changes</th><td><input type="checkbox" id="scansEnabled_dns" class="wfConfigElem" name="scansEnabled_dns" value="1" <?php $w->cb('scansEnabled_dns'); ?>/></td></tr>
105
  <tr><th>Scan files outside your WordPress installation</th><td><input type="checkbox" id="other_scanOutside" class="wfConfigElem" name="other_scanOutside" value="1" <?php $w->cb('other_scanOutside'); ?> /></td></tr>
lib/menu_rangeBlocking.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wordfenceModeElem" id="wordfenceMode_rangeBlocking"></div>
2
+ <div class="wrap" id="paidWrap">
3
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2 id="wfHeading">Advanced Pattern Blocking</h2>
4
+ <div class="wordfenceWrap" style="margin: 20px 20px 20px 30px;">
5
+ <p>
6
+ <div style="width: 600px; margin-bottom: 15px;">
7
+ This page lets you block visitors who are from a range of IP addresses or are using a certain web browser or browser pattern.
8
+ You can also block a certain web browser that is visiting your site from a certain range of IP addresses. This can be useful when
9
+ blocking someone pretending to be Google and using a specific Internet Service Provider or Web Host.<br /><br />
10
+ <ul style="list-style-type:circle;">
11
+ <li>To block a range of IP addresses, enter the range and leave the User-Agent field blank.</li>
12
+ <li>To block a certain kind of web browser, enter the browser or browser pattern in the User-Agent field and leave the IP range blank</li>
13
+ <li>To block a certain kind of web browser that is accessing your site from a certain range of IP addresses, enter both the IP address range and the pattern to use to match the web browser</li>
14
+ </ul>
15
+ </div>
16
+ <table class="wfConfigForm">
17
+ <tr><th>Block anyone that has an IP address in this range:</th><td><input id="ipRange" type="text" size="30" maxlength="255" value="<?php if($_GET['wfBlockRange']){ echo $_GET['wfBlockRange']; } ?>" onkeyup="WFAD.calcRangeTotal();">&nbsp;<span id="wfShowRangeTotal"></span></td></tr>
18
+ <tr><td></td><td style="padding-bottom: 15px;"><strong>Examples:</strong> 192.168.200.200 - 192.168.200.220</td></tr>
19
+ <tr><th>...you can also enter a User-Agent (browser) that matches:</th><td><input id="uaRange" type="text" size="30" maxlength="255" >&nbsp;(Case insensitive)</td></tr>
20
+ <tr><td></td><td style="padding-bottom: 15px;"><strong>Examples:</strong> *containsBadRobot*, startsWithBadRobot*, *endsWithBadRobot</td></tr>
21
+ <tr><th>Enter a reason you're blocking this visitor pattern:</th><td><input id="wfReason" type="text" size="30" maxlength="255"></td></tr>
22
+ <tr><td></td><td style="padding-bottom: 15px;"><strong>Why a reason:</strong> The reason you specify above is for your own record keeping.</td></tr>
23
+ <tr><td colspan="2" style="padding-top: 15px;">
24
+ <input type="button" name="but3" class="button-primary" value="Block Visitors Matching this Pattern" onclick="WFAD.blockIPUARange(jQuery('#ipRange').val(), jQuery('#uaRange').val(), jQuery('#wfReason').val()); return false;" />
25
+ </td></tr>
26
+ </table>
27
+ </p>
28
+ <p>
29
+ <h2>Current list of ranges and patterns you've blocked</h2>
30
+ <div id="currentBlocks"></div>
31
+ </p>
32
+ </div>
33
+ </div>
34
+ <script type="text/javascript">
35
+ <?php
36
+ if( (! wfConfig::get('isPaid')) && (wfConfig::get('tourClosed', 0) == '1') ){
37
+ echo 'WFAD.paidUsersOnly("Range and Internet Service Provider blocking is only available to paid members.");';
38
+ }
39
+ ?>
40
+ </script>
41
+
42
+ <script type="text/x-jquery-template" id="wfBlockedRangesTmpl">
43
+ <div>
44
+ <div style="border-bottom: 1px solid #CCC; padding-bottom: 10px; margin-bottom: 10px;">
45
+ <table border="0" style="width: 100%">
46
+ {{each(idx, elem) results}}
47
+ <tr><td>
48
+ <div>
49
+ <strong>IP Range:</strong>&nbsp;${ipPattern}
50
+ </div>
51
+ <div>
52
+ <strong>Browser Pattern:</strong>&nbsp;${browserPattern}
53
+ </div>
54
+ <div>
55
+ <strong>Reason:</strong>&nbsp;${reason}
56
+ </div>
57
+ <div><a href="#" onclick="WFAD.unblockRange('${id}'); return false;">Delete this blocking pattern</a></div>
58
+ </td>
59
+ <td style="color: #999;">
60
+ <ul>
61
+ <li>${totalBlocked} blocked hits</li>
62
+ {{if lastBlockedAgo}}
63
+ <li>Last blocked: ${lastBlockedAgo}</li>
64
+ {{/if}}
65
+ </ul>
66
+ </td></tr>
67
+ {{/each}}
68
+ </table>
69
+ </div>
70
+ </div>
71
+ </script>
72
+ <script type="text/x-jquery-template" id="wfWelcomeContentRangeBlocking">
73
+ <div>
74
+ <h3>Block Networks &amp; Browsers</h3>
75
+ <strong><p>Easily block advanced attacks</p></strong>
76
+ <p>
77
+ Advanced Blocking is a new feature in Wordfence that lets you block whole networks and certain types of web browsers.
78
+ You'll sometimes find a smart attacker will change their IP address frequently to make it harder to identify and block
79
+ the attack. Usually those attackers stick to a certain network or IP address range.
80
+ Wordfence lets you block entire networks using Advanced blocking to easily defeat advanced attacks.
81
+ </p>
82
+ <p>
83
+ You may also find an attacker that is identifying themselves as a certain kind of web browser that your
84
+ normal visitors don't use. You can use our User-Agent or Browser ID blocking feature to easily block
85
+ attacks like this.
86
+ </p>
87
+ <p>
88
+ You can also block any combination of network address range and User-Agent by specifying both in Wordfence Advanced Blocking.
89
+ As always we keep track of how many attacks have been blocked and when the last attack occured so that you know
90
+ when it's safe to remove the blocking rule.
91
+ </p>
92
+ </div>
93
+ </script>
lib/menu_scan.php CHANGED
@@ -243,6 +243,40 @@
243
  </div>
244
  </div>
245
  </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
 
247
  <script type="text/x-jquery-template" id="issueTmpl_diskSpace">
248
  <div>
243
  </div>
244
  </div>
245
  </script>
246
+ <script type="text/x-jquery-template" id="issueTmpl_badOption">
247
+ <div>
248
+ <div class="wfIssue">
249
+ <h2>${shortMsg}</h2>
250
+ <p>
251
+ <table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
252
+ <tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
253
+ {{if data.isMultisite}}
254
+ <tr><th>Multisite Blog ID:</th><td>${data.blog_id}</td></tr>
255
+ <tr><th>Multisite Blog Domain:</th><td>${data.domain}</td></tr>
256
+ <tr><th>Multisite Blog Path:</th><td>${data.path}</td></tr>
257
+ {{/if}}
258
+ <tr><th>Status</th><td>
259
+ {{if status == 'new' }}New{{/if}}
260
+ {{if status == 'ignoreP' || status == 'ignoreC' }}Ignoring all alerts related to this option{{/if}}
261
+ </td></tr>
262
+ </table>
263
+ </p>
264
+ <p>
265
+ {{html longMsg}}
266
+ </p>
267
+ <div class="wfIssueOptions">
268
+ {{if (status == 'new')}}
269
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</span>
270
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreP'); return false;">Ignore issues related to this option</span>
271
+ {{/if}}
272
+ {{if status == 'ignoreP' || status == 'ignoreC'}}
273
+ <a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring issues related to this option</a>
274
+ {{/if}}
275
+ </div>
276
+ </div>
277
+ </div>
278
+ </script>
279
+
280
 
281
  <script type="text/x-jquery-template" id="issueTmpl_diskSpace">
282
  <div>
lib/menu_whois.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wordfenceModeElem" id="wordfenceMode_whois"></div>
2
+ <div class="wrap" id="paidWrap">
3
+ <div class="wordfence-lock-icon wordfence-icon32"><br /></div><h2 id="wfHeading">WHOIS Facility: Look up the owner of an IP Address or Domain Name</h2>
4
+ <div class="wordfenceWrap" style="margin: 20px 20px 20px 30px;">
5
+ <p style="width: 600px;">
6
+ Wordfence WHOIS queries the WHOIS servers on the Internet and gets information about domain name or IP address owners. This helps you determine who is hacking your site and helps you report them to the relevant authorities. If you see a malicious IP address, do a WHOIS lookup, find out who is responsible for that IP address and send an email reporting them to the 'abuse' email address provided.<br /><br />
7
+ </p>
8
+ <p>
9
+ <input type="text" name="whois" id="wfwhois" value="" size="40" maxlength="255" onkeydown="if(event.keyCode == 13){ WFAD.whois(jQuery('#wfwhois').val()); }" />&nbsp;<input type="button" name="whoisbutton" id="whoisbutton" class="button-primary" value="Look up IP or Domain" onclick="WFAD.whois(jQuery('#wfwhois').val());" />
10
+
11
+ </p>
12
+ <?php if($_GET['wfnetworkblock']){ ?>
13
+ <h2>How to block a network</h2>
14
+ <p style="width: 600px;">
15
+ You've chosen to block the network that <span style="color: #F00;"><?php echo $_GET['whoisval']; ?></span> is part of.
16
+ We've marked the networks we found that this IP address belongs to in red below.
17
+ Make sure you read all the WHOIS information so that you see all networks this IP belongs to. We recommend blocking the network with the lowest number of addresses.
18
+ You may find this is listed at the end as part of the 'rWHOIS' query which contacts
19
+ the local WHOIS server that is run by the network administrator.
20
+ </p>
21
+ <?php } ?>
22
+ <div id="wfrawhtml">
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <script type="text/x-jquery-template" id="wfBlockedRangesTmpl">
27
+ <div>
28
+ <div style="border-bottom: 1px solid #CCC; padding-bottom: 10px; margin-bottom: 10px;">
29
+ <table border="0" style="width: 100%">
30
+ {{each(idx, elem) results}}
31
+ <tr><td></td></tr>
32
+ {{/each}}
33
+ </table>
34
+ </div>
35
+ </div>
36
+ </script>
37
+ <script type="text/javascript">
38
+ var whoisval = "<?php echo $_GET['whoisval']; ?>";
39
+ if(whoisval){
40
+ jQuery(function(){
41
+ jQuery('#wfwhois').val(whoisval);
42
+ WFAD.whois(whoisval);
43
+ });
44
+ }
45
+ </script>
46
+ <script type="text/x-jquery-template" id="wfWelcomeContentWhois">
47
+ <div>
48
+ <h3>WHOIS: Look up domains and IP owners</h3>
49
+ <strong><p>Find out who's attacking you and report them!</p></strong>
50
+ <p>
51
+ Wordfence includes a new feature called "WHOIS". This feature works hand-in-glove with our
52
+ new "Advanced Blocking". Using WHOIS you can look up the owner of an IP address.
53
+ The owner information includes which networks the IP is part of. This information empowers you to do
54
+ several things.
55
+ </p>
56
+ <p>
57
+ Firstly you can report any malicious IP address to the network that owns it using the abuse email addresses provided. Secondly, you can simply
58
+ click on the network ranges in the whois information and block that entire network.
59
+ </p>
60
+ <p>
61
+ Wordfence WHOIS queries in real-time the WHOIS servers belonging to the Regional Internet Registries ARIN, RIPE, APNIC, AFRINIC and LACNIC.
62
+ We then do a further query to any local WHOIS servers that administer the networks we find and this data is returned as a rWHOIS record
63
+ at the bottom of the WHOIS result.
64
+ </p>
65
+ </div>
66
+ </script>
lib/wf503.php CHANGED
@@ -1,20 +1,24 @@
1
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2
  <html><head>
3
- <title>Wordfence has limited your access</title>
4
  </head><body>
5
- <h1>Wordfence has limited your access to this site</h1>
6
  <p>Your access to this service has been temporarily limited. Please try again in a few minutes. (HTTP response code 503)</p>
7
  <p>Reason: <span style="color: #F00;"><?php echo $reason; ?></span></p>
8
- <p><b>Important note for site admins: </b>If you are the administrator of this website note that your access has been limited because you broke one of the Wordfence firewall rules.
9
- The reason you access was limited is: <b>"<?php echo $reason; ?>"</b>. If this is a false positive, meaning that your access to your own site has been limited incorrectly, then you
 
 
10
  will need to regain access to your site, go to the Wordfence "options" page, go to the section for Firewall Rules and disable the rule that caused you to be blocked. For example,
11
  if you were blocked because it was detected that you are a fake Google crawler, then disable the rule that blocks fake google crawlers. Or if you were blocked because you
12
- were accessing your site too quickly, then increase the number of accesses allowed per minute. If you're still having trouble, then simply disable the Wordfence firwall and you will
13
- still benefit from the other security features that Wordfence provides. You will find instructions below on how to regain access if you are a site administrator.
14
- </p>
 
15
 
16
- <hr>
17
  <br /><br />
18
  <?php require('wfUnlockMsg.php'); ?>
 
 
19
  <address>This response was generated by Wordfence.</address>
20
  </body></html>
1
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2
  <html><head>
3
+ <title>Your access to this site has been limited</title>
4
  </head><body>
5
+ <h1>Your access to this site has been limited</h1>
6
  <p>Your access to this service has been temporarily limited. Please try again in a few minutes. (HTTP response code 503)</p>
7
  <p>Reason: <span style="color: #F00;"><?php echo $reason; ?></span></p>
8
+ <p style="width: 600px;"><b>Important note for site admins: </b>If you are the administrator of this website note that your access has been limited because you broke one of the Wordfence firewall rules.
9
+ The reason you access was limited is: <b>"<?php echo $reason; ?>"</b>.
10
+ <br /><br />
11
+ If this is a false positive, meaning that your access to your own site has been limited incorrectly, then you
12
  will need to regain access to your site, go to the Wordfence "options" page, go to the section for Firewall Rules and disable the rule that caused you to be blocked. For example,
13
  if you were blocked because it was detected that you are a fake Google crawler, then disable the rule that blocks fake google crawlers. Or if you were blocked because you
14
+ were accessing your site too quickly, then increase the number of accesses allowed per minute.
15
+ <br /><br />
16
+ If you're still having trouble, then simply disable the Wordfence firwall and you will
17
+ still benefit from the other security features that Wordfence provides.
18
 
 
19
  <br /><br />
20
  <?php require('wfUnlockMsg.php'); ?>
21
+
22
+ </p>
23
  <address>This response was generated by Wordfence.</address>
24
  </body></html>
lib/wfAPI.php CHANGED
@@ -4,7 +4,6 @@ require_once('wordfenceClass.php');
4
  class wfAPI {
5
  public $lastHTTPStatus = '';
6
  public $lastCurlErrorNo = '';
7
- private $curlDataWritten = 0;
8
  private $curlContent = 0;
9
  private $APIKey = '';
10
  private $wordpressVersion = '';
@@ -37,11 +36,7 @@ class wfAPI {
37
  }
38
  public function curlWrite($h, $d){
39
  $this->curlContent .= $d;
40
- if($this->curlDataWritten > 10000000){ //10 megs
41
- return 0;
42
- } else {
43
- return strlen($d);
44
- }
45
  }
46
  protected function getURL($url, $postParams = array()){
47
  if(function_exists('curl_init')){
4
  class wfAPI {
5
  public $lastHTTPStatus = '';
6
  public $lastCurlErrorNo = '';
 
7
  private $curlContent = 0;
8
  private $APIKey = '';
9
  private $wordpressVersion = '';
36
  }
37
  public function curlWrite($h, $d){
38
  $this->curlContent .= $d;
39
+ return strlen($d);
 
 
 
 
40
  }
41
  protected function getURL($url, $postParams = array()){
42
  if(function_exists('curl_init')){
lib/wfConfig.php CHANGED
@@ -29,6 +29,7 @@ class wfConfig {
29
  "scansEnabled_comments" => false,
30
  "scansEnabled_passwds" => false,
31
  "scansEnabled_diskSpace" => false,
 
32
  "scansEnabled_dns" => false,
33
  "scansEnabled_oldVersions" => false,
34
  "firewallEnabled" => false,
@@ -92,6 +93,7 @@ class wfConfig {
92
  "scansEnabled_comments" => true,
93
  "scansEnabled_passwds" => true,
94
  "scansEnabled_diskSpace" => true,
 
95
  "scansEnabled_dns" => true,
96
  "scansEnabled_oldVersions" => true,
97
  "firewallEnabled" => false,
@@ -155,6 +157,7 @@ class wfConfig {
155
  "scansEnabled_comments" => true,
156
  "scansEnabled_passwds" => true,
157
  "scansEnabled_diskSpace" => true,
 
158
  "scansEnabled_dns" => true,
159
  "scansEnabled_oldVersions" => true,
160
  "firewallEnabled" => false,
@@ -218,6 +221,7 @@ class wfConfig {
218
  "scansEnabled_comments" => true,
219
  "scansEnabled_passwds" => true,
220
  "scansEnabled_diskSpace" => true,
 
221
  "scansEnabled_dns" => true,
222
  "scansEnabled_oldVersions" => true,
223
  "firewallEnabled" => true,
@@ -281,6 +285,7 @@ class wfConfig {
281
  "scansEnabled_comments" => true,
282
  "scansEnabled_passwds" => true,
283
  "scansEnabled_diskSpace" => true,
 
284
  "scansEnabled_dns" => true,
285
  "scansEnabled_oldVersions" => true,
286
  "firewallEnabled" => true,
29
  "scansEnabled_comments" => false,
30
  "scansEnabled_passwds" => false,
31
  "scansEnabled_diskSpace" => false,
32
+ "scansEnabled_options" => false,
33
  "scansEnabled_dns" => false,
34
  "scansEnabled_oldVersions" => false,
35
  "firewallEnabled" => false,
93
  "scansEnabled_comments" => true,
94
  "scansEnabled_passwds" => true,
95
  "scansEnabled_diskSpace" => true,
96
+ "scansEnabled_options" => true,
97
  "scansEnabled_dns" => true,
98
  "scansEnabled_oldVersions" => true,
99
  "firewallEnabled" => false,
157
  "scansEnabled_comments" => true,
158
  "scansEnabled_passwds" => true,
159
  "scansEnabled_diskSpace" => true,
160
+ "scansEnabled_options" => true,
161
  "scansEnabled_dns" => true,
162
  "scansEnabled_oldVersions" => true,
163
  "firewallEnabled" => false,
221
  "scansEnabled_comments" => true,
222
  "scansEnabled_passwds" => true,
223
  "scansEnabled_diskSpace" => true,
224
+ "scansEnabled_options" => true,
225
  "scansEnabled_dns" => true,
226
  "scansEnabled_oldVersions" => true,
227
  "firewallEnabled" => true,
285
  "scansEnabled_comments" => true,
286
  "scansEnabled_passwds" => true,
287
  "scansEnabled_diskSpace" => true,
288
+ "scansEnabled_options" => true,
289
  "scansEnabled_dns" => true,
290
  "scansEnabled_oldVersions" => true,
291
  "firewallEnabled" => true,
lib/wfLockedOut.php CHANGED
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html>
2
  <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
3
  <head>
4
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
1
+ <?php wfUtils::doNotCache(); ?><!DOCTYPE html>
2
  <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
3
  <head>
4
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
lib/wfLog.php CHANGED
@@ -22,6 +22,7 @@ class wfLog {
22
  $this->scanTable = $wpdb->base_prefix . 'wfScanners';
23
  $this->throttleTable = $wpdb->base_prefix . 'wfThrottleLog';
24
  $this->statusTable = $wpdb->base_prefix . 'wfStatus';
 
25
  }
26
  public function logLogin($action, $fail, $username){
27
  $user = get_user_by('login', $username);
@@ -50,21 +51,68 @@ class wfLog {
50
  return $pagename;
51
  }
52
  public function logLeechAndBlock($type){ //404 or hit
53
- $IP = wfUtils::getIP();
54
- if($this->isWhitelisted($IP)){
55
- return;
56
- }
57
- if($type == '404'){
58
- $table = $this->scanTable;
59
- } else if($type == 'hit'){
60
- $table = $this->leechTable;
61
- } else {
62
- wordfence::status(1, 'error', "Invalid type to logLeechAndBlock(): $type");
63
- return;
64
- }
65
- $this->getDB()->query("insert into $table (eMin, IP, hits) values (floor(unix_timestamp() / 60), %s, 1) ON DUPLICATE KEY update hits = IF(@wfcurrenthits := hits + 1, hits + 1, hits + 1)", wfUtils::inet_aton($IP));
66
- $hitsPerMinute = $this->getDB()->querySingle("select @wfcurrenthits");
67
  if(wfConfig::get('firewallEnabled')){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  if(wfConfig::get('blockFakeBots')){
69
  if(wfCrawl::isGooglebot() && (! wfCrawl::verifyCrawlerPTR($this->googlePattern, $IP) )){
70
  wordfence::status(2, 'info', "Blocking fake Googlebot at IP $IP");
@@ -87,7 +135,7 @@ class wfLog {
87
  $this->getDB()->query("insert IGNORE into $p"."wfVulnScanners (IP, ctime, hits) values (INET_ATON('%s'), unix_timestamp(), 1) ON DUPLICATE KEY UPDATE ctime = unix_timestamp, hits = hits + 1", $IP);
88
  if(wfConfig::get('maxScanHits') != 'DISABLED'){
89
  if( empty($_SERVER['HTTP_REFERER'] )){
90
- $this->getDB()->query("insert into " . $this->badLeechersTable . " (eMin, IP, hits) values (floor(unix_timestamp() / 60), %s, 1) ON DUPLICATE KEY update hits = IF(@wfblcurrenthits := hits + 1, hits + 1, hits + 1)", wfUtils::inet_aton($IP));
91
  $BL_hitsPerMinute = $this->getDB()->querySingle("select @wfblcurrenthits");
92
  if($BL_hitsPerMinute > wfConfig::get('maxScanHits')){
93
  $this->takeBlockingAction('maxScanHits', "Exceeded the maximum number of 404 requests per minute for a known security vulnerability.");
@@ -160,6 +208,41 @@ class wfLog {
160
  public function unblockIP($IP){
161
  $this->getDB()->query("delete from " . $this->blocksTable . " where IP=%s", wfUtils::inet_aton($IP));
162
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  public function blockIP($IP, $reason, $wfsn = false, $permanent = false){ //wfsn indicates it comes from Wordfence secure network
164
  if($this->isWhitelisted($IP)){ return false; }
165
  $wfsn = $wfsn ? 1 : 0;
@@ -241,14 +324,19 @@ class wfLog {
241
  while($elem = mysql_fetch_assoc($res)){
242
  $lastHitAgo = 0;
243
  $totalHits = 0;
244
- $lastLeech = $this->getDB()->querySingleRec("select unix_timestamp() as serverTime, max(eMin) * 60 as lastHit, sum(hits) as totalHits from " . $this->leechTable . " where IP=%s", $elem['IP']);
245
- if($lastLeech){ $totalHits += $lastLeech['totalHits']; $lastHitAgo = $lastLeech['serverTime'] - $lastLeech['lastHit']; }
246
- $lastScan = $this->getDB()->querySingleRec("select unix_timestamp() as serverTime, max(eMin) * 60 as lastHit, sum(hits) as totalHits from " . $this->scanTable . " where IP=%s", $elem['IP']);
247
- if($lastScan){
 
 
 
 
 
248
  $totalHits += $lastScan['totalHits'];
249
- $ago = $lastScan['serverTime'] - $lastScan['lastHit'];
250
- if($ago < $lastHitAgo){
251
- $lastHitAgo = $ago;
252
  }
253
  }
254
  $elem['totalHits'] = $totalHits;
@@ -589,6 +677,7 @@ class wfLog {
589
  }
590
  }
591
  private function do503($secsToGo, $reason){
 
592
  header('HTTP/1.1 503 Service Temporarily Unavailable');
593
  header('Status: 503 Service Temporarily Unavailable');
594
  if($secsToGo){
22
  $this->scanTable = $wpdb->base_prefix . 'wfScanners';
23
  $this->throttleTable = $wpdb->base_prefix . 'wfThrottleLog';
24
  $this->statusTable = $wpdb->base_prefix . 'wfStatus';
25
+ $this->ipRangesTable = $wpdb->base_prefix . 'wfBlocksAdv';
26
  }
27
  public function logLogin($action, $fail, $username){
28
  $user = get_user_by('login', $username);
51
  return $pagename;
52
  }
53
  public function logLeechAndBlock($type){ //404 or hit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  if(wfConfig::get('firewallEnabled')){
55
+ //Moved the following block into the "is fw enabled section" for optimization.
56
+ $IP = wfUtils::getIP();
57
+ $IPnum = wfUtils::inet_aton($IP);
58
+ // if($this->isWhitelisted($IP)){
59
+ // return;
60
+ // }
61
+ if($type == '404'){
62
+ $table = $this->scanTable;
63
+ } else if($type == 'hit'){
64
+ $table = $this->leechTable;
65
+ } else {
66
+ wordfence::status(1, 'error', "Invalid type to logLeechAndBlock(): $type");
67
+ return;
68
+ }
69
+ $this->getDB()->query("insert into $table (eMin, IP, hits) values (floor(unix_timestamp() / 60), %s, 1) ON DUPLICATE KEY update hits = IF(@wfcurrenthits := hits + 1, hits + 1, hits + 1)", wfUtils::inet_aton($IP));
70
+ $hitsPerMinute = $this->getDB()->querySingle("select @wfcurrenthits");
71
+ //end block moved into "is fw enabled" section
72
+
73
+ //New range and UA pattern blocking:
74
+ $r1 = $this->getDB()->query("select id, blockType, blockString from " . $this->ipRangesTable);
75
+ while($blockRec = mysql_fetch_assoc($r1)){
76
+ if($blockRec['blockType'] == 'IU'){
77
+ $ipRangeBlocked = false;
78
+ $uaPatternBlocked = false;
79
+
80
+ $bDat = explode('|', $blockRec['blockString']);
81
+ $ipRange = $bDat[0];
82
+ $uaPattern = $bDat[1];
83
+ if($ipRange){
84
+ $ips = explode('-', $ipRange);
85
+ if($IPnum >= $ips[0] && $IPnum <= $ips[1]){
86
+ $ipRangeBlocked = true;
87
+ }
88
+ }
89
+ if($uaPattern){
90
+ if(wfUtils::isUABlocked($uaPattern)){
91
+ $uaPatternBlocked = true;
92
+ }
93
+ }
94
+ $rangeBlockReason = false;
95
+ if($uaPattern && $ipRange){
96
+ if($uaPatternBlocked && $ipRangeBlocked){
97
+ $rangeBlockReason = "Advanced pattern blocking in effect.";
98
+ }
99
+ } else if($uaPattern){
100
+ if($uaPatternBlocked){
101
+ $rangeBlockReason = "Advanced pattern blocking in effect.";
102
+ }
103
+ } else if($ipRange){
104
+ if($ipRangeBlocked){
105
+ $rangeBlockReason = "Advanced pattern blocking in effect.";
106
+ }
107
+ }
108
+ if($rangeBlockReason){
109
+ $this->getDB()->query("update " . $this->ipRangesTable . " set totalBlocked = totalBlocked + 1, lastBlocked = unix_timestamp() where id=%d", $blockRec['id']);
110
+ $this->do503(3600, $rangeBlockReason);
111
+ }
112
+ }
113
+ }
114
+ //End range/UA blocking
115
+
116
  if(wfConfig::get('blockFakeBots')){
117
  if(wfCrawl::isGooglebot() && (! wfCrawl::verifyCrawlerPTR($this->googlePattern, $IP) )){
118
  wordfence::status(2, 'info', "Blocking fake Googlebot at IP $IP");
135
  $this->getDB()->query("insert IGNORE into $p"."wfVulnScanners (IP, ctime, hits) values (INET_ATON('%s'), unix_timestamp(), 1) ON DUPLICATE KEY UPDATE ctime = unix_timestamp, hits = hits + 1", $IP);
136
  if(wfConfig::get('maxScanHits') != 'DISABLED'){
137
  if( empty($_SERVER['HTTP_REFERER'] )){
138
+ $this->getDB()->query("insert into " . $this->badLeechersTable . " (eMin, IP, hits) values (floor(unix_timestamp() / 60), %s, 1) ON DUPLICATE KEY update hits = IF(@wfblcurrenthits := hits + 1, hits + 1, hits + 1)", $IPnum);
139
  $BL_hitsPerMinute = $this->getDB()->querySingle("select @wfblcurrenthits");
140
  if($BL_hitsPerMinute > wfConfig::get('maxScanHits')){
141
  $this->takeBlockingAction('maxScanHits', "Exceeded the maximum number of 404 requests per minute for a known security vulnerability.");
208
  public function unblockIP($IP){
209
  $this->getDB()->query("delete from " . $this->blocksTable . " where IP=%s", wfUtils::inet_aton($IP));
210
  }
211
+ public function unblockRange($id){
212
+ $this->getDB()->query("delete from " . $this->ipRangesTable . " where id=%d", $id);
213
+ }
214
+ public function blockRange($blockType, $range, $reason){
215
+ $this->getDB()->query("insert IGNORE into " . $this->ipRangesTable . " (blockType, blockString, ctime, reason, totalBlocked, lastBlocked) values ('%s', '%s', unix_timestamp(), '%s', 0, 0)", $blockType, $range, $reason);
216
+ return true;
217
+ }
218
+ public function getRanges(){
219
+ $res = $this->getDB()->query("select id, blockType, blockString, unix_timestamp() - ctime as ctimeAgo, reason, totalBlocked, unix_timestamp() - lastBlocked as lastBlockedAgo, lastBlocked from " . $this->ipRangesTable . " order by ctime desc");
220
+ $results = array();
221
+ while($elem = mysql_fetch_assoc($res)){
222
+ if($elem['blockType'] != 'IU'){ continue; } //We only use IU type for now, but have this for future different block types.
223
+ $elem['ctimeAgo'] = wfUtils::makeTimeAgo($elem['ctimeAgo']);
224
+ if($elem['lastBlocked'] > 0){
225
+ $elem['lastBlockedAgo'] = wfUtils::makeTimeAgo($elem['lastBlockedAgo']);
226
+ } else {
227
+ $elem['lastBlockedAgo'] = 'Never';
228
+ }
229
+ $blockDat = explode('|', $elem['blockString']);
230
+ $elem['ipPattern'] = "";
231
+ if($blockDat[0]){
232
+ $ipDat = explode('-', $blockDat[0]);
233
+ $elem['ipPattern'] = "Block visitors with IP addresses in the range: " . wfUtils::inet_ntoa($ipDat[0]) . ' - ' . wfUtils::inet_ntoa($ipDat[1]);
234
+ } else {
235
+ $elem['ipPattern'] = 'Allow all IP addresses';
236
+ }
237
+ if($blockDat[1]){
238
+ $elem['browserPattern'] = "Block visitors whos browsers match the pattern: " . $blockDat[1];
239
+ } else {
240
+ $elem['browserPattern'] = 'Allow all browsers';
241
+ }
242
+ array_push($results, $elem);
243
+ }
244
+ return $results;
245
+ }
246
  public function blockIP($IP, $reason, $wfsn = false, $permanent = false){ //wfsn indicates it comes from Wordfence secure network
247
  if($this->isWhitelisted($IP)){ return false; }
248
  $wfsn = $wfsn ? 1 : 0;
324
  while($elem = mysql_fetch_assoc($res)){
325
  $lastHitAgo = 0;
326
  $totalHits = 0;
327
+ $serverTime = $this->getDB()->querySingle("select unix_timestamp()");
328
+ $lastLeech = $this->getDB()->querySingleRec("select max(eMin) * 60 as lastHit, sum(hits) as totalHits from " . $this->leechTable . " where IP=%s", $elem['IP']);
329
+ //$lastLeech will be true because we use aggregation functions, so check actual values
330
+ if($lastLeech['lastHit']){
331
+ $totalHits += $lastLeech['totalHits'];
332
+ $lastHitAgo = $serverTime - $lastLeech['lastHit'];
333
+ }
334
+ $lastScan = $this->getDB()->querySingleRec("select max(eMin) * 60 as lastHit, sum(hits) as totalHits from " . $this->scanTable . " where IP=%s", $elem['IP']);
335
+ if($lastScan['lastHit']){ //Checking actual value because we will get a row back from aggregation funcs
336
  $totalHits += $lastScan['totalHits'];
337
+ $lastScanAgo = $serverTime - $lastScan['lastHit'];
338
+ if($lastScanAgo < $lastHitAgo){
339
+ $lastHitAgo = $lastScanAgo;
340
  }
341
  }
342
  $elem['totalHits'] = $totalHits;
677
  }
678
  }
679
  private function do503($secsToGo, $reason){
680
+ wfUtils::doNotCache();
681
  header('HTTP/1.1 503 Service Temporarily Unavailable');
682
  header('Status: 503 Service Temporarily Unavailable');
683
  if($secsToGo){
lib/wfScanEngine.php CHANGED
@@ -53,7 +53,7 @@ class wfScanEngine {
53
  $this->jobList[] = 'knownFiles_init';
54
  $this->jobList[] = 'knownFiles_main';
55
  $this->jobList[] = 'knownFiles_finish';
56
- foreach(array('knownFiles', 'fileContents', 'posts', 'comments', 'passwds', 'dns', 'diskSpace', 'oldVersions') as $scanType){
57
  if(wfConfig::get('scansEnabled_' . $scanType)){
58
  if(method_exists($this, 'scan_' . $scanType . '_init')){
59
  foreach(array('init', 'main', 'finish') as $op){ $this->jobList[] = $scanType . '_' . $op; };
@@ -678,6 +678,21 @@ class wfScanEngine {
678
  wordfence::statusEnd($this->statusIDX['diskSpace'], false);
679
  }
680
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
681
  private function scan_dns(){
682
  if(! function_exists('dns_get_record')){
683
  $this->status(1, 'info', "Skipping DNS scan because this system does not support dns_get_record()");
53
  $this->jobList[] = 'knownFiles_init';
54
  $this->jobList[] = 'knownFiles_main';
55
  $this->jobList[] = 'knownFiles_finish';
56
+ foreach(array('knownFiles', 'fileContents', 'posts', 'comments', 'passwds', 'options', 'dns', 'diskSpace', 'oldVersions') as $scanType){
57
  if(wfConfig::get('scansEnabled_' . $scanType)){
58
  if(method_exists($this, 'scan_' . $scanType . '_init')){
59
  foreach(array('init', 'main', 'finish') as $op){ $this->jobList[] = $scanType . '_' . $op; };
678
  wordfence::statusEnd($this->statusIDX['diskSpace'], false);
679
  }
680
  }
681
+ private function scan_options(){
682
+ $blogsToScan = $this->getBlogsToScan('options');
683
+ $wfdb = new wfDB();
684
+ foreach($blogsToScan as $blog){
685
+ $charset = $wfdb->querySingle("select option_value from " . $blog['table'] . " where option_name='blog_charset'");
686
+ if(strtolower($charset) == 'utf-7'){
687
+ $this->addIssue('badOption', 1, $blog['blog_id'] . 'blog_charset', $blog['blog_id'] . 'blog_charset', "An option was found in your site that indicates it may have been hacked.", "The 'blog_charset' option in your database is set to '" . $charset . "' which indicates your site may have been hacked. If hackers can gain access to your database via phpMyAdmin for example, they will change this value in order to inject malicious code into other parts of your site or allow XSS attacks. The 'badi' hack does this.", array(
688
+ 'isMultisite' => $blog['isMultisite'],
689
+ 'domain' => $blog['domain'],
690
+ 'path' => $blog['path'],
691
+ 'blog_id' => $blog['blog_id']
692
+ ));
693
+ }
694
+ }
695
+ }
696
  private function scan_dns(){
697
  if(! function_exists('dns_get_record')){
698
  $this->status(1, 'info', "Skipping DNS scan because this system does not support dns_get_record()");
lib/wfSchema.php CHANGED
@@ -149,6 +149,15 @@ class wfSchema {
149
  knownFile tinyint UNSIGNED NOT NULL,
150
  oldMD5 binary(16) NOT NULL,
151
  newMD5 binary(16) NOT NULL
 
 
 
 
 
 
 
 
 
152
  ) default charset=utf8"
153
  );
154
  private $db = false;
149
  knownFile tinyint UNSIGNED NOT NULL,
150
  oldMD5 binary(16) NOT NULL,
151
  newMD5 binary(16) NOT NULL
152
+ ) default charset=utf8",
153
+ 'wfBlocksAdv' => "(
154
+ id int UNSIGNED NOT NULL auto_increment PRIMARY KEY,
155
+ blockType char(2) NOT NULL,
156
+ blockString varchar(255) NOT NULL,
157
+ ctime int UNSIGNED NOT NULL,
158
+ reason varchar(255) NOT NULL,
159
+ totalBlocked int UNSIGNED default 0,
160
+ lastBlocked int UNSIGNED default 0
161
  ) default charset=utf8"
162
  );
163
  private $db = false;
lib/wfUnlockMsg.php CHANGED
@@ -1,4 +1,4 @@
1
- If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access.
2
  <br /><br />
3
  <form method="POST" action="<?php echo wfUtils::getSiteBaseURL(); ?>?_wfsf=unlockEmail">
4
  <input type="text" size="50" name="email" value="" maxlength="255" />&nbsp;<input type="submit" name="s" value="Send me an unlock email" />
1
+ If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="http://www.wordfence.com/docs/frequently-asked-questions/#3" target="_blank">Please read our FAQ if this does not work.</a>
2
  <br /><br />
3
  <form method="POST" action="<?php echo wfUtils::getSiteBaseURL(); ?>?_wfsf=unlockEmail">
4
  <input type="text" size="50" name="email" value="" maxlength="255" />&nbsp;<input type="submit" name="s" value="Send me an unlock email" />
lib/wfUtils.php CHANGED
@@ -129,7 +129,11 @@ class wfUtils {
129
  }
130
  return $IP;
131
  } else {
132
- $msg = "Wordfence can't get the IP of clients and therefore can't operate. We received IP: $IP. X-Forwarded-For was: " . $_SERVER['HTTP_X_FORWARDED_FOR'] . " REMOTE_ADDR was: " . $_SERVER['REMOTE_ADDR'];
 
 
 
 
133
  $possible = array();
134
  foreach($_SERVER as $key => $val){
135
  if(is_string($val) && preg_match('/^\d+\.\d+\.\d+\.\d+/', $val) && strlen($val) < 255){
@@ -497,6 +501,23 @@ class wfUtils {
497
  @ini_set($key, $val);
498
  }
499
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
500
  }
501
 
502
 
129
  }
130
  return $IP;
131
  } else {
132
+ $xFor = "";
133
+ if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) ){
134
+ $xFor = $_SERVER['HTTP_X_FORWARDED_FOR'];
135
+ }
136
+ $msg = "Wordfence can't get the IP of clients and therefore can't operate. We received IP: $IP. X-Forwarded-For was: " . $xFor . " REMOTE_ADDR was: " . $_SERVER['REMOTE_ADDR'];
137
  $possible = array();
138
  foreach($_SERVER as $key => $val){
139
  if(is_string($val) && preg_match('/^\d+\.\d+\.\d+\.\d+/', $val) && strlen($val) < 255){
501
  @ini_set($key, $val);
502
  }
503
  }
504
+ public static function doNotCache(){
505
+ define('DONOTCACHEPAGE', true);
506
+ define('DONOTCACHEDB', true);
507
+ define('DONOTCDN', true);
508
+ define('DONOTCACHEOBJECT', true);
509
+ }
510
+ public static function isUABlocked($uaPattern){ // takes a pattern using asterisks as wildcards, turns it into regex and checks it against the visitor UA returning true if blocked
511
+ $uaPieces = explode('*', $uaPattern);
512
+ for($i = 0; $i < sizeof($uaPieces); $i++){
513
+ $uaPieces[$i] = preg_quote($uaPieces[$i]);
514
+ }
515
+ $uaPatternRegex = '/^' . implode('.*', $uaPieces) . '$/i';
516
+ if(preg_match($uaPatternRegex, $_SERVER['HTTP_USER_AGENT'])){
517
+ return true;
518
+ }
519
+ return false;
520
+ }
521
  }
522
 
523
 
lib/whois/.htaccess ADDED
@@ -0,0 +1,2 @@
 
 
1
+ deny from all
2
+
lib/whois/LICENSE ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Library General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License
307
+ along with this program; if not, write to the Free Software
308
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
309
+
310
+
311
+ Also add information on how to contact you by electronic and paper mail.
312
+
313
+ If the program is interactive, make it output a short notice like this
314
+ when it starts in an interactive mode:
315
+
316
+ Gnomovision version 69, Copyright (C) year name of author
317
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
318
+ This is free software, and you are welcome to redistribute it
319
+ under certain conditions; type `show c' for details.
320
+
321
+ The hypothetical commands `show w' and `show c' should show the appropriate
322
+ parts of the General Public License. Of course, the commands you use may
323
+ be called something other than `show w' and `show c'; they could even be
324
+ mouse-clicks or menu items--whatever suits your program.
325
+
326
+ You should also get your employer (if you work as a programmer) or your
327
+ school, if any, to sign a "copyright disclaimer" for the program, if
328
+ necessary. Here is a sample; alter the names:
329
+
330
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
331
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
332
+
333
+ <signature of Ty Coon>, 1 April 1989
334
+ Ty Coon, President of Vice
335
+
336
+ This General Public License does not permit incorporating your program into
337
+ proprietary programs. If your program is a subroutine library, you may
338
+ consider it more useful to permit linking proprietary applications with the
339
+ library. If this is what you want to do, use the GNU Library General
340
+ Public License instead of this License.
lib/whois/handler.template.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__XX_HANDLER__'))
29
+ define('__XX_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class xx_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ return $r;
38
+ }
39
+ }
40
+ ?>
lib/whois/npdata.ser ADDED
@@ -0,0 +1 @@
 
1
+ a:6:{s:11:"map_nothing";a:27:{i:0;i:173;i:1;i:847;i:2;i:6150;i:3;i:6155;i:4;i:6156;i:5;i:6157;i:6;i:8203;i:7;i:8204;i:8;i:8205;i:9;i:8288;i:10;i:65024;i:11;i:65025;i:12;i:65026;i:13;i:65027;i:14;i:65028;i:15;i:65029;i:16;i:65030;i:17;i:65031;i:18;i:65032;i:19;i:65033;i:20;i:65034;i:21;i:65035;i:22;i:65036;i:23;i:65037;i:24;i:65038;i:25;i:65039;i:26;i:65279;}s:18:"general_prohibited";a:64:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13;i:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i:22;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:31;i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;i:41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:47;i:46;i:59;i:47;i:60;i:48;i:61;i:49;i:62;i:50;i:63;i:51;i:64;i:52;i:91;i:53;i:92;i:54;i:93;i:55;i:94;i:56;i:95;i:57;i:96;i:58;i:123;i:59;i:124;i:60;i:125;i:61;i:126;i:62;i:127;i:63;i:12290;}s:8:"prohibit";a:84:{i:0;i:160;i:1;i:5760;i:2;i:8192;i:3;i:8193;i:4;i:8194;i:5;i:8195;i:6;i:8196;i:7;i:8197;i:8;i:8198;i:9;i:8199;i:10;i:8200;i:11;i:8201;i:12;i:8202;i:13;i:8203;i:14;i:8239;i:15;i:8287;i:16;i:12288;i:17;i:1757;i:18;i:1807;i:19;i:6158;i:20;i:8204;i:21;i:8205;i:22;i:8232;i:23;i:8233;i:24;i:65279;i:25;i:65529;i:26;i:65530;i:27;i:65531;i:28;i:65532;i:29;i:65534;i:30;i:65535;i:31;i:131070;i:32;i:131071;i:33;i:196606;i:34;i:196607;i:35;i:262142;i:36;i:262143;i:37;i:327678;i:38;i:327679;i:39;i:393214;i:40;i:393215;i:41;i:458750;i:42;i:458751;i:43;i:524286;i:44;i:524287;i:45;i:589822;i:46;i:589823;i:47;i:655358;i:48;i:655359;i:49;i:720894;i:50;i:720895;i:51;i:786430;i:52;i:786431;i:53;i:851966;i:54;i:851967;i:55;i:917502;i:56;i:917503;i:57;i:983038;i:58;i:983039;i:59;i:1048574;i:60;i:1048575;i:61;i:1114110;i:62;i:1114111;i:63;i:65529;i:64;i:65530;i:65;i:65531;i:66;i:65532;i:67;i:65533;i:68;i:832;i:69;i:833;i:70;i:8206;i:71;i:8207;i:72;i:8234;i:73;i:8235;i:74;i:8236;i:75;i:8237;i:76;i:8238;i:77;i:8298;i:78;i:8299;i:79;i:8300;i:80;i:8301;i:81;i:8302;i:82;i:8303;i:83;i:917505;}s:15:"prohibit_ranges";a:10:{i:0;a:2:{i:0;i:128;i:1;i:159;}i:1;a:2:{i:0;i:8288;i:1;i:8303;}i:2;a:2:{i:0;i:119155;i:1;i:119162;}i:3;a:2:{i:0;i:57344;i:1;i:63743;}i:4;a:2:{i:0;i:983040;i:1;i:1048573;}i:5;a:2:{i:0;i:1048576;i:1;i:1114109;}i:6;a:2:{i:0;i:64976;i:1;i:65007;}i:7;a:2:{i:0;i:55296;i:1;i:57343;}i:8;a:2:{i:0;i:12272;i:1;i:12283;}i:9;a:2:{i:0;i:917536;i:1;i:917631;}}s:11:"replacemaps";a:1401:{i:65;a:1:{i:0;i:97;}i:66;a:1:{i:0;i:98;}i:67;a:1:{i:0;i:99;}i:68;a:1:{i:0;i:100;}i:69;a:1:{i:0;i:101;}i:70;a:1:{i:0;i:102;}i:71;a:1:{i:0;i:103;}i:72;a:1:{i:0;i:104;}i:73;a:1:{i:0;i:105;}i:74;a:1:{i:0;i:106;}i:75;a:1:{i:0;i:107;}i:76;a:1:{i:0;i:108;}i:77;a:1:{i:0;i:109;}i:78;a:1:{i:0;i:110;}i:79;a:1:{i:0;i:111;}i:80;a:1:{i:0;i:112;}i:81;a:1:{i:0;i:113;}i:82;a:1:{i:0;i:114;}i:83;a:1:{i:0;i:115;}i:84;a:1:{i:0;i:116;}i:85;a:1:{i:0;i:117;}i:86;a:1:{i:0;i:118;}i:87;a:1:{i:0;i:119;}i:88;a:1:{i:0;i:120;}i:89;a:1:{i:0;i:121;}i:90;a:1:{i:0;i:122;}i:181;a:1:{i:0;i:956;}i:192;a:1:{i:0;i:224;}i:193;a:1:{i:0;i:225;}i:194;a:1:{i:0;i:226;}i:195;a:1:{i:0;i:227;}i:196;a:1:{i:0;i:228;}i:197;a:1:{i:0;i:229;}i:198;a:1:{i:0;i:230;}i:199;a:1:{i:0;i:231;}i:200;a:1:{i:0;i:232;}i:201;a:1:{i:0;i:233;}i:202;a:1:{i:0;i:234;}i:203;a:1:{i:0;i:235;}i:204;a:1:{i:0;i:236;}i:205;a:1:{i:0;i:237;}i:206;a:1:{i:0;i:238;}i:207;a:1:{i:0;i:239;}i:208;a:1:{i:0;i:240;}i:209;a:1:{i:0;i:241;}i:210;a:1:{i:0;i:242;}i:211;a:1:{i:0;i:243;}i:212;a:1:{i:0;i:244;}i:213;a:1:{i:0;i:245;}i:214;a:1:{i:0;i:246;}i:216;a:1:{i:0;i:248;}i:217;a:1:{i:0;i:249;}i:218;a:1:{i:0;i:250;}i:219;a:1:{i:0;i:251;}i:220;a:1:{i:0;i:252;}i:221;a:1:{i:0;i:253;}i:222;a:1:{i:0;i:254;}i:223;a:2:{i:0;i:115;i:1;i:115;}i:256;a:1:{i:0;i:257;}i:258;a:1:{i:0;i:259;}i:260;a:1:{i:0;i:261;}i:262;a:1:{i:0;i:263;}i:264;a:1:{i:0;i:265;}i:266;a:1:{i:0;i:267;}i:268;a:1:{i:0;i:269;}i:270;a:1:{i:0;i:271;}i:272;a:1:{i:0;i:273;}i:274;a:1:{i:0;i:275;}i:276;a:1:{i:0;i:277;}i:278;a:1:{i:0;i:279;}i:280;a:1:{i:0;i:281;}i:282;a:1:{i:0;i:283;}i:284;a:1:{i:0;i:285;}i:286;a:1:{i:0;i:287;}i:288;a:1:{i:0;i:289;}i:290;a:1:{i:0;i:291;}i:292;a:1:{i:0;i:293;}i:294;a:1:{i:0;i:295;}i:296;a:1:{i:0;i:297;}i:298;a:1:{i:0;i:299;}i:300;a:1:{i:0;i:301;}i:302;a:1:{i:0;i:303;}i:304;a:2:{i:0;i:105;i:1;i:775;}i:306;a:1:{i:0;i:307;}i:308;a:1:{i:0;i:309;}i:310;a:1:{i:0;i:311;}i:313;a:1:{i:0;i:314;}i:315;a:1:{i:0;i:316;}i:317;a:1:{i:0;i:318;}i:319;a:1:{i:0;i:320;}i:321;a:1:{i:0;i:322;}i:323;a:1:{i:0;i:324;}i:325;a:1:{i:0;i:326;}i:327;a:1:{i:0;i:328;}i:329;a:2:{i:0;i:700;i:1;i:110;}i:330;a:1:{i:0;i:331;}i:332;a:1:{i:0;i:333;}i:334;a:1:{i:0;i:335;}i:336;a:1:{i:0;i:337;}i:338;a:1:{i:0;i:339;}i:340;a:1:{i:0;i:341;}i:342;a:1:{i:0;i:343;}i:344;a:1:{i:0;i:345;}i:346;a:1:{i:0;i:347;}i:348;a:1:{i:0;i:349;}i:350;a:1:{i:0;i:351;}i:352;a:1:{i:0;i:353;}i:354;a:1:{i:0;i:355;}i:356;a:1:{i:0;i:357;}i:358;a:1:{i:0;i:359;}i:360;a:1:{i:0;i:361;}i:362;a:1:{i:0;i:363;}i:364;a:1:{i:0;i:365;}i:366;a:1:{i:0;i:367;}i:368;a:1:{i:0;i:369;}i:370;a:1:{i:0;i:371;}i:372;a:1:{i:0;i:373;}i:374;a:1:{i:0;i:375;}i:376;a:1:{i:0;i:255;}i:377;a:1:{i:0;i:378;}i:379;a:1:{i:0;i:380;}i:381;a:1:{i:0;i:382;}i:383;a:1:{i:0;i:115;}i:385;a:1:{i:0;i:595;}i:386;a:1:{i:0;i:387;}i:388;a:1:{i:0;i:389;}i:390;a:1:{i:0;i:596;}i:391;a:1:{i:0;i:392;}i:393;a:1:{i:0;i:598;}i:394;a:1:{i:0;i:599;}i:395;a:1:{i:0;i:396;}i:398;a:1:{i:0;i:477;}i:399;a:1:{i:0;i:601;}i:400;a:1:{i:0;i:603;}i:401;a:1:{i:0;i:402;}i:403;a:1:{i:0;i:608;}i:404;a:1:{i:0;i:611;}i:406;a:1:{i:0;i:617;}i:407;a:1:{i:0;i:616;}i:408;a:1:{i:0;i:409;}i:412;a:1:{i:0;i:623;}i:413;a:1:{i:0;i:626;}i:415;a:1:{i:0;i:629;}i:416;a:1:{i:0;i:417;}i:418;a:1:{i:0;i:419;}i:420;a:1:{i:0;i:421;}i:422;a:1:{i:0;i:640;}i:423;a:1:{i:0;i:424;}i:425;a:1:{i:0;i:643;}i:428;a:1:{i:0;i:429;}i:430;a:1:{i:0;i:648;}i:431;a:1:{i:0;i:432;}i:433;a:1:{i:0;i:650;}i:434;a:1:{i:0;i:651;}i:435;a:1:{i:0;i:436;}i:437;a:1:{i:0;i:438;}i:439;a:1:{i:0;i:658;}i:440;a:1:{i:0;i:441;}i:444;a:1:{i:0;i:445;}i:452;a:1:{i:0;i:454;}i:453;a:1:{i:0;i:454;}i:455;a:1:{i:0;i:457;}i:456;a:1:{i:0;i:457;}i:458;a:1:{i:0;i:460;}i:459;a:1:{i:0;i:460;}i:461;a:1:{i:0;i:462;}i:463;a:1:{i:0;i:464;}i:465;a:1:{i:0;i:466;}i:467;a:1:{i:0;i:468;}i:469;a:1:{i:0;i:470;}i:471;a:1:{i:0;i:472;}i:473;a:1:{i:0;i:474;}i:475;a:1:{i:0;i:476;}i:478;a:1:{i:0;i:479;}i:480;a:1:{i:0;i:481;}i:482;a:1:{i:0;i:483;}i:484;a:1:{i:0;i:485;}i:486;a:1:{i:0;i:487;}i:488;a:1:{i:0;i:489;}i:490;a:1:{i:0;i:491;}i:492;a:1:{i:0;i:493;}i:494;a:1:{i:0;i:495;}i:496;a:2:{i:0;i:106;i:1;i:780;}i:497;a:1:{i:0;i:499;}i:498;a:1:{i:0;i:499;}i:500;a:1:{i:0;i:501;}i:502;a:1:{i:0;i:405;}i:503;a:1:{i:0;i:447;}i:504;a:1:{i:0;i:505;}i:506;a:1:{i:0;i:507;}i:508;a:1:{i:0;i:509;}i:510;a:1:{i:0;i:511;}i:512;a:1:{i:0;i:513;}i:514;a:1:{i:0;i:515;}i:516;a:1:{i:0;i:517;}i:518;a:1:{i:0;i:519;}i:520;a:1:{i:0;i:521;}i:522;a:1:{i:0;i:523;}i:524;a:1:{i:0;i:525;}i:526;a:1:{i:0;i:527;}i:528;a:1:{i:0;i:529;}i:530;a:1:{i:0;i:531;}i:532;a:1:{i:0;i:533;}i:534;a:1:{i:0;i:535;}i:536;a:1:{i:0;i:537;}i:538;a:1:{i:0;i:539;}i:540;a:1:{i:0;i:541;}i:542;a:1:{i:0;i:543;}i:544;a:1:{i:0;i:414;}i:546;a:1:{i:0;i:547;}i:548;a:1:{i:0;i:549;}i:550;a:1:{i:0;i:551;}i:552;a:1:{i:0;i:553;}i:554;a:1:{i:0;i:555;}i:556;a:1:{i:0;i:557;}i:558;a:1:{i:0;i:559;}i:560;a:1:{i:0;i:561;}i:562;a:1:{i:0;i:563;}i:837;a:1:{i:0;i:953;}i:890;a:2:{i:0;i:32;i:1;i:953;}i:902;a:1:{i:0;i:940;}i:904;a:1:{i:0;i:941;}i:905;a:1:{i:0;i:942;}i:906;a:1:{i:0;i:943;}i:908;a:1:{i:0;i:972;}i:910;a:1:{i:0;i:973;}i:911;a:1:{i:0;i:974;}i:912;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:913;a:1:{i:0;i:945;}i:914;a:1:{i:0;i:946;}i:915;a:1:{i:0;i:947;}i:916;a:1:{i:0;i:948;}i:917;a:1:{i:0;i:949;}i:918;a:1:{i:0;i:950;}i:919;a:1:{i:0;i:951;}i:920;a:1:{i:0;i:952;}i:921;a:1:{i:0;i:953;}i:922;a:1:{i:0;i:954;}i:923;a:1:{i:0;i:955;}i:924;a:1:{i:0;i:956;}i:925;a:1:{i:0;i:957;}i:926;a:1:{i:0;i:958;}i:927;a:1:{i:0;i:959;}i:928;a:1:{i:0;i:960;}i:929;a:1:{i:0;i:961;}i:931;a:1:{i:0;i:963;}i:932;a:1:{i:0;i:964;}i:933;a:1:{i:0;i:965;}i:934;a:1:{i:0;i:966;}i:935;a:1:{i:0;i:967;}i:936;a:1:{i:0;i:968;}i:937;a:1:{i:0;i:969;}i:938;a:1:{i:0;i:970;}i:939;a:1:{i:0;i:971;}i:944;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:962;a:1:{i:0;i:963;}i:976;a:1:{i:0;i:946;}i:977;a:1:{i:0;i:952;}i:978;a:1:{i:0;i:965;}i:979;a:1:{i:0;i:973;}i:980;a:1:{i:0;i:971;}i:981;a:1:{i:0;i:966;}i:982;a:1:{i:0;i:960;}i:984;a:1:{i:0;i:985;}i:986;a:1:{i:0;i:987;}i:988;a:1:{i:0;i:989;}i:990;a:1:{i:0;i:991;}i:992;a:1:{i:0;i:993;}i:994;a:1:{i:0;i:995;}i:996;a:1:{i:0;i:997;}i:998;a:1:{i:0;i:999;}i:1000;a:1:{i:0;i:1001;}i:1002;a:1:{i:0;i:1003;}i:1004;a:1:{i:0;i:1005;}i:1006;a:1:{i:0;i:1007;}i:1008;a:1:{i:0;i:954;}i:1009;a:1:{i:0;i:961;}i:1010;a:1:{i:0;i:963;}i:1012;a:1:{i:0;i:952;}i:1013;a:1:{i:0;i:949;}i:1024;a:1:{i:0;i:1104;}i:1025;a:1:{i:0;i:1105;}i:1026;a:1:{i:0;i:1106;}i:1027;a:1:{i:0;i:1107;}i:1028;a:1:{i:0;i:1108;}i:1029;a:1:{i:0;i:1109;}i:1030;a:1:{i:0;i:1110;}i:1031;a:1:{i:0;i:1111;}i:1032;a:1:{i:0;i:1112;}i:1033;a:1:{i:0;i:1113;}i:1034;a:1:{i:0;i:1114;}i:1035;a:1:{i:0;i:1115;}i:1036;a:1:{i:0;i:1116;}i:1037;a:1:{i:0;i:1117;}i:1038;a:1:{i:0;i:1118;}i:1039;a:1:{i:0;i:1119;}i:1040;a:1:{i:0;i:1072;}i:1041;a:1:{i:0;i:1073;}i:1042;a:1:{i:0;i:1074;}i:1043;a:1:{i:0;i:1075;}i:1044;a:1:{i:0;i:1076;}i:1045;a:1:{i:0;i:1077;}i:1046;a:1:{i:0;i:1078;}i:1047;a:1:{i:0;i:1079;}i:1048;a:1:{i:0;i:1080;}i:1049;a:1:{i:0;i:1081;}i:1050;a:1:{i:0;i:1082;}i:1051;a:1:{i:0;i:1083;}i:1052;a:1:{i:0;i:1084;}i:1053;a:1:{i:0;i:1085;}i:1054;a:1:{i:0;i:1086;}i:1055;a:1:{i:0;i:1087;}i:1056;a:1:{i:0;i:1088;}i:1057;a:1:{i:0;i:1089;}i:1058;a:1:{i:0;i:1090;}i:1059;a:1:{i:0;i:1091;}i:1060;a:1:{i:0;i:1092;}i:1061;a:1:{i:0;i:1093;}i:1062;a:1:{i:0;i:1094;}i:1063;a:1:{i:0;i:1095;}i:1064;a:1:{i:0;i:1096;}i:1065;a:1:{i:0;i:1097;}i:1066;a:1:{i:0;i:1098;}i:1067;a:1:{i:0;i:1099;}i:1068;a:1:{i:0;i:1100;}i:1069;a:1:{i:0;i:1101;}i:1070;a:1:{i:0;i:1102;}i:1071;a:1:{i:0;i:1103;}i:1120;a:1:{i:0;i:1121;}i:1122;a:1:{i:0;i:1123;}i:1124;a:1:{i:0;i:1125;}i:1126;a:1:{i:0;i:1127;}i:1128;a:1:{i:0;i:1129;}i:1130;a:1:{i:0;i:1131;}i:1132;a:1:{i:0;i:1133;}i:1134;a:1:{i:0;i:1135;}i:1136;a:1:{i:0;i:1137;}i:1138;a:1:{i:0;i:1139;}i:1140;a:1:{i:0;i:1141;}i:1142;a:1:{i:0;i:1143;}i:1144;a:1:{i:0;i:1145;}i:1146;a:1:{i:0;i:1147;}i:1148;a:1:{i:0;i:1149;}i:1150;a:1:{i:0;i:1151;}i:1152;a:1:{i:0;i:1153;}i:1162;a:1:{i:0;i:1163;}i:1164;a:1:{i:0;i:1165;}i:1166;a:1:{i:0;i:1167;}i:1168;a:1:{i:0;i:1169;}i:1170;a:1:{i:0;i:1171;}i:1172;a:1:{i:0;i:1173;}i:1174;a:1:{i:0;i:1175;}i:1176;a:1:{i:0;i:1177;}i:1178;a:1:{i:0;i:1179;}i:1180;a:1:{i:0;i:1181;}i:1182;a:1:{i:0;i:1183;}i:1184;a:1:{i:0;i:1185;}i:1186;a:1:{i:0;i:1187;}i:1188;a:1:{i:0;i:1189;}i:1190;a:1:{i:0;i:1191;}i:1192;a:1:{i:0;i:1193;}i:1194;a:1:{i:0;i:1195;}i:1196;a:1:{i:0;i:1197;}i:1198;a:1:{i:0;i:1199;}i:1200;a:1:{i:0;i:1201;}i:1202;a:1:{i:0;i:1203;}i:1204;a:1:{i:0;i:1205;}i:1206;a:1:{i:0;i:1207;}i:1208;a:1:{i:0;i:1209;}i:1210;a:1:{i:0;i:1211;}i:1212;a:1:{i:0;i:1213;}i:1214;a:1:{i:0;i:1215;}i:1217;a:1:{i:0;i:1218;}i:1219;a:1:{i:0;i:1220;}i:1221;a:1:{i:0;i:1222;}i:1223;a:1:{i:0;i:1224;}i:1225;a:1:{i:0;i:1226;}i:1227;a:1:{i:0;i:1228;}i:1229;a:1:{i:0;i:1230;}i:1232;a:1:{i:0;i:1233;}i:1234;a:1:{i:0;i:1235;}i:1236;a:1:{i:0;i:1237;}i:1238;a:1:{i:0;i:1239;}i:1240;a:1:{i:0;i:1241;}i:1242;a:1:{i:0;i:1243;}i:1244;a:1:{i:0;i:1245;}i:1246;a:1:{i:0;i:1247;}i:1248;a:1:{i:0;i:1249;}i:1250;a:1:{i:0;i:1251;}i:1252;a:1:{i:0;i:1253;}i:1254;a:1:{i:0;i:1255;}i:1256;a:1:{i:0;i:1257;}i:1258;a:1:{i:0;i:1259;}i:1260;a:1:{i:0;i:1261;}i:1262;a:1:{i:0;i:1263;}i:1264;a:1:{i:0;i:1265;}i:1266;a:1:{i:0;i:1267;}i:1268;a:1:{i:0;i:1269;}i:1272;a:1:{i:0;i:1273;}i:1280;a:1:{i:0;i:1281;}i:1282;a:1:{i:0;i:1283;}i:1284;a:1:{i:0;i:1285;}i:1286;a:1:{i:0;i:1287;}i:1288;a:1:{i:0;i:1289;}i:1290;a:1:{i:0;i:1291;}i:1292;a:1:{i:0;i:1293;}i:1294;a:1:{i:0;i:1295;}i:1329;a:1:{i:0;i:1377;}i:1330;a:1:{i:0;i:1378;}i:1331;a:1:{i:0;i:1379;}i:1332;a:1:{i:0;i:1380;}i:1333;a:1:{i:0;i:1381;}i:1334;a:1:{i:0;i:1382;}i:1335;a:1:{i:0;i:1383;}i:1336;a:1:{i:0;i:1384;}i:1337;a:1:{i:0;i:1385;}i:1338;a:1:{i:0;i:1386;}i:1339;a:1:{i:0;i:1387;}i:1340;a:1:{i:0;i:1388;}i:1341;a:1:{i:0;i:1389;}i:1342;a:1:{i:0;i:1390;}i:1343;a:1:{i:0;i:1391;}i:1344;a:1:{i:0;i:1392;}i:1345;a:1:{i:0;i:1393;}i:1346;a:1:{i:0;i:1394;}i:1347;a:1:{i:0;i:1395;}i:1348;a:1:{i:0;i:1396;}i:1349;a:1:{i:0;i:1397;}i:1350;a:1:{i:0;i:1398;}i:1351;a:1:{i:0;i:1399;}i:1352;a:1:{i:0;i:1400;}i:1353;a:1:{i:0;i:1401;}i:1354;a:1:{i:0;i:1402;}i:1355;a:1:{i:0;i:1403;}i:1356;a:1:{i:0;i:1404;}i:1357;a:1:{i:0;i:1405;}i:1358;a:1:{i:0;i:1406;}i:1359;a:1:{i:0;i:1407;}i:1360;a:1:{i:0;i:1408;}i:1361;a:1:{i:0;i:1409;}i:1362;a:1:{i:0;i:1410;}i:1363;a:1:{i:0;i:1411;}i:1364;a:1:{i:0;i:1412;}i:1365;a:1:{i:0;i:1413;}i:1366;a:1:{i:0;i:1414;}i:1415;a:2:{i:0;i:1381;i:1;i:1410;}i:7680;a:1:{i:0;i:7681;}i:7682;a:1:{i:0;i:7683;}i:7684;a:1:{i:0;i:7685;}i:7686;a:1:{i:0;i:7687;}i:7688;a:1:{i:0;i:7689;}i:7690;a:1:{i:0;i:7691;}i:7692;a:1:{i:0;i:7693;}i:7694;a:1:{i:0;i:7695;}i:7696;a:1:{i:0;i:7697;}i:7698;a:1:{i:0;i:7699;}i:7700;a:1:{i:0;i:7701;}i:7702;a:1:{i:0;i:7703;}i:7704;a:1:{i:0;i:7705;}i:7706;a:1:{i:0;i:7707;}i:7708;a:1:{i:0;i:7709;}i:7710;a:1:{i:0;i:7711;}i:7712;a:1:{i:0;i:7713;}i:7714;a:1:{i:0;i:7715;}i:7716;a:1:{i:0;i:7717;}i:7718;a:1:{i:0;i:7719;}i:7720;a:1:{i:0;i:7721;}i:7722;a:1:{i:0;i:7723;}i:7724;a:1:{i:0;i:7725;}i:7726;a:1:{i:0;i:7727;}i:7728;a:1:{i:0;i:7729;}i:7730;a:1:{i:0;i:7731;}i:7732;a:1:{i:0;i:7733;}i:7734;a:1:{i:0;i:7735;}i:7736;a:1:{i:0;i:7737;}i:7738;a:1:{i:0;i:7739;}i:7740;a:1:{i:0;i:7741;}i:7742;a:1:{i:0;i:7743;}i:7744;a:1:{i:0;i:7745;}i:7746;a:1:{i:0;i:7747;}i:7748;a:1:{i:0;i:7749;}i:7750;a:1:{i:0;i:7751;}i:7752;a:1:{i:0;i:7753;}i:7754;a:1:{i:0;i:7755;}i:7756;a:1:{i:0;i:7757;}i:7758;a:1:{i:0;i:7759;}i:7760;a:1:{i:0;i:7761;}i:7762;a:1:{i:0;i:7763;}i:7764;a:1:{i:0;i:7765;}i:7766;a:1:{i:0;i:7767;}i:7768;a:1:{i:0;i:7769;}i:7770;a:1:{i:0;i:7771;}i:7772;a:1:{i:0;i:7773;}i:7774;a:1:{i:0;i:7775;}i:7776;a:1:{i:0;i:7777;}i:7778;a:1:{i:0;i:7779;}i:7780;a:1:{i:0;i:7781;}i:7782;a:1:{i:0;i:7783;}i:7784;a:1:{i:0;i:7785;}i:7786;a:1:{i:0;i:7787;}i:7788;a:1:{i:0;i:7789;}i:7790;a:1:{i:0;i:7791;}i:7792;a:1:{i:0;i:7793;}i:7794;a:1:{i:0;i:7795;}i:7796;a:1:{i:0;i:7797;}i:7798;a:1:{i:0;i:7799;}i:7800;a:1:{i:0;i:7801;}i:7802;a:1:{i:0;i:7803;}i:7804;a:1:{i:0;i:7805;}i:7806;a:1:{i:0;i:7807;}i:7808;a:1:{i:0;i:7809;}i:7810;a:1:{i:0;i:7811;}i:7812;a:1:{i:0;i:7813;}i:7814;a:1:{i:0;i:7815;}i:7816;a:1:{i:0;i:7817;}i:7818;a:1:{i:0;i:7819;}i:7820;a:1:{i:0;i:7821;}i:7822;a:1:{i:0;i:7823;}i:7824;a:1:{i:0;i:7825;}i:7826;a:1:{i:0;i:7827;}i:7828;a:1:{i:0;i:7829;}i:7830;a:2:{i:0;i:104;i:1;i:817;}i:7831;a:2:{i:0;i:116;i:1;i:776;}i:7832;a:2:{i:0;i:119;i:1;i:778;}i:7833;a:2:{i:0;i:121;i:1;i:778;}i:7834;a:2:{i:0;i:97;i:1;i:702;}i:7835;a:1:{i:0;i:7777;}i:7840;a:1:{i:0;i:7841;}i:7842;a:1:{i:0;i:7843;}i:7844;a:1:{i:0;i:7845;}i:7846;a:1:{i:0;i:7847;}i:7848;a:1:{i:0;i:7849;}i:7850;a:1:{i:0;i:7851;}i:7852;a:1:{i:0;i:7853;}i:7854;a:1:{i:0;i:7855;}i:7856;a:1:{i:0;i:7857;}i:7858;a:1:{i:0;i:7859;}i:7860;a:1:{i:0;i:7861;}i:7862;a:1:{i:0;i:7863;}i:7864;a:1:{i:0;i:7865;}i:7866;a:1:{i:0;i:7867;}i:7868;a:1:{i:0;i:7869;}i:7870;a:1:{i:0;i:7871;}i:7872;a:1:{i:0;i:7873;}i:7874;a:1:{i:0;i:7875;}i:7876;a:1:{i:0;i:7877;}i:7878;a:1:{i:0;i:7879;}i:7880;a:1:{i:0;i:7881;}i:7882;a:1:{i:0;i:7883;}i:7884;a:1:{i:0;i:7885;}i:7886;a:1:{i:0;i:7887;}i:7888;a:1:{i:0;i:7889;}i:7890;a:1:{i:0;i:7891;}i:7892;a:1:{i:0;i:7893;}i:7894;a:1:{i:0;i:7895;}i:7896;a:1:{i:0;i:7897;}i:7898;a:1:{i:0;i:7899;}i:7900;a:1:{i:0;i:7901;}i:7902;a:1:{i:0;i:7903;}i:7904;a:1:{i:0;i:7905;}i:7906;a:1:{i:0;i:7907;}i:7908;a:1:{i:0;i:7909;}i:7910;a:1:{i:0;i:7911;}i:7912;a:1:{i:0;i:7913;}i:7914;a:1:{i:0;i:7915;}i:7916;a:1:{i:0;i:7917;}i:7918;a:1:{i:0;i:7919;}i:7920;a:1:{i:0;i:7921;}i:7922;a:1:{i:0;i:7923;}i:7924;a:1:{i:0;i:7925;}i:7926;a:1:{i:0;i:7927;}i:7928;a:1:{i:0;i:7929;}i:7944;a:1:{i:0;i:7936;}i:7945;a:1:{i:0;i:7937;}i:7946;a:1:{i:0;i:7938;}i:7947;a:1:{i:0;i:7939;}i:7948;a:1:{i:0;i:7940;}i:7949;a:1:{i:0;i:7941;}i:7950;a:1:{i:0;i:7942;}i:7951;a:1:{i:0;i:7943;}i:7960;a:1:{i:0;i:7952;}i:7961;a:1:{i:0;i:7953;}i:7962;a:1:{i:0;i:7954;}i:7963;a:1:{i:0;i:7955;}i:7964;a:1:{i:0;i:7956;}i:7965;a:1:{i:0;i:7957;}i:7976;a:1:{i:0;i:7968;}i:7977;a:1:{i:0;i:7969;}i:7978;a:1:{i:0;i:7970;}i:7979;a:1:{i:0;i:7971;}i:7980;a:1:{i:0;i:7972;}i:7981;a:1:{i:0;i:7973;}i:7982;a:1:{i:0;i:7974;}i:7983;a:1:{i:0;i:7975;}i:7992;a:1:{i:0;i:7984;}i:7993;a:1:{i:0;i:7985;}i:7994;a:1:{i:0;i:7986;}i:7995;a:1:{i:0;i:7987;}i:7996;a:1:{i:0;i:7988;}i:7997;a:1:{i:0;i:7989;}i:7998;a:1:{i:0;i:7990;}i:7999;a:1:{i:0;i:7991;}i:8008;a:1:{i:0;i:8000;}i:8009;a:1:{i:0;i:8001;}i:8010;a:1:{i:0;i:8002;}i:8011;a:1:{i:0;i:8003;}i:8012;a:1:{i:0;i:8004;}i:8013;a:1:{i:0;i:8005;}i:8016;a:2:{i:0;i:965;i:1;i:787;}i:8018;a:3:{i:0;i:965;i:1;i:787;i:2;i:768;}i:8020;a:3:{i:0;i:965;i:1;i:787;i:2;i:769;}i:8022;a:3:{i:0;i:965;i:1;i:787;i:2;i:834;}i:8025;a:1:{i:0;i:8017;}i:8027;a:1:{i:0;i:8019;}i:8029;a:1:{i:0;i:8021;}i:8031;a:1:{i:0;i:8023;}i:8040;a:1:{i:0;i:8032;}i:8041;a:1:{i:0;i:8033;}i:8042;a:1:{i:0;i:8034;}i:8043;a:1:{i:0;i:8035;}i:8044;a:1:{i:0;i:8036;}i:8045;a:1:{i:0;i:8037;}i:8046;a:1:{i:0;i:8038;}i:8047;a:1:{i:0;i:8039;}i:8064;a:2:{i:0;i:7936;i:1;i:953;}i:8065;a:2:{i:0;i:7937;i:1;i:953;}i:8066;a:2:{i:0;i:7938;i:1;i:953;}i:8067;a:2:{i:0;i:7939;i:1;i:953;}i:8068;a:2:{i:0;i:7940;i:1;i:953;}i:8069;a:2:{i:0;i:7941;i:1;i:953;}i:8070;a:2:{i:0;i:7942;i:1;i:953;}i:8071;a:2:{i:0;i:7943;i:1;i:953;}i:8072;a:2:{i:0;i:7936;i:1;i:953;}i:8073;a:2:{i:0;i:7937;i:1;i:953;}i:8074;a:2:{i:0;i:7938;i:1;i:953;}i:8075;a:2:{i:0;i:7939;i:1;i:953;}i:8076;a:2:{i:0;i:7940;i:1;i:953;}i:8077;a:2:{i:0;i:7941;i:1;i:953;}i:8078;a:2:{i:0;i:7942;i:1;i:953;}i:8079;a:2:{i:0;i:7943;i:1;i:953;}i:8080;a:2:{i:0;i:7968;i:1;i:953;}i:8081;a:2:{i:0;i:7969;i:1;i:953;}i:8082;a:2:{i:0;i:7970;i:1;i:953;}i:8083;a:2:{i:0;i:7971;i:1;i:953;}i:8084;a:2:{i:0;i:7972;i:1;i:953;}i:8085;a:2:{i:0;i:7973;i:1;i:953;}i:8086;a:2:{i:0;i:7974;i:1;i:953;}i:8087;a:2:{i:0;i:7975;i:1;i:953;}i:8088;a:2:{i:0;i:7968;i:1;i:953;}i:8089;a:2:{i:0;i:7969;i:1;i:953;}i:8090;a:2:{i:0;i:7970;i:1;i:953;}i:8091;a:2:{i:0;i:7971;i:1;i:953;}i:8092;a:2:{i:0;i:7972;i:1;i:953;}i:8093;a:2:{i:0;i:7973;i:1;i:953;}i:8094;a:2:{i:0;i:7974;i:1;i:953;}i:8095;a:2:{i:0;i:7975;i:1;i:953;}i:8096;a:2:{i:0;i:8032;i:1;i:953;}i:8097;a:2:{i:0;i:8033;i:1;i:953;}i:8098;a:2:{i:0;i:8034;i:1;i:953;}i:8099;a:2:{i:0;i:8035;i:1;i:953;}i:8100;a:2:{i:0;i:8036;i:1;i:953;}i:8101;a:2:{i:0;i:8037;i:1;i:953;}i:8102;a:2:{i:0;i:8038;i:1;i:953;}i:8103;a:2:{i:0;i:8039;i:1;i:953;}i:8104;a:2:{i:0;i:8032;i:1;i:953;}i:8105;a:2:{i:0;i:8033;i:1;i:953;}i:8106;a:2:{i:0;i:8034;i:1;i:953;}i:8107;a:2:{i:0;i:8035;i:1;i:953;}i:8108;a:2:{i:0;i:8036;i:1;i:953;}i:8109;a:2:{i:0;i:8037;i:1;i:953;}i:8110;a:2:{i:0;i:8038;i:1;i:953;}i:8111;a:2:{i:0;i:8039;i:1;i:953;}i:8114;a:2:{i:0;i:8048;i:1;i:953;}i:8115;a:2:{i:0;i:945;i:1;i:953;}i:8116;a:2:{i:0;i:940;i:1;i:953;}i:8118;a:2:{i:0;i:945;i:1;i:834;}i:8119;a:3:{i:0;i:945;i:1;i:834;i:2;i:953;}i:8120;a:1:{i:0;i:8112;}i:8121;a:1:{i:0;i:8113;}i:8122;a:1:{i:0;i:8048;}i:8123;a:1:{i:0;i:8049;}i:8124;a:2:{i:0;i:945;i:1;i:953;}i:8126;a:1:{i:0;i:953;}i:8130;a:2:{i:0;i:8052;i:1;i:953;}i:8131;a:2:{i:0;i:951;i:1;i:953;}i:8132;a:2:{i:0;i:942;i:1;i:953;}i:8134;a:2:{i:0;i:951;i:1;i:834;}i:8135;a:3:{i:0;i:951;i:1;i:834;i:2;i:953;}i:8136;a:1:{i:0;i:8050;}i:8137;a:1:{i:0;i:8051;}i:8138;a:1:{i:0;i:8052;}i:8139;a:1:{i:0;i:8053;}i:8140;a:2:{i:0;i:951;i:1;i:953;}i:8146;a:3:{i:0;i:953;i:1;i:776;i:2;i:768;}i:8147;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:8150;a:2:{i:0;i:953;i:1;i:834;}i:8151;a:3:{i:0;i:953;i:1;i:776;i:2;i:834;}i:8152;a:1:{i:0;i:8144;}i:8153;a:1:{i:0;i:8145;}i:8154;a:1:{i:0;i:8054;}i:8155;a:1:{i:0;i:8055;}i:8162;a:3:{i:0;i:965;i:1;i:776;i:2;i:768;}i:8163;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:8164;a:2:{i:0;i:961;i:1;i:787;}i:8166;a:2:{i:0;i:965;i:1;i:834;}i:8167;a:3:{i:0;i:965;i:1;i:776;i:2;i:834;}i:8168;a:1:{i:0;i:8160;}i:8169;a:1:{i:0;i:8161;}i:8170;a:1:{i:0;i:8058;}i:8171;a:1:{i:0;i:8059;}i:8172;a:1:{i:0;i:8165;}i:8178;a:2:{i:0;i:8060;i:1;i:953;}i:8179;a:2:{i:0;i:969;i:1;i:953;}i:8180;a:2:{i:0;i:974;i:1;i:953;}i:8182;a:2:{i:0;i:969;i:1;i:834;}i:8183;a:3:{i:0;i:969;i:1;i:834;i:2;i:953;}i:8184;a:1:{i:0;i:8056;}i:8185;a:1:{i:0;i:8057;}i:8186;a:1:{i:0;i:8060;}i:8187;a:1:{i:0;i:8061;}i:8188;a:2:{i:0;i:969;i:1;i:953;}i:8360;a:2:{i:0;i:114;i:1;i:115;}i:8450;a:1:{i:0;i:99;}i:8451;a:2:{i:0;i:176;i:1;i:99;}i:8455;a:1:{i:0;i:603;}i:8457;a:2:{i:0;i:176;i:1;i:102;}i:8459;a:1:{i:0;i:104;}i:8460;a:1:{i:0;i:104;}i:8461;a:1:{i:0;i:104;}i:8464;a:1:{i:0;i:105;}i:8465;a:1:{i:0;i:105;}i:8466;a:1:{i:0;i:108;}i:8469;a:1:{i:0;i:110;}i:8470;a:2:{i:0;i:110;i:1;i:111;}i:8473;a:1:{i:0;i:112;}i:8474;a:1:{i:0;i:113;}i:8475;a:1:{i:0;i:114;}i:8476;a:1:{i:0;i:114;}i:8477;a:1:{i:0;i:114;}i:8480;a:2:{i:0;i:115;i:1;i:109;}i:8481;a:3:{i:0;i:116;i:1;i:101;i:2;i:108;}i:8482;a:2:{i:0;i:116;i:1;i:109;}i:8484;a:1:{i:0;i:122;}i:8486;a:1:{i:0;i:969;}i:8488;a:1:{i:0;i:122;}i:8490;a:1:{i:0;i:107;}i:8491;a:1:{i:0;i:229;}i:8492;a:1:{i:0;i:98;}i:8493;a:1:{i:0;i:99;}i:8496;a:1:{i:0;i:101;}i:8497;a:1:{i:0;i:102;}i:8499;a:1:{i:0;i:109;}i:8510;a:1:{i:0;i:947;}i:8511;a:1:{i:0;i:960;}i:8517;a:1:{i:0;i:100;}i:8544;a:1:{i:0;i:8560;}i:8545;a:1:{i:0;i:8561;}i:8546;a:1:{i:0;i:8562;}i:8547;a:1:{i:0;i:8563;}i:8548;a:1:{i:0;i:8564;}i:8549;a:1:{i:0;i:8565;}i:8550;a:1:{i:0;i:8566;}i:8551;a:1:{i:0;i:8567;}i:8552;a:1:{i:0;i:8568;}i:8553;a:1:{i:0;i:8569;}i:8554;a:1:{i:0;i:8570;}i:8555;a:1:{i:0;i:8571;}i:8556;a:1:{i:0;i:8572;}i:8557;a:1:{i:0;i:8573;}i:8558;a:1:{i:0;i:8574;}i:8559;a:1:{i:0;i:8575;}i:9398;a:1:{i:0;i:9424;}i:9399;a:1:{i:0;i:9425;}i:9400;a:1:{i:0;i:9426;}i:9401;a:1:{i:0;i:9427;}i:9402;a:1:{i:0;i:9428;}i:9403;a:1:{i:0;i:9429;}i:9404;a:1:{i:0;i:9430;}i:9405;a:1:{i:0;i:9431;}i:9406;a:1:{i:0;i:9432;}i:9407;a:1:{i:0;i:9433;}i:9408;a:1:{i:0;i:9434;}i:9409;a:1:{i:0;i:9435;}i:9410;a:1:{i:0;i:9436;}i:9411;a:1:{i:0;i:9437;}i:9412;a:1:{i:0;i:9438;}i:9413;a:1:{i:0;i:9439;}i:9414;a:1:{i:0;i:9440;}i:9415;a:1:{i:0;i:9441;}i:9416;a:1:{i:0;i:9442;}i:9417;a:1:{i:0;i:9443;}i:9418;a:1:{i:0;i:9444;}i:9419;a:1:{i:0;i:9445;}i:9420;a:1:{i:0;i:9446;}i:9421;a:1:{i:0;i:9447;}i:9422;a:1:{i:0;i:9448;}i:9423;a:1:{i:0;i:9449;}i:13169;a:3:{i:0;i:104;i:1;i:112;i:2;i:97;}i:13171;a:2:{i:0;i:97;i:1;i:117;}i:13173;a:2:{i:0;i:111;i:1;i:118;}i:13184;a:2:{i:0;i:112;i:1;i:97;}i:13185;a:2:{i:0;i:110;i:1;i:97;}i:13186;a:2:{i:0;i:956;i:1;i:97;}i:13187;a:2:{i:0;i:109;i:1;i:97;}i:13188;a:2:{i:0;i:107;i:1;i:97;}i:13189;a:2:{i:0;i:107;i:1;i:98;}i:13190;a:2:{i:0;i:109;i:1;i:98;}i:13191;a:2:{i:0;i:103;i:1;i:98;}i:13194;a:2:{i:0;i:112;i:1;i:102;}i:13195;a:2:{i:0;i:110;i:1;i:102;}i:13196;a:2:{i:0;i:956;i:1;i:102;}i:13200;a:2:{i:0;i:104;i:1;i:122;}i:13201;a:3:{i:0;i:107;i:1;i:104;i:2;i:122;}i:13202;a:3:{i:0;i:109;i:1;i:104;i:2;i:122;}i:13203;a:3:{i:0;i:103;i:1;i:104;i:2;i:122;}i:13204;a:3:{i:0;i:116;i:1;i:104;i:2;i:122;}i:13225;a:2:{i:0;i:112;i:1;i:97;}i:13226;a:3:{i:0;i:107;i:1;i:112;i:2;i:97;}i:13227;a:3:{i:0;i:109;i:1;i:112;i:2;i:97;}i:13228;a:3:{i:0;i:103;i:1;i:112;i:2;i:97;}i:13236;a:2:{i:0;i:112;i:1;i:118;}i:13237;a:2:{i:0;i:110;i:1;i:118;}i:13238;a:2:{i:0;i:956;i:1;i:118;}i:13239;a:2:{i:0;i:109;i:1;i:118;}i:13240;a:2:{i:0;i:107;i:1;i:118;}i:13241;a:2:{i:0;i:109;i:1;i:118;}i:13242;a:2:{i:0;i:112;i:1;i:119;}i:13243;a:2:{i:0;i:110;i:1;i:119;}i:13244;a:2:{i:0;i:956;i:1;i:119;}i:13245;a:2:{i:0;i:109;i:1;i:119;}i:13246;a:2:{i:0;i:107;i:1;i:119;}i:13247;a:2:{i:0;i:109;i:1;i:119;}i:13248;a:2:{i:0;i:107;i:1;i:969;}i:13249;a:2:{i:0;i:109;i:1;i:969;}i:13251;a:2:{i:0;i:98;i:1;i:113;}i:13254;a:4:{i:0;i:99;i:1;i:8725;i:2;i:107;i:3;i:103;}i:13255;a:3:{i:0;i:99;i:1;i:111;i:2;i:46;}i:13256;a:2:{i:0;i:100;i:1;i:98;}i:13257;a:2:{i:0;i:103;i:1;i:121;}i:13259;a:2:{i:0;i:104;i:1;i:112;}i:13261;a:2:{i:0;i:107;i:1;i:107;}i:13262;a:2:{i:0;i:107;i:1;i:109;}i:13271;a:2:{i:0;i:112;i:1;i:104;}i:13273;a:3:{i:0;i:112;i:1;i:112;i:2;i:109;}i:13274;a:2:{i:0;i:112;i:1;i:114;}i:13276;a:2:{i:0;i:115;i:1;i:118;}i:13277;a:2:{i:0;i:119;i:1;i:98;}i:64256;a:2:{i:0;i:102;i:1;i:102;}i:64257;a:2:{i:0;i:102;i:1;i:105;}i:64258;a:2:{i:0;i:102;i:1;i:108;}i:64259;a:3:{i:0;i:102;i:1;i:102;i:2;i:105;}i:64260;a:3:{i:0;i:102;i:1;i:102;i:2;i:108;}i:64261;a:2:{i:0;i:115;i:1;i:116;}i:64262;a:2:{i:0;i:115;i:1;i:116;}i:64275;a:2:{i:0;i:1396;i:1;i:1398;}i:64276;a:2:{i:0;i:1396;i:1;i:1381;}i:64277;a:2:{i:0;i:1396;i:1;i:1387;}i:64278;a:2:{i:0;i:1406;i:1;i:1398;}i:64279;a:2:{i:0;i:1396;i:1;i:1389;}i:65313;a:1:{i:0;i:65345;}i:65314;a:1:{i:0;i:65346;}i:65315;a:1:{i:0;i:65347;}i:65316;a:1:{i:0;i:65348;}i:65317;a:1:{i:0;i:65349;}i:65318;a:1:{i:0;i:65350;}i:65319;a:1:{i:0;i:65351;}i:65320;a:1:{i:0;i:65352;}i:65321;a:1:{i:0;i:65353;}i:65322;a:1:{i:0;i:65354;}i:65323;a:1:{i:0;i:65355;}i:65324;a:1:{i:0;i:65356;}i:65325;a:1:{i:0;i:65357;}i:65326;a:1:{i:0;i:65358;}i:65327;a:1:{i:0;i:65359;}i:65328;a:1:{i:0;i:65360;}i:65329;a:1:{i:0;i:65361;}i:65330;a:1:{i:0;i:65362;}i:65331;a:1:{i:0;i:65363;}i:65332;a:1:{i:0;i:65364;}i:65333;a:1:{i:0;i:65365;}i:65334;a:1:{i:0;i:65366;}i:65335;a:1:{i:0;i:65367;}i:65336;a:1:{i:0;i:65368;}i:65337;a:1:{i:0;i:65369;}i:65338;a:1:{i:0;i:65370;}i:66560;a:1:{i:0;i:66600;}i:66561;a:1:{i:0;i:66601;}i:66562;a:1:{i:0;i:66602;}i:66563;a:1:{i:0;i:66603;}i:66564;a:1:{i:0;i:66604;}i:66565;a:1:{i:0;i:66605;}i:66566;a:1:{i:0;i:66606;}i:66567;a:1:{i:0;i:66607;}i:66568;a:1:{i:0;i:66608;}i:66569;a:1:{i:0;i:66609;}i:66570;a:1:{i:0;i:66610;}i:66571;a:1:{i:0;i:66611;}i:66572;a:1:{i:0;i:66612;}i:66573;a:1:{i:0;i:66613;}i:66574;a:1:{i:0;i:66614;}i:66575;a:1:{i:0;i:66615;}i:66576;a:1:{i:0;i:66616;}i:66577;a:1:{i:0;i:66617;}i:66578;a:1:{i:0;i:66618;}i:66579;a:1:{i:0;i:66619;}i:66580;a:1:{i:0;i:66620;}i:66581;a:1:{i:0;i:66621;}i:66582;a:1:{i:0;i:66622;}i:66583;a:1:{i:0;i:66623;}i:66584;a:1:{i:0;i:66624;}i:66585;a:1:{i:0;i:66625;}i:66586;a:1:{i:0;i:66626;}i:66587;a:1:{i:0;i:66627;}i:66588;a:1:{i:0;i:66628;}i:66589;a:1:{i:0;i:66629;}i:66590;a:1:{i:0;i:66630;}i:66591;a:1:{i:0;i:66631;}i:66592;a:1:{i:0;i:66632;}i:66593;a:1:{i:0;i:66633;}i:66594;a:1:{i:0;i:66634;}i:66595;a:1:{i:0;i:66635;}i:66596;a:1:{i:0;i:66636;}i:66597;a:1:{i:0;i:66637;}i:119808;a:1:{i:0;i:97;}i:119809;a:1:{i:0;i:98;}i:119810;a:1:{i:0;i:99;}i:119811;a:1:{i:0;i:100;}i:119812;a:1:{i:0;i:101;}i:119813;a:1:{i:0;i:102;}i:119814;a:1:{i:0;i:103;}i:119815;a:1:{i:0;i:104;}i:119816;a:1:{i:0;i:105;}i:119817;a:1:{i:0;i:106;}i:119818;a:1:{i:0;i:107;}i:119819;a:1:{i:0;i:108;}i:119820;a:1:{i:0;i:109;}i:119821;a:1:{i:0;i:110;}i:119822;a:1:{i:0;i:111;}i:119823;a:1:{i:0;i:112;}i:119824;a:1:{i:0;i:113;}i:119825;a:1:{i:0;i:114;}i:119826;a:1:{i:0;i:115;}i:119827;a:1:{i:0;i:116;}i:119828;a:1:{i:0;i:117;}i:119829;a:1:{i:0;i:118;}i:119830;a:1:{i:0;i:119;}i:119831;a:1:{i:0;i:120;}i:119832;a:1:{i:0;i:121;}i:119833;a:1:{i:0;i:122;}i:119860;a:1:{i:0;i:97;}i:119861;a:1:{i:0;i:98;}i:119862;a:1:{i:0;i:99;}i:119863;a:1:{i:0;i:100;}i:119864;a:1:{i:0;i:101;}i:119865;a:1:{i:0;i:102;}i:119866;a:1:{i:0;i:103;}i:119867;a:1:{i:0;i:104;}i:119868;a:1:{i:0;i:105;}i:119869;a:1:{i:0;i:106;}i:119870;a:1:{i:0;i:107;}i:119871;a:1:{i:0;i:108;}i:119872;a:1:{i:0;i:109;}i:119873;a:1:{i:0;i:110;}i:119874;a:1:{i:0;i:111;}i:119875;a:1:{i:0;i:112;}i:119876;a:1:{i:0;i:113;}i:119877;a:1:{i:0;i:114;}i:119878;a:1:{i:0;i:115;}i:119879;a:1:{i:0;i:116;}i:119880;a:1:{i:0;i:117;}i:119881;a:1:{i:0;i:118;}i:119882;a:1:{i:0;i:119;}i:119883;a:1:{i:0;i:120;}i:119884;a:1:{i:0;i:121;}i:119885;a:1:{i:0;i:122;}i:119912;a:1:{i:0;i:97;}i:119913;a:1:{i:0;i:98;}i:119914;a:1:{i:0;i:99;}i:119915;a:1:{i:0;i:100;}i:119916;a:1:{i:0;i:101;}i:119917;a:1:{i:0;i:102;}i:119918;a:1:{i:0;i:103;}i:119919;a:1:{i:0;i:104;}i:119920;a:1:{i:0;i:105;}i:119921;a:1:{i:0;i:106;}i:119922;a:1:{i:0;i:107;}i:119923;a:1:{i:0;i:108;}i:119924;a:1:{i:0;i:109;}i:119925;a:1:{i:0;i:110;}i:119926;a:1:{i:0;i:111;}i:119927;a:1:{i:0;i:112;}i:119928;a:1:{i:0;i:113;}i:119929;a:1:{i:0;i:114;}i:119930;a:1:{i:0;i:115;}i:119931;a:1:{i:0;i:116;}i:119932;a:1:{i:0;i:117;}i:119933;a:1:{i:0;i:118;}i:119934;a:1:{i:0;i:119;}i:119935;a:1:{i:0;i:120;}i:119936;a:1:{i:0;i:121;}i:119937;a:1:{i:0;i:122;}i:119964;a:1:{i:0;i:97;}i:119966;a:1:{i:0;i:99;}i:119967;a:1:{i:0;i:100;}i:119970;a:1:{i:0;i:103;}i:119973;a:1:{i:0;i:106;}i:119974;a:1:{i:0;i:107;}i:119977;a:1:{i:0;i:110;}i:119978;a:1:{i:0;i:111;}i:119979;a:1:{i:0;i:112;}i:119980;a:1:{i:0;i:113;}i:119982;a:1:{i:0;i:115;}i:119983;a:1:{i:0;i:116;}i:119984;a:1:{i:0;i:117;}i:119985;a:1:{i:0;i:118;}i:119986;a:1:{i:0;i:119;}i:119987;a:1:{i:0;i:120;}i:119988;a:1:{i:0;i:121;}i:119989;a:1:{i:0;i:122;}i:120016;a:1:{i:0;i:97;}i:120017;a:1:{i:0;i:98;}i:120018;a:1:{i:0;i:99;}i:120019;a:1:{i:0;i:100;}i:120020;a:1:{i:0;i:101;}i:120021;a:1:{i:0;i:102;}i:120022;a:1:{i:0;i:103;}i:120023;a:1:{i:0;i:104;}i:120024;a:1:{i:0;i:105;}i:120025;a:1:{i:0;i:106;}i:120026;a:1:{i:0;i:107;}i:120027;a:1:{i:0;i:108;}i:120028;a:1:{i:0;i:109;}i:120029;a:1:{i:0;i:110;}i:120030;a:1:{i:0;i:111;}i:120031;a:1:{i:0;i:112;}i:120032;a:1:{i:0;i:113;}i:120033;a:1:{i:0;i:114;}i:120034;a:1:{i:0;i:115;}i:120035;a:1:{i:0;i:116;}i:120036;a:1:{i:0;i:117;}i:120037;a:1:{i:0;i:118;}i:120038;a:1:{i:0;i:119;}i:120039;a:1:{i:0;i:120;}i:120040;a:1:{i:0;i:121;}i:120041;a:1:{i:0;i:122;}i:120068;a:1:{i:0;i:97;}i:120069;a:1:{i:0;i:98;}i:120071;a:1:{i:0;i:100;}i:120072;a:1:{i:0;i:101;}i:120073;a:1:{i:0;i:102;}i:120074;a:1:{i:0;i:103;}i:120077;a:1:{i:0;i:106;}i:120078;a:1:{i:0;i:107;}i:120079;a:1:{i:0;i:108;}i:120080;a:1:{i:0;i:109;}i:120081;a:1:{i:0;i:110;}i:120082;a:1:{i:0;i:111;}i:120083;a:1:{i:0;i:112;}i:120084;a:1:{i:0;i:113;}i:120086;a:1:{i:0;i:115;}i:120087;a:1:{i:0;i:116;}i:120088;a:1:{i:0;i:117;}i:120089;a:1:{i:0;i:118;}i:120090;a:1:{i:0;i:119;}i:120091;a:1:{i:0;i:120;}i:120092;a:1:{i:0;i:121;}i:120120;a:1:{i:0;i:97;}i:120121;a:1:{i:0;i:98;}i:120123;a:1:{i:0;i:100;}i:120124;a:1:{i:0;i:101;}i:120125;a:1:{i:0;i:102;}i:120126;a:1:{i:0;i:103;}i:120128;a:1:{i:0;i:105;}i:120129;a:1:{i:0;i:106;}i:120130;a:1:{i:0;i:107;}i:120131;a:1:{i:0;i:108;}i:120132;a:1:{i:0;i:109;}i:120134;a:1:{i:0;i:111;}i:120138;a:1:{i:0;i:115;}i:120139;a:1:{i:0;i:116;}i:120140;a:1:{i:0;i:117;}i:120141;a:1:{i:0;i:118;}i:120142;a:1:{i:0;i:119;}i:120143;a:1:{i:0;i:120;}i:120144;a:1:{i:0;i:121;}i:120172;a:1:{i:0;i:97;}i:120173;a:1:{i:0;i:98;}i:120174;a:1:{i:0;i:99;}i:120175;a:1:{i:0;i:100;}i:120176;a:1:{i:0;i:101;}i:120177;a:1:{i:0;i:102;}i:120178;a:1:{i:0;i:103;}i:120179;a:1:{i:0;i:104;}i:120180;a:1:{i:0;i:105;}i:120181;a:1:{i:0;i:106;}i:120182;a:1:{i:0;i:107;}i:120183;a:1:{i:0;i:108;}i:120184;a:1:{i:0;i:109;}i:120185;a:1:{i:0;i:110;}i:120186;a:1:{i:0;i:111;}i:120187;a:1:{i:0;i:112;}i:120188;a:1:{i:0;i:113;}i:120189;a:1:{i:0;i:114;}i:120190;a:1:{i:0;i:115;}i:120191;a:1:{i:0;i:116;}i:120192;a:1:{i:0;i:117;}i:120193;a:1:{i:0;i:118;}i:120194;a:1:{i:0;i:119;}i:120195;a:1:{i:0;i:120;}i:120196;a:1:{i:0;i:121;}i:120197;a:1:{i:0;i:122;}i:120224;a:1:{i:0;i:97;}i:120225;a:1:{i:0;i:98;}i:120226;a:1:{i:0;i:99;}i:120227;a:1:{i:0;i:100;}i:120228;a:1:{i:0;i:101;}i:120229;a:1:{i:0;i:102;}i:120230;a:1:{i:0;i:103;}i:120231;a:1:{i:0;i:104;}i:120232;a:1:{i:0;i:105;}i:120233;a:1:{i:0;i:106;}i:120234;a:1:{i:0;i:107;}i:120235;a:1:{i:0;i:108;}i:120236;a:1:{i:0;i:109;}i:120237;a:1:{i:0;i:110;}i:120238;a:1:{i:0;i:111;}i:120239;a:1:{i:0;i:112;}i:120240;a:1:{i:0;i:113;}i:120241;a:1:{i:0;i:114;}i:120242;a:1:{i:0;i:115;}i:120243;a:1:{i:0;i:116;}i:120244;a:1:{i:0;i:117;}i:120245;a:1:{i:0;i:118;}i:120246;a:1:{i:0;i:119;}i:120247;a:1:{i:0;i:120;}i:120248;a:1:{i:0;i:121;}i:120249;a:1:{i:0;i:122;}i:120276;a:1:{i:0;i:97;}i:120277;a:1:{i:0;i:98;}i:120278;a:1:{i:0;i:99;}i:120279;a:1:{i:0;i:100;}i:120280;a:1:{i:0;i:101;}i:120281;a:1:{i:0;i:102;}i:120282;a:1:{i:0;i:103;}i:120283;a:1:{i:0;i:104;}i:120284;a:1:{i:0;i:105;}i:120285;a:1:{i:0;i:106;}i:120286;a:1:{i:0;i:107;}i:120287;a:1:{i:0;i:108;}i:120288;a:1:{i:0;i:109;}i:120289;a:1:{i:0;i:110;}i:120290;a:1:{i:0;i:111;}i:120291;a:1:{i:0;i:112;}i:120292;a:1:{i:0;i:113;}i:120293;a:1:{i:0;i:114;}i:120294;a:1:{i:0;i:115;}i:120295;a:1:{i:0;i:116;}i:120296;a:1:{i:0;i:117;}i:120297;a:1:{i:0;i:118;}i:120298;a:1:{i:0;i:119;}i:120299;a:1:{i:0;i:120;}i:120300;a:1:{i:0;i:121;}i:120301;a:1:{i:0;i:122;}i:120328;a:1:{i:0;i:97;}i:120329;a:1:{i:0;i:98;}i:120330;a:1:{i:0;i:99;}i:120331;a:1:{i:0;i:100;}i:120332;a:1:{i:0;i:101;}i:120333;a:1:{i:0;i:102;}i:120334;a:1:{i:0;i:103;}i:120335;a:1:{i:0;i:104;}i:120336;a:1:{i:0;i:105;}i:120337;a:1:{i:0;i:106;}i:120338;a:1:{i:0;i:107;}i:120339;a:1:{i:0;i:108;}i:120340;a:1:{i:0;i:109;}i:120341;a:1:{i:0;i:110;}i:120342;a:1:{i:0;i:111;}i:120343;a:1:{i:0;i:112;}i:120344;a:1:{i:0;i:113;}i:120345;a:1:{i:0;i:114;}i:120346;a:1:{i:0;i:115;}i:120347;a:1:{i:0;i:116;}i:120348;a:1:{i:0;i:117;}i:120349;a:1:{i:0;i:118;}i:120350;a:1:{i:0;i:119;}i:120351;a:1:{i:0;i:120;}i:120352;a:1:{i:0;i:121;}i:120353;a:1:{i:0;i:122;}i:120380;a:1:{i:0;i:97;}i:120381;a:1:{i:0;i:98;}i:120382;a:1:{i:0;i:99;}i:120383;a:1:{i:0;i:100;}i:120384;a:1:{i:0;i:101;}i:120385;a:1:{i:0;i:102;}i:120386;a:1:{i:0;i:103;}i:120387;a:1:{i:0;i:104;}i:120388;a:1:{i:0;i:105;}i:120389;a:1:{i:0;i:106;}i:120390;a:1:{i:0;i:107;}i:120391;a:1:{i:0;i:108;}i:120392;a:1:{i:0;i:109;}i:120393;a:1:{i:0;i:110;}i:120394;a:1:{i:0;i:111;}i:120395;a:1:{i:0;i:112;}i:120396;a:1:{i:0;i:113;}i:120397;a:1:{i:0;i:114;}i:120398;a:1:{i:0;i:115;}i:120399;a:1:{i:0;i:116;}i:120400;a:1:{i:0;i:117;}i:120401;a:1:{i:0;i:118;}i:120402;a:1:{i:0;i:119;}i:120403;a:1:{i:0;i:120;}i:120404;a:1:{i:0;i:121;}i:120405;a:1:{i:0;i:122;}i:120432;a:1:{i:0;i:97;}i:120433;a:1:{i:0;i:98;}i:120434;a:1:{i:0;i:99;}i:120435;a:1:{i:0;i:100;}i:120436;a:1:{i:0;i:101;}i:120437;a:1:{i:0;i:102;}i:120438;a:1:{i:0;i:103;}i:120439;a:1:{i:0;i:104;}i:120440;a:1:{i:0;i:105;}i:120441;a:1:{i:0;i:106;}i:120442;a:1:{i:0;i:107;}i:120443;a:1:{i:0;i:108;}i:120444;a:1:{i:0;i:109;}i:120445;a:1:{i:0;i:110;}i:120446;a:1:{i:0;i:111;}i:120447;a:1:{i:0;i:112;}i:120448;a:1:{i:0;i:113;}i:120449;a:1:{i:0;i:114;}i:120450;a:1:{i:0;i:115;}i:120451;a:1:{i:0;i:116;}i:120452;a:1:{i:0;i:117;}i:120453;a:1:{i:0;i:118;}i:120454;a:1:{i:0;i:119;}i:120455;a:1:{i:0;i:120;}i:120456;a:1:{i:0;i:121;}i:120457;a:1:{i:0;i:122;}i:120488;a:1:{i:0;i:945;}i:120489;a:1:{i:0;i:946;}i:120490;a:1:{i:0;i:947;}i:120491;a:1:{i:0;i:948;}i:120492;a:1:{i:0;i:949;}i:120493;a:1:{i:0;i:950;}i:120494;a:1:{i:0;i:951;}i:120495;a:1:{i:0;i:952;}i:120496;a:1:{i:0;i:953;}i:120497;a:1:{i:0;i:954;}i:120498;a:1:{i:0;i:955;}i:120499;a:1:{i:0;i:956;}i:120500;a:1:{i:0;i:957;}i:120501;a:1:{i:0;i:958;}i:120502;a:1:{i:0;i:959;}i:120503;a:1:{i:0;i:960;}i:120504;a:1:{i:0;i:961;}i:120505;a:1:{i:0;i:952;}i:120506;a:1:{i:0;i:963;}i:120507;a:1:{i:0;i:964;}i:120508;a:1:{i:0;i:965;}i:120509;a:1:{i:0;i:966;}i:120510;a:1:{i:0;i:967;}i:120511;a:1:{i:0;i:968;}i:120512;a:1:{i:0;i:969;}i:120531;a:1:{i:0;i:963;}i:120546;a:1:{i:0;i:945;}i:120547;a:1:{i:0;i:946;}i:120548;a:1:{i:0;i:947;}i:120549;a:1:{i:0;i:948;}i:120550;a:1:{i:0;i:949;}i:120551;a:1:{i:0;i:950;}i:120552;a:1:{i:0;i:951;}i:120553;a:1:{i:0;i:952;}i:120554;a:1:{i:0;i:953;}i:120555;a:1:{i:0;i:954;}i:120556;a:1:{i:0;i:955;}i:120557;a:1:{i:0;i:956;}i:120558;a:1:{i:0;i:957;}i:120559;a:1:{i:0;i:958;}i:120560;a:1:{i:0;i:959;}i:120561;a:1:{i:0;i:960;}i:120562;a:1:{i:0;i:961;}i:120563;a:1:{i:0;i:952;}i:120564;a:1:{i:0;i:963;}i:120565;a:1:{i:0;i:964;}i:120566;a:1:{i:0;i:965;}i:120567;a:1:{i:0;i:966;}i:120568;a:1:{i:0;i:967;}i:120569;a:1:{i:0;i:968;}i:120570;a:1:{i:0;i:969;}i:120589;a:1:{i:0;i:963;}i:120604;a:1:{i:0;i:945;}i:120605;a:1:{i:0;i:946;}i:120606;a:1:{i:0;i:947;}i:120607;a:1:{i:0;i:948;}i:120608;a:1:{i:0;i:949;}i:120609;a:1:{i:0;i:950;}i:120610;a:1:{i:0;i:951;}i:120611;a:1:{i:0;i:952;}i:120612;a:1:{i:0;i:953;}i:120613;a:1:{i:0;i:954;}i:120614;a:1:{i:0;i:955;}i:120615;a:1:{i:0;i:956;}i:120616;a:1:{i:0;i:957;}i:120617;a:1:{i:0;i:958;}i:120618;a:1:{i:0;i:959;}i:120619;a:1:{i:0;i:960;}i:120620;a:1:{i:0;i:961;}i:120621;a:1:{i:0;i:952;}i:120622;a:1:{i:0;i:963;}i:120623;a:1:{i:0;i:964;}i:120624;a:1:{i:0;i:965;}i:120625;a:1:{i:0;i:966;}i:120626;a:1:{i:0;i:967;}i:120627;a:1:{i:0;i:968;}i:120628;a:1:{i:0;i:969;}i:120647;a:1:{i:0;i:963;}i:120662;a:1:{i:0;i:945;}i:120663;a:1:{i:0;i:946;}i:120664;a:1:{i:0;i:947;}i:120665;a:1:{i:0;i:948;}i:120666;a:1:{i:0;i:949;}i:120667;a:1:{i:0;i:950;}i:120668;a:1:{i:0;i:951;}i:120669;a:1:{i:0;i:952;}i:120670;a:1:{i:0;i:953;}i:120671;a:1:{i:0;i:954;}i:120672;a:1:{i:0;i:955;}i:120673;a:1:{i:0;i:956;}i:120674;a:1:{i:0;i:957;}i:120675;a:1:{i:0;i:958;}i:120676;a:1:{i:0;i:959;}i:120677;a:1:{i:0;i:960;}i:120678;a:1:{i:0;i:961;}i:120679;a:1:{i:0;i:952;}i:120680;a:1:{i:0;i:963;}i:120681;a:1:{i:0;i:964;}i:120682;a:1:{i:0;i:965;}i:120683;a:1:{i:0;i:966;}i:120684;a:1:{i:0;i:967;}i:120685;a:1:{i:0;i:968;}i:120686;a:1:{i:0;i:969;}i:120705;a:1:{i:0;i:963;}i:120720;a:1:{i:0;i:945;}i:120721;a:1:{i:0;i:946;}i:120722;a:1:{i:0;i:947;}i:120723;a:1:{i:0;i:948;}i:120724;a:1:{i:0;i:949;}i:120725;a:1:{i:0;i:950;}i:120726;a:1:{i:0;i:951;}i:120727;a:1:{i:0;i:952;}i:120728;a:1:{i:0;i:953;}i:120729;a:1:{i:0;i:954;}i:120730;a:1:{i:0;i:955;}i:120731;a:1:{i:0;i:956;}i:120732;a:1:{i:0;i:957;}i:120733;a:1:{i:0;i:958;}i:120734;a:1:{i:0;i:959;}i:120735;a:1:{i:0;i:960;}i:120736;a:1:{i:0;i:961;}i:120737;a:1:{i:0;i:952;}i:120738;a:1:{i:0;i:963;}i:120739;a:1:{i:0;i:964;}i:120740;a:1:{i:0;i:965;}i:120741;a:1:{i:0;i:966;}i:120742;a:1:{i:0;i:967;}i:120743;a:1:{i:0;i:968;}i:120744;a:1:{i:0;i:969;}i:120763;a:1:{i:0;i:963;}i:1017;a:1:{i:0;i:963;}i:7468;a:1:{i:0;i:97;}i:7469;a:1:{i:0;i:230;}i:7470;a:1:{i:0;i:98;}i:7472;a:1:{i:0;i:100;}i:7473;a:1:{i:0;i:101;}i:7474;a:1:{i:0;i:477;}i:7475;a:1:{i:0;i:103;}i:7476;a:1:{i:0;i:104;}i:7477;a:1:{i:0;i:105;}i:7478;a:1:{i:0;i:106;}i:7479;a:1:{i:0;i:107;}i:7480;a:1:{i:0;i:108;}i:7481;a:1:{i:0;i:109;}i:7482;a:1:{i:0;i:110;}i:7484;a:1:{i:0;i:111;}i:7485;a:1:{i:0;i:547;}i:7486;a:1:{i:0;i:112;}i:7487;a:1:{i:0;i:114;}i:7488;a:1:{i:0;i:116;}i:7489;a:1:{i:0;i:117;}i:7490;a:1:{i:0;i:119;}i:8507;a:3:{i:0;i:102;i:1;i:97;i:2;i:120;}i:12880;a:3:{i:0;i:112;i:1;i:116;i:2;i:101;}i:13004;a:2:{i:0;i:104;i:1;i:103;}i:13006;a:2:{i:0;i:101;i:1;i:118;}i:13007;a:3:{i:0;i:108;i:1;i:116;i:2;i:100;}i:13178;a:2:{i:0;i:105;i:1;i:117;}i:13278;a:3:{i:0;i:118;i:1;i:8725;i:2;i:109;}i:13279;a:3:{i:0;i:97;i:1;i:8725;i:2;i:109;}}s:12:"norm_combcls";a:341:{i:820;i:1;i:821;i:1;i:822;i:1;i:823;i:1;i:824;i:1;i:2364;i:7;i:2492;i:7;i:2620;i:7;i:2748;i:7;i:2876;i:7;i:3260;i:7;i:4151;i:7;i:12441;i:8;i:12442;i:8;i:2381;i:9;i:2509;i:9;i:2637;i:9;i:2765;i:9;i:2893;i:9;i:3021;i:9;i:3149;i:9;i:3277;i:9;i:3405;i:9;i:3530;i:9;i:3642;i:9;i:3972;i:9;i:4153;i:9;i:5908;i:9;i:5940;i:9;i:6098;i:9;i:1456;i:10;i:1457;i:11;i:1458;i:12;i:1459;i:13;i:1460;i:14;i:1461;i:15;i:1462;i:16;i:1463;i:17;i:1464;i:18;i:1465;i:19;i:1467;i:20;i:1468;i:21;i:1469;i:22;i:1471;i:23;i:1473;i:24;i:1474;i:25;i:64286;i:26;i:1611;i:27;i:1612;i:28;i:1613;i:29;i:1614;i:30;i:1615;i:31;i:1616;i:32;i:1617;i:33;i:1618;i:34;i:1648;i:35;i:1809;i:36;i:3157;i:84;i:3158;i:91;i:3640;i:103;i:3641;i:103;i:3656;i:107;i:3657;i:107;i:3658;i:107;i:3659;i:107;i:3768;i:118;i:3769;i:118;i:3784;i:122;i:3785;i:122;i:3786;i:122;i:3787;i:122;i:3953;i:129;i:3954;i:130;i:3962;i:130;i:3963;i:130;i:3964;i:130;i:3965;i:130;i:3968;i:130;i:3956;i:132;i:801;i:202;i:802;i:202;i:807;i:202;i:808;i:202;i:795;i:216;i:3897;i:216;i:119141;i:216;i:119142;i:216;i:119150;i:216;i:119151;i:216;i:119152;i:216;i:119153;i:216;i:119154;i:216;i:12330;i:218;i:790;i:220;i:791;i:220;i:792;i:220;i:793;i:220;i:796;i:220;i:797;i:220;i:798;i:220;i:799;i:220;i:800;i:220;i:803;i:220;i:804;i:220;i:805;i:220;i:806;i:220;i:809;i:220;i:810;i:220;i:811;i:220;i:812;i:220;i:813;i:220;i:814;i:220;i:815;i:220;i:816;i:220;i:817;i:220;i:818;i:220;i:819;i:220;i:825;i:220;i:826;i:220;i:827;i:220;i:828;i:220;i:839;i:220;i:840;i:220;i:841;i:220;i:845;i:220;i:846;i:220;i:851;i:220;i:852;i:220;i:853;i:220;i:854;i:220;i:1425;i:220;i:1430;i:220;i:1435;i:220;i:1443;i:220;i:1444;i:220;i:1445;i:220;i:1446;i:220;i:1447;i:220;i:1450;i:220;i:1621;i:220;i:1622;i:220;i:1763;i:220;i:1770;i:220;i:1773;i:220;i:1841;i:220;i:1844;i:220;i:1847;i:220;i:1848;i:220;i:1849;i:220;i:1851;i:220;i:1852;i:220;i:1854;i:220;i:1858;i:220;i:1860;i:220;i:1862;i:220;i:1864;i:220;i:2386;i:220;i:3864;i:220;i:3865;i:220;i:3893;i:220;i:3895;i:220;i:4038;i:220;i:6459;i:220;i:8424;i:220;i:119163;i:220;i:119164;i:220;i:119165;i:220;i:119166;i:220;i:119167;i:220;i:119168;i:220;i:119169;i:220;i:119170;i:220;i:119178;i:220;i:119179;i:220;i:1434;i:222;i:1453;i:222;i:6441;i:222;i:12333;i:222;i:12334;i:224;i:12335;i:224;i:119149;i:226;i:1454;i:228;i:6313;i:228;i:12331;i:228;i:768;i:230;i:769;i:230;i:770;i:230;i:771;i:230;i:772;i:230;i:773;i:230;i:774;i:230;i:775;i:230;i:776;i:230;i:777;i:230;i:778;i:230;i:779;i:230;i:780;i:230;i:781;i:230;i:782;i:230;i:783;i:230;i:784;i:230;i:785;i:230;i:786;i:230;i:787;i:230;i:788;i:230;i:829;i:230;i:830;i:230;i:831;i:230;i:832;i:230;i:833;i:230;i:834;i:230;i:835;i:230;i:836;i:230;i:838;i:230;i:842;i:230;i:843;i:230;i:844;i:230;i:848;i:230;i:849;i:230;i:850;i:230;i:855;i:230;i:867;i:230;i:868;i:230;i:869;i:230;i:870;i:230;i:871;i:230;i:872;i:230;i:873;i:230;i:874;i:230;i:875;i:230;i:876;i:230;i:877;i:230;i:878;i:230;i:879;i:230;i:1155;i:230;i:1156;i:230;i:1157;i:230;i:1158;i:230;i:1426;i:230;i:1427;i:230;i:1428;i:230;i:1429;i:230;i:1431;i:230;i:1432;i:230;i:1433;i:230;i:1436;i:230;i:1437;i:230;i:1438;i:230;i:1439;i:230;i:1440;i:230;i:1441;i:230;i:1448;i:230;i:1449;i:230;i:1451;i:230;i:1452;i:230;i:1455;i:230;i:1476;i:230;i:1552;i:230;i:1553;i:230;i:1554;i:230;i:1555;i:230;i:1556;i:230;i:1557;i:230;i:1619;i:230;i:1620;i:230;i:1623;i:230;i:1624;i:230;i:1750;i:230;i:1751;i:230;i:1752;i:230;i:1753;i:230;i:1754;i:230;i:1755;i:230;i:1756;i:230;i:1759;i:230;i:1760;i:230;i:1761;i:230;i:1762;i:230;i:1764;i:230;i:1767;i:230;i:1768;i:230;i:1771;i:230;i:1772;i:230;i:1840;i:230;i:1842;i:230;i:1843;i:230;i:1845;i:230;i:1846;i:230;i:1850;i:230;i:1853;i:230;i:1855;i:230;i:1856;i:230;i:1857;i:230;i:1859;i:230;i:1861;i:230;i:1863;i:230;i:1865;i:230;i:1866;i:230;i:2385;i:230;i:2387;i:230;i:2388;i:230;i:3970;i:230;i:3971;i:230;i:3974;i:230;i:3975;i:230;i:5901;i:230;i:6458;i:230;i:8400;i:230;i:8401;i:230;i:8404;i:230;i:8405;i:230;i:8406;i:230;i:8407;i:230;i:8411;i:230;i:8412;i:230;i:8417;i:230;i:8423;i:230;i:8425;i:230;i:65056;i:230;i:65057;i:230;i:65058;i:230;i:65059;i:230;i:119173;i:230;i:119174;i:230;i:119175;i:230;i:119177;i:230;i:119176;i:230;i:119210;i:230;i:119211;i:230;i:119212;i:230;i:119213;i:230;i:789;i:232;i:794;i:232;i:12332;i:232;i:863;i:233;i:866;i:233;i:861;i:234;i:862;i:234;i:864;i:234;i:865;i:234;i:837;i:240;}}
lib/whois/whois.ae.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__AE_HANDLER__'))
29
+ define('__AE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ae_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'Domain Name:' => 'domain.name',
39
+ 'Registrar Name:' => 'domain.sponsor',
40
+ 'Status:' => 'domain.status',
41
+ 'Registrant Contact ID:' => 'owner.handle',
42
+ 'Registrant Contact Name:' => 'owner.name',
43
+ 'Tech Contact Name:' => 'tech.name',
44
+ 'Tech Contact ID:' => 'tech.handle',
45
+ 'Name Server:' => 'domain.nserver.'
46
+ );
47
+
48
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
49
+
50
+ $r['regyinfo'] = array(
51
+ 'referrer' => 'http://www.nic.ae',
52
+ 'registrar' => 'UAENIC'
53
+ );
54
+
55
+ return $r;
56
+ }
57
+ }
58
+ ?>
lib/whois/whois.aero.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__AERO_HANDLER__'))
29
+ define('__AERO_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class aero_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, 'ymd');
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://www.nic.aero',
40
+ 'registrar' => 'Societe Internationale de Telecommunications Aeronautiques SC'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.ag.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__AG_HANDLER__'))
29
+ define('__AG_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ag_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://www.nic.ag',
40
+ 'registrar' => 'Nic AG'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.asia.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if(!defined('__ASIA_HANDLER__')) define('__ASIA_HANDLER__',1);
29
+
30
+ require_once('whois.parser.php');
31
+
32
+ class asia_handler
33
+ {
34
+ function parse ($data_str, $query)
35
+ {
36
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
37
+ $r['regyinfo'] = array(
38
+ 'referrer'=>'http://www.dotasia.org/',
39
+ 'registrar' => 'DotAsia'
40
+ );
41
+ return $r;
42
+ }
43
+ }
44
+ ?>
lib/whois/whois.at.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__AT_HANDLER__'))
29
+ define('__AT_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class at_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl' => 'handle',
41
+ 'person' => 'name',
42
+ 'personname' => 'name',
43
+ 'street address' => 'address.street',
44
+ 'city' => 'address.city',
45
+ 'postal code' => 'address.pcode',
46
+ 'country' => 'address.country'
47
+ );
48
+
49
+ $contacts = array(
50
+ 'registrant' => 'owner',
51
+ 'admin-c' => 'admin',
52
+ 'tech-c' => 'tech',
53
+ 'billing-c' => 'billing',
54
+ 'zone-c' => 'zone'
55
+ );
56
+
57
+ $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
58
+
59
+ if (isset($reg['domain']['remarks']))
60
+ unset($reg['domain']['remarks']);
61
+
62
+ if (isset($reg['domain']['descr']))
63
+ {
64
+ while (list($key, $val) = each($reg['domain']['descr']))
65
+ {
66
+ $v = trim(substr(strstr($val, ':'), 1));
67
+ if (strstr($val, '[organization]:'))
68
+ {
69
+ $reg['owner']['organization'] = $v;
70
+ continue;
71
+ }
72
+ if (strstr($val, '[phone]:'))
73
+ {
74
+ $reg['owner']['phone'] = $v;
75
+ continue;
76
+ }
77
+ if (strstr($val, '[fax-no]:'))
78
+ {
79
+ $reg['owner']['fax'] = $v;
80
+ continue;
81
+ }
82
+ if (strstr($val, '[e-mail]:'))
83
+ {
84
+ $reg['owner']['email'] = $v;
85
+ continue;
86
+ }
87
+
88
+ $reg['owner']['address'][$key] = $v;
89
+ }
90
+
91
+ if (isset($reg['domain']['descr'])) unset($reg['domain']['descr']);
92
+ }
93
+
94
+ $r['regrinfo'] = $reg;
95
+ $r['regyinfo'] = array(
96
+ 'referrer' => 'http://www.nic.at',
97
+ 'registrar' => 'NIC-AT'
98
+ );
99
+ return $r;
100
+ }
101
+ }
102
+ ?>
lib/whois/whois.au.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__AU_HANDLER__'))
29
+ define('__AU_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class au_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+
38
+ $items = array(
39
+ 'Domain Name:' => 'domain.name',
40
+ 'Last Modified:' => 'domain.changed',
41
+ 'Registrar Name:' => 'domain.sponsor',
42
+ 'Status:' => 'domain.status',
43
+ 'Domain ROID:' => 'domain.handle',
44
+ 'Registrant:' => 'owner.organization',
45
+ 'Registrant Contact ID:' => 'owner.handle',
46
+ 'Registrant Contact Email:' => 'owner.email',
47
+ 'Registrant Contact Name:' => 'owner.name',
48
+ 'Tech Contact Name:' => 'tech.name',
49
+ 'Tech Contact Email:' => 'tech.email',
50
+ 'Tech Contact ID:' => 'tech.handle',
51
+ 'Name Server:' => 'domain.nserver.'
52
+ );
53
+
54
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
55
+ $r['regyinfo'] = array(
56
+ 'referrer' => 'http://www.aunic.net',
57
+ 'registrar' => 'AU-NIC'
58
+ );
59
+ return $r;
60
+ }
61
+ }
62
+
63
+ ?>
lib/whois/whois.be.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__BE_HANDLER__'))
31
+ define('__BE_HANDLER__', 1);
32
+
33
+ class be_handler
34
+ {
35
+ function parse($data, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.name' => 'Domain:',
39
+ 'domain.status' => 'Status:',
40
+ 'domain.nserver' => 'Nameservers:',
41
+ 'domain.created' => 'Registered:',
42
+ 'owner' => 'Licensee:',
43
+ 'admin' => 'Onsite Contacts:',
44
+ 'tech' => 'Agent Technical Contacts:',
45
+ 'agent' => 'Agent:'
46
+ );
47
+
48
+ $trans = array(
49
+ 'company name2:' => ''
50
+ );
51
+
52
+ $r['regrinfo'] = get_blocks($data['rawdata'], $items);
53
+
54
+ if ($r['regrinfo']['domain']['status'] == 'REGISTERED')
55
+ {
56
+ $r['regrinfo']['registered'] = 'yes';
57
+ $r['regrinfo'] = get_contacts($r['regrinfo'],$trans);
58
+
59
+ if (isset($r['regrinfo']['agent']))
60
+ {
61
+ $sponsor = get_contact($r['regrinfo']['agent'],$trans);
62
+ unset($r['regrinfo']['agent']);
63
+ $r['regrinfo']['domain']['sponsor'] = $sponsor['name'];
64
+ }
65
+
66
+ $r = format_dates($r, '-mdy');
67
+ }
68
+ else
69
+ $r['regrinfo']['registered'] = 'no';
70
+
71
+ $r['regyinfo']['referrer'] = 'http://www.domain-registry.nl';
72
+ $r['regyinfo']['registrar'] = 'DNS Belgium';
73
+ return $r;
74
+ }
75
+ }
76
+ ?>
lib/whois/whois.biz.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__BIZ_HANDLER__'))
29
+ define('__BIZ_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class biz_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, '-md--y');
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://www.neulevel.biz',
40
+ 'registrar' => 'NEULEVEL'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.br.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__BR_HANDLER__'))
31
+ define('__BR_HANDLER__', 1);
32
+
33
+ class br_handler
34
+ {
35
+
36
+ function parse($data_str, $query)
37
+ {
38
+ $translate = array(
39
+ 'fax-no' => 'fax',
40
+ 'e-mail' => 'email',
41
+ 'nic-hdl-br' => 'handle',
42
+ 'person' => 'name',
43
+ 'netname' => 'name',
44
+ 'domain' => 'name',
45
+ 'updated' => ''
46
+ );
47
+
48
+ $contacts = array(
49
+ 'owner-c' => 'owner',
50
+ 'tech-c' => 'tech',
51
+ 'admin-c' => 'admin',
52
+ 'billing-c' => 'billing'
53
+ );
54
+
55
+ $r = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
56
+
57
+ if (in_array('Permission denied.', $r['disclaimer']))
58
+ {
59
+ $r['registered'] = 'unknown';
60
+ return $r;
61
+ }
62
+
63
+ if (isset($r['domain']['nsstat'])) unset($r['domain']['nsstat']);
64
+ if (isset($r['domain']['nslastaa'])) unset($r['domain']['nslastaa']);
65
+
66
+ if (isset($r['domain']['owner']))
67
+ {
68
+ $r['owner']['organization'] = $r['domain']['owner'];
69
+ unset($r['domain']['owner']);
70
+ }
71
+
72
+ if (isset($r['domain']['responsible'])) unset($r['domain']['responsible']);
73
+ if (isset($r['domain']['address'])) unset($r['domain']['address']);
74
+ if (isset($r['domain']['phone'])) unset($r['domain']['phone']);
75
+
76
+ $a['regrinfo'] = $r;
77
+ $a['regyinfo'] = array(
78
+ 'registrar' => 'BR-NIC',
79
+ 'referrer' => 'http://www.nic.br'
80
+ );
81
+ return $a;
82
+ }
83
+ }
84
+ ?>
lib/whois/whois.ca.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CA_HANDLER__'))
29
+ define('__CA_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ca_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative contact:',
40
+ 'tech' => 'Technical contact:',
41
+ 'domain.sponsor' => 'Registrar:',
42
+ 'domain.nserver' => 'Name servers:',
43
+ 'domain.status' => 'Domain status:',
44
+ 'domain.created' => 'Creation date:',
45
+ 'domain.expires' => 'Expiry date:',
46
+ 'domain.changed' => 'Updated date:'
47
+ );
48
+
49
+ $extra = array(
50
+ 'postal address:' => 'address.0',
51
+ 'job title:' => '',
52
+ 'number:' => 'handle',
53
+ 'description:' => 'organization'
54
+ );
55
+
56
+ $r['regrinfo'] = easy_parser($data_str['rawdata'],$items,'ymd',$extra);
57
+
58
+ if (!empty($r['regrinfo']['domain']['sponsor']))
59
+ {
60
+ list($v,$reg) = explode(':',$r['regrinfo']['domain']['sponsor'][0]);
61
+ $r['regrinfo']['domain']['sponsor'] = trim($reg);
62
+ }
63
+
64
+ if (empty($r['regrinfo']['domain']['status']) || $r['regrinfo']['domain']['status'] == 'available')
65
+ $r['regrinfo']['registered'] = 'no';
66
+ else
67
+ $r['regrinfo']['registered'] = 'yes';
68
+
69
+ $r['regyinfo'] = array(
70
+ 'registrar' => 'CIRA',
71
+ 'referrer' => 'http://www.cira.ca/'
72
+ );
73
+ return $r;
74
+ }
75
+ }
76
+ ?>
lib/whois/whois.cat.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CAT_HANDLER__'))
29
+ define('__CAT_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class cat_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+
39
+ if (!isset($r['regrinfo']['domain']['name']))
40
+ $r['regrinfo']['registered'] = 'no';
41
+
42
+ $r['regyinfo']['referrer'] = 'http://www.domini.cat/';
43
+ $r['regyinfo']['registrar'] = 'Domini punt CAT';
44
+ return $r;
45
+ }
46
+ }
47
+ ?>
lib/whois/whois.ch.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__CH_HANDLER__'))
31
+ define('__CH_HANDLER__', 1);
32
+
33
+ class ch_handler
34
+ {
35
+
36
+ function parse($data_str, $query)
37
+ {
38
+
39
+ $items = array(
40
+ 'owner' => 'Holder of domain name:',
41
+ 'domain.name' => 'Domain name:',
42
+ 'domain.created' => 'Date of last registration:',
43
+ 'domain.changed' => 'Date of last modification:',
44
+ 'tech' => 'Technical contact:',
45
+ 'domain.nserver' => 'Name servers:',
46
+ 'domain.dnssec' => 'DNSSEC:'
47
+ );
48
+
49
+ $trans = array(
50
+ 'contractual language:' => 'language'
51
+ );
52
+
53
+ $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
54
+
55
+ if (!empty($r['regrinfo']['domain']['name']))
56
+ {
57
+ $r['regrinfo'] = get_contacts($r['regrinfo'],$trans);
58
+
59
+ $r['regrinfo']['domain']['name'] = $r['regrinfo']['domain']['name'][0];
60
+
61
+ if (isset($r['regrinfo']['domain']['changed'][0]))
62
+ $r['regrinfo']['domain']['changed'] = get_date($r['regrinfo']['domain']['changed'][0], 'dmy');
63
+
64
+ if (isset($r['regrinfo']['domain']['created'][0]))
65
+ $r['regrinfo']['domain']['created'] = get_date($r['regrinfo']['domain']['created'][0], 'dmy');
66
+
67
+ $r['regrinfo']['registered'] = 'yes';
68
+ }
69
+ else
70
+ {
71
+ $r = '';
72
+ $r['regrinfo']['registered'] = 'no';
73
+ }
74
+
75
+ $r['regyinfo'] = array(
76
+ 'referrer' => 'http://www.nic.ch',
77
+ 'registrar' => 'SWITCH Domain Name Registration'
78
+ );
79
+ return $r;
80
+ }
81
+ }
82
+ ?>
lib/whois/whois.cl.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CL_HANDLER__'))
29
+ define('__CL_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class cl_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'admin' => '(Administrative Contact)',
39
+ 'tech' => 'Contacto Técnico (Technical Contact):',
40
+ 'domain.nserver' => 'Servidores de nombre (Domain servers):',
41
+ 'domain.changed' => '(Database last updated on):'
42
+ );
43
+
44
+ $trans = array(
45
+ 'organización:' => 'organization',
46
+ 'nombre :' => 'name');
47
+
48
+ $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'd-m-y', $trans);
49
+ $r['regyinfo'] = array(
50
+ 'referrer' => 'http://www.nic.cl',
51
+ 'registrar' => 'NIC Chile'
52
+ );
53
+ return $r;
54
+ }
55
+ }
56
+ ?>
lib/whois/whois.client.php ADDED
@@ -0,0 +1,595 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.ip.lib.php');
29
+
30
+ class WhoisClient {
31
+
32
+ // Recursion allowed ?
33
+ var $gtld_recurse = false;
34
+
35
+ // Default WHOIS port
36
+ var $PORT = 43;
37
+
38
+ // Maximum number of retries on connection failure
39
+ var $RETRY = 0;
40
+
41
+ // Time to wait between retries
42
+ var $SLEEP = 2;
43
+
44
+ // Read buffer size (0 == char by char)
45
+ var $BUFFER = 1024;
46
+
47
+ // Communications timeout
48
+ var $STIMEOUT = 10;
49
+
50
+ // List of servers and handlers (loaded from servers.whois)
51
+ var $DATA = array();
52
+
53
+ // Array to contain all query variables
54
+ var $Query = array(
55
+ 'tld' => '',
56
+ 'type' => 'domain',
57
+ 'query' => '',
58
+ 'status',
59
+ 'server'
60
+ );
61
+
62
+ // This release of the package
63
+ var $CODE_VERSION = '4.2.2';
64
+
65
+ // Full code and data version string (e.g. 'Whois2.php v3.01:16')
66
+ var $VERSION;
67
+
68
+ /*
69
+ * Constructor function
70
+ */
71
+ function WhoisClient () {
72
+ // Load DATA array
73
+ @require('whois.servers.php');
74
+
75
+ // Set version
76
+ $this->VERSION = sprintf("phpWhois v%s-%s", $this->CODE_VERSION, $this->DATA_VERSION);
77
+ }
78
+
79
+ /*
80
+ * Perform lookup
81
+ */
82
+
83
+ function GetRawData ($query) {
84
+
85
+ $this->Query['query'] = $query;
86
+
87
+ // clear error description
88
+ if (isset($this->Query['errstr'])) unset($this->Query['errstr']);
89
+
90
+ if (!isset($this->Query['server'])) {
91
+ $this->Query['status'] = 'error';
92
+ $this->Query['errstr'][] = 'No server specified';
93
+ return(array());
94
+ }
95
+
96
+ // Check if protocol is http
97
+
98
+ if (substr($this->Query['server'],0,7)=='http://' ||
99
+ substr($this->Query['server'],0,8)=='https://')
100
+ {
101
+ $output = $this->httpQuery($this->Query['server']);
102
+
103
+ if (!$output)
104
+ {
105
+ $this->Query['status'] = 'error';
106
+ $this->Query['errstr'][] = 'Connect failed to: '.$this->Query['server'];
107
+ return(array());
108
+ }
109
+
110
+ $this->Query['args'] = substr(strchr($this->Query['server'],'?'),1);
111
+ $this->Query['server'] = strtok($this->Query['server'],'?');
112
+
113
+ if (substr($this->Query['server'],0,7)=='http://')
114
+ $this->Query['server_port'] = 80;
115
+ else
116
+ $this->Query['server_port'] = 483;
117
+ }
118
+ else
119
+ {
120
+ // Get args
121
+
122
+ if (strpos($this->Query['server'],'?'))
123
+ {
124
+ $parts = explode('?',$this->Query['server']);
125
+ $this->Query['server'] = trim($parts[0]);
126
+ $query_args = trim($parts[1]);
127
+
128
+ // replace substitution parameters
129
+ $query_args = str_replace('{query}', $query, $query_args);
130
+ $query_args = str_replace('{version}', 'phpWhois'.$this->CODE_VERSION, $query_args);
131
+
132
+ if (strpos($query_args,'{ip}')!==false)
133
+ {
134
+ $query_args = str_replace('{ip}', phpwhois_getclientip(), $query_args);
135
+ }
136
+
137
+ if (strpos($query_args,'{hname}')!==false)
138
+ {
139
+ $query_args = str_replace('{hname}', gethostbyaddr(phpwhois_getclientip()), $query_args);
140
+ }
141
+ }
142
+ else
143
+ {
144
+ if (empty($this->Query['args']))
145
+ $query_args = $query;
146
+ else
147
+ $query_args = $this->Query['args'];
148
+ }
149
+
150
+ $this->Query['args'] = $query_args;
151
+
152
+ if (substr($this->Query['server'],0,9) == 'rwhois://')
153
+ {
154
+ $this->Query['server'] = substr($this->Query['server'],9);
155
+ }
156
+
157
+ if (substr($this->Query['server'],0,8) == 'whois://')
158
+ {
159
+ $this->Query['server'] = substr($this->Query['server'],8);
160
+ }
161
+
162
+ // Get port
163
+
164
+ if (strpos($this->Query['server'],':'))
165
+ {
166
+ $parts = explode(':',$this->Query['server']);
167
+ $this->Query['server'] = trim($parts[0]);
168
+ $this->Query['server_port'] = trim($parts[1]);
169
+ }
170
+ else
171
+ $this->Query['server_port'] = $this->PORT;
172
+
173
+ // Connect to whois server, or return if failed
174
+
175
+ $ptr = $this->Connect();
176
+
177
+ if($ptr < 0) {
178
+ $this->Query['status'] = 'error';
179
+ $this->Query['errstr'][] = 'Connect failed to: '.$this->Query['server'];
180
+ return array();
181
+ }
182
+
183
+ stream_set_timeout($ptr,$this->STIMEOUT);
184
+ stream_set_blocking($ptr,0);
185
+
186
+ // Send query
187
+ fputs($ptr, trim($query_args)."\r\n");
188
+
189
+ // Prepare to receive result
190
+ $raw = '';
191
+ $start = time();
192
+ $null = NULL;
193
+ $r = array($ptr);
194
+
195
+ while (!feof($ptr))
196
+ {
197
+ if (stream_select($r,$null,$null,$this->STIMEOUT))
198
+ {
199
+ $raw .= fgets($ptr, $this->BUFFER);
200
+ }
201
+
202
+ if (time()-$start > $this->STIMEOUT)
203
+ {
204
+ $this->Query['status'] = 'error';
205
+ $this->Query['errstr'][] = 'Timeout reading from '.$this->Query['server'];
206
+ return array();
207
+ }
208
+ }
209
+
210
+ if (array_key_exists($this->Query['server'],$this->NON_UTF8))
211
+ {
212
+ $raw = utf8_encode($raw);
213
+ }
214
+
215
+ $output = explode("\n", $raw);
216
+
217
+ // Drop empty last line (if it's empty! - saleck)
218
+ if (empty($output[count($output)-1]))
219
+ unset($output[count($output)-1]);
220
+ }
221
+
222
+ return $output;
223
+ }
224
+
225
+ /*
226
+ * Perform lookup. Returns an array. The 'rawdata' element contains an
227
+ * array of lines gathered from the whois query. If a top level domain
228
+ * handler class was found for the domain, other elements will have been
229
+ * populated too.
230
+ */
231
+
232
+ function GetData ($query='', $deep_whois=true) {
233
+
234
+ // If domain to query passed in, use it, otherwise use domain from initialisation
235
+ $query = !empty($query) ? $query : $this->Query['query'];
236
+
237
+ $output = $this->GetRawData($query);
238
+
239
+ // Create result and set 'rawdata'
240
+ $result = array( 'rawdata' => $output );
241
+ $result = $this->set_whois_info($result);
242
+
243
+ // Return now on error
244
+ if (empty($output)) return $result;
245
+
246
+ // If we have a handler, post-process it with it
247
+ if (isSet($this->Query['handler']))
248
+ {
249
+ // Keep server list
250
+ $servers = $result['regyinfo']['servers'];
251
+ unset($result['regyinfo']['servers']);
252
+
253
+ // Process data
254
+ $result = $this->Process($result,$deep_whois);
255
+
256
+ // Add new servers to the server list
257
+ if (isset($result['regyinfo']['servers']))
258
+ $result['regyinfo']['servers'] = array_merge($servers,$result['regyinfo']['servers']);
259
+ else
260
+ $result['regyinfo']['servers'] = $servers;
261
+
262
+ // Handler may forget to set rawdata
263
+ if (!isset($result['rawdata']))
264
+ $result['rawdata'] = $output;
265
+ }
266
+
267
+ // Type defaults to domain
268
+ if (!isset($result['regyinfo']['type']))
269
+ $result['regyinfo']['type'] = 'domain';
270
+
271
+ // Add error information if any
272
+ if (isset($this->Query['errstr']))
273
+ $result['errstr'] = $this->Query['errstr'];
274
+
275
+ // Fix/add nameserver information
276
+ if (method_exists($this,'FixResult') && $this->Query['tld'] != 'ip')
277
+ $this->FixResult($result,$query);
278
+
279
+ return($result);
280
+ }
281
+
282
+ /*
283
+ * Adds whois server query information to result
284
+ */
285
+
286
+ function set_whois_info ($result)
287
+ {
288
+ $info = array(
289
+ 'server'=> $this->Query['server'],
290
+ );
291
+
292
+ if (!empty($this->Query['args']))
293
+ $info['args'] = $this->Query['args'];
294
+ else
295
+ $info['args'] = $this->Query['query'];
296
+
297
+ if (!empty($this->Query['server_port']))
298
+ $info['port'] = $this->Query['server_port'];
299
+ else
300
+ $info['port'] = 43;
301
+
302
+ if (isset($result['regyinfo']['whois']))
303
+ unset($result['regyinfo']['whois']);
304
+
305
+ if (isset($result['regyinfo']['rwhois']))
306
+ unset($result['regyinfo']['rwhois']);
307
+
308
+ $result['regyinfo']['servers'][] = $info;
309
+
310
+ return $result;
311
+ }
312
+
313
+ /*
314
+ * Convert html output to plain text
315
+ */
316
+ function httpQuery ($query) {
317
+
318
+ //echo ini_get('allow_url_fopen');
319
+
320
+ //if (ini_get('allow_url_fopen'))
321
+ $lines = @file($this->Query['server']);
322
+
323
+ if (!$lines) return false;
324
+
325
+ $output = '';
326
+ $pre = '';
327
+
328
+ while (list($key, $val)=each($lines)) {
329
+ $val = trim($val);
330
+
331
+ $pos=strpos(strtoupper($val),'<PRE>');
332
+ if ($pos!==false) {
333
+ $pre = "\n";
334
+ $output.=substr($val,0,$pos)."\n";
335
+ $val = substr($val,$pos+5);
336
+ }
337
+ $pos=strpos(strtoupper($val),'</PRE>');
338
+ if ($pos!==false) {
339
+ $pre = '';
340
+ $output.=substr($val,0,$pos)."\n";
341
+ $val = substr($val,$pos+6);
342
+ }
343
+ $output.=$val.$pre;
344
+ }
345
+
346
+ $search = array (
347
+ '<BR>', '<P>', '</TITLE>',
348
+ '</H1>', '</H2>', '</H3>',
349
+ '<br>', '<p>', '</title>',
350
+ '</h1>', '</h2>', '</h3>' );
351
+
352
+ $output = str_replace($search,"\n",$output);
353
+ $output = str_replace('<TD',' <td',$output);
354
+ $output = str_replace('<td',' <td',$output);
355
+ $output = str_replace('<tr',"\n<tr",$output);
356
+ $output = str_replace('<TR',"\n<tr",$output);
357
+ $output = str_replace('&nbsp;',' ',$output);
358
+ $output = strip_tags($output);
359
+ $output = explode("\n",$output);
360
+
361
+ $rawdata = array();
362
+ $null = 0;
363
+
364
+ while (list($key, $val)=each($output)) {
365
+ $val=trim($val);
366
+ if ($val=='') {
367
+ if (++$null>2) continue;
368
+ }
369
+ else $null=0;
370
+ $rawdata[]=$val;
371
+ }
372
+ return $rawdata;
373
+ }
374
+
375
+ /*
376
+ * Open a socket to the whois server.
377
+ *
378
+ * Returns a socket connection pointer on success, or -1 on failure.
379
+ */
380
+ function Connect ($server = '') {
381
+
382
+ if ($server == '')
383
+ $server = $this->Query['server'];
384
+
385
+ // Fail if server not set
386
+ if($server == '')
387
+ return(-1);
388
+
389
+ // Get rid of protocol and/or get port
390
+ $port = $this->Query['server_port'];
391
+
392
+ $pos = strpos($server,'://');
393
+
394
+ if ($pos !== false)
395
+ $server = substr($server, $pos+3);
396
+
397
+ $pos = strpos($server,':');
398
+
399
+ if ($pos !== false)
400
+ {
401
+ $port = substr($server,$pos+1);
402
+ $server = substr($server,0,$pos);
403
+ }
404
+
405
+ // Enter connection attempt loop
406
+ $retry = 0;
407
+
408
+ while($retry <= $this->RETRY) {
409
+ // Set query status
410
+ $this->Query['status'] = 'ready';
411
+
412
+ // Connect to whois port
413
+ $ptr = @fsockopen($server, $port, $errno, $errstr, $this->STIMEOUT);
414
+
415
+ if($ptr > 0) {
416
+ $this->Query['status'] = 'ok';
417
+ return($ptr);
418
+ }
419
+
420
+ // Failed this attempt
421
+ $this->Query['status'] = 'error';
422
+ $this->Query['error'][] = $errstr;
423
+ $retry++;
424
+
425
+ // Sleep before retrying
426
+ sleep($this->SLEEP);
427
+ }
428
+
429
+ // If we get this far, it hasn't worked
430
+ return(-1);
431
+ }
432
+
433
+ /*
434
+ * Post-process result with handler class. On success, returns the result
435
+ * from the handler. On failure, returns passed result unaltered.
436
+ */
437
+ function Process (&$result, $deep_whois=true) {
438
+
439
+ $handler_name = str_replace('.','_',$this->Query['handler']);
440
+
441
+ // If the handler has not already been included somehow, include it now
442
+ $HANDLER_FLAG = sprintf("__%s_HANDLER__", strtoupper($handler_name));
443
+
444
+ if (!defined($HANDLER_FLAG))
445
+ include($this->Query['file']);
446
+
447
+ // If the handler has still not been included, append to query errors list and return
448
+ if (!defined($HANDLER_FLAG))
449
+ {
450
+ $this->Query['errstr'][] = "Can't find $handler_name handler: ".$this->Query['file'];
451
+ return($result);
452
+ }
453
+
454
+ if (!$this->gtld_recurse && $this->Query['file'] == 'whois.gtld.php')
455
+ return $result;
456
+
457
+ // Pass result to handler
458
+ $object = $handler_name.'_handler';
459
+
460
+ $handler = new $object('');
461
+
462
+ // If handler returned an error, append it to the query errors list
463
+ if(isSet($handler->Query['errstr']))
464
+ $this->Query['errstr'][] = $handler->Query['errstr'];
465
+
466
+ $handler->deep_whois = $deep_whois;
467
+
468
+ // Process
469
+ $res = $handler->parse($result,$this->Query['query']);
470
+
471
+ // Return the result
472
+ return $res;
473
+ }
474
+
475
+ /*
476
+ * Does more (deeper) whois ...
477
+ */
478
+
479
+ function DeepWhois ($query, $result) {
480
+
481
+ if (!isset($result['regyinfo']['whois'])) return $result;
482
+
483
+ $this->Query['server'] = $wserver = $result['regyinfo']['whois'];
484
+ unset($result['regyinfo']['whois']);
485
+ $subresult = $this->GetRawData($query);
486
+
487
+ if (!empty($subresult))
488
+ {
489
+ $result = $this->set_whois_info($result);
490
+ $result['rawdata'] = $subresult;
491
+
492
+ if (isset($this->WHOIS_GTLD_HANDLER[$wserver]))
493
+ $this->Query['handler'] = $this->WHOIS_GTLD_HANDLER[$wserver];
494
+ else
495
+ {
496
+ $parts = explode('.',$wserver);
497
+ $hname = strtolower($parts[1]);
498
+
499
+ if (($fp = @fopen('whois.gtld.'.$hname.'.php', 'r', 1)) and fclose($fp))
500
+ $this->Query['handler'] = $hname;
501
+ }
502
+
503
+ if (!empty($this->Query['handler']))
504
+ {
505
+ $this->Query['file'] = sprintf('whois.gtld.%s.php', $this->Query['handler']);
506
+ $regrinfo = $this->Process($subresult); //$result['rawdata']);
507
+ $result['regrinfo'] = $this->merge_results($result['regrinfo'], $regrinfo);
508
+ //$result['rawdata'] = $subresult;
509
+ }
510
+ }
511
+
512
+ return $result;
513
+ }
514
+
515
+ /*
516
+ * Merge results
517
+ */
518
+
519
+ function merge_results($a1, $a2) {
520
+
521
+ reset($a2);
522
+
523
+ while (list($key, $val) = each($a2))
524
+ {
525
+ if (isset($a1[$key]))
526
+ {
527
+ if (is_array($val))
528
+ {
529
+ if ($key != 'nserver')
530
+ $a1[$key] = $this->merge_results($a1[$key], $val);
531
+ }
532
+ else
533
+ {
534
+ $val = trim($val);
535
+ if ($val != '')
536
+ $a1[$key] = $val;
537
+ }
538
+ }
539
+ else
540
+ $a1[$key] = $val;
541
+ }
542
+
543
+ return $a1;
544
+ }
545
+
546
+ function FixNameServer($nserver)
547
+ {
548
+ $dns = array();
549
+
550
+ foreach($nserver as $val)
551
+ {
552
+ $val = str_replace( array('[',']','(',')'), '', trim($val));
553
+ $val = str_replace("\t", ' ', $val);
554
+ $parts = explode(' ', $val);
555
+ $host = '';
556
+ $ip = '';
557
+
558
+ foreach($parts as $p)
559
+ {
560
+ if (substr($p,-1) == '.') $p = substr($p,0,-1);
561
+
562
+ if ((ip2long($p) == - 1) or (ip2long($p) === false))
563
+ {
564
+ // Hostname ?
565
+ if ($host == '' && preg_match('/^[\w\-]+(\.[\w\-]+)+$/',$p))
566
+ {
567
+ $host = $p;
568
+ }
569
+ }
570
+ else
571
+ // IP Address
572
+ $ip = $p;
573
+ }
574
+
575
+ // Valid host name ?
576
+
577
+ if ($host == '') continue;
578
+
579
+ // Get ip address
580
+
581
+ if ($ip == '')
582
+ {
583
+ $ip = gethostbyname($host);
584
+ if ($ip == $host) $ip = '(DOES NOT EXIST)';
585
+ }
586
+
587
+ if (substr($host,-1,1) == '.') $host = substr($host,0,-1);
588
+
589
+ $dns[strtolower($host)] = $ip;
590
+ }
591
+
592
+ return $dns;
593
+ }
594
+ }
595
+ ?>
lib/whois/whois.cn.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CN_HANDLER__'))
29
+ define('__CN_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class cn_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'Domain Name:' => 'domain.name',
39
+ 'Domain Status:' => 'domain.status.',
40
+ 'ROID:' => 'domain.handle',
41
+ 'Name Server:' => 'domain.nserver.',
42
+ 'Registration Date:' => 'domain.created',
43
+ 'Expiration Date:' => 'domain.expires',
44
+ 'Sponsoring Registrar:' => 'domain.sponsor',
45
+ 'Registrant Name:' => 'owner.name',
46
+ 'Registrant Organization:' => 'owner.organization',
47
+ 'Registrant Address:' => 'owner.address.address',
48
+ 'Registrant Postal Code:' => 'owner.address.pcode',
49
+ 'Registrant City:' => 'owner.address.city',
50
+ 'Registrant Country Code:' => 'owner.address.country',
51
+ 'Registrant Email:' => 'owner.email',
52
+ 'Registrant Phone Number:' => 'owner.phone',
53
+ 'Registrant Fax:' => 'owner.fax',
54
+ 'Administrative Name:' => 'admin.name',
55
+ 'Administrative Organization:' => 'admin.organization',
56
+ 'Administrative Address:' => 'admin.address.address',
57
+ 'Administrative Postal Code:' => 'admin.address.pcode',
58
+ 'Administrative City:' => 'admin.address.city',
59
+ 'Administrative Country Code:' => 'admin.address.country',
60
+ 'Administrative Email:' => 'admin.email',
61
+ 'Administrative Phone Number:' => 'admin.phone',
62
+ 'Administrative Fax:' => 'admin.fax',
63
+ 'Technical Name:' => 'tech.name',
64
+ 'Technical Organization:' => 'tech.organization',
65
+ 'Technical Address:' => 'tech.address.address',
66
+ 'Technical Postal Code:' => 'tech.address.pcode',
67
+ 'Technical City:' => 'tech.address.city',
68
+ 'tec-country:' => 'tech.address.country',
69
+ 'Technical Email:' => 'tech.email',
70
+ 'Technical Phone Number:' => 'tech.phone',
71
+ 'Technical Fax:' => 'tech.fax',
72
+ 'Billing Name:' => 'billing.name',
73
+ 'Billing Organization:' => 'billing.organization',
74
+ 'Billing Address:' => 'billing.address.address',
75
+ 'Billing Postal Code:' => 'billing.address.pcode',
76
+ 'Billing City:' => 'billing.address.city',
77
+ 'Billing Country Code:' => 'billing.address.country',
78
+ 'Billing Email:' => 'billing.email',
79
+ 'Billing Phone Number:' => 'billing.phone',
80
+ 'Billing Fax:' => 'billing.fax'
81
+ );
82
+
83
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
84
+ $r['regyinfo'] = array(
85
+ 'referrer' => 'http://www.cnnic.net.cn',
86
+ 'registrar' => 'China NIC'
87
+ );
88
+ return $r;
89
+ }
90
+ }
91
+ ?>
lib/whois/whois.co.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CO_HANDLER__'))
29
+ define('__CO_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class co_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, '-md--y');
38
+ $r['regyinfo']['referrer'] = 'http://www.cointernet.com.co/';
39
+ $r['regyinfo']['registrar'] = '.CO Internet, S.A.S.';
40
+ return $r;
41
+ }
42
+ }
43
+ ?>
lib/whois/whois.co.za.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CO_ZA_HANDLER__'))
29
+ define('__CO_ZA_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class co_Za_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ '0a. lastupdate :' => 'domain.changed',
39
+ '1a. domain :' => 'domain.name',
40
+ '2b. registrantpostaladdress:' => 'owner.address.address.0',
41
+ '2f. billingaccount :' => 'billing.name',
42
+ '2g. billingemail :' => 'billing.email',
43
+ '2i. invoiceaddress :' => 'billing.address',
44
+ '2j. registrantphone :' => 'owner.phone',
45
+ '2k. registrantfax :' => 'owner.fax',
46
+ '2l. registrantemail :' => 'owner.email',
47
+ '4a. admin :' => 'admin.name',
48
+ '4c. admincompany :' => 'admin.organization',
49
+ '4d. adminpostaladdr :' => 'admin.address',
50
+ '4e. adminphone :' => 'admin.phone',
51
+ '4f. adminfax :' => 'admin.fax',
52
+ '4g. adminemail :' => 'admin.email',
53
+ '5a. tec :' => 'tech.name',
54
+ '5c. teccompany :' => 'tech.organization',
55
+ '5d. tecpostaladdr :' => 'tech.address',
56
+ '5e. tecphone :' => 'tech.phone',
57
+ '5f. tecfax :' => 'tech.fax',
58
+ '5g. tecemail :' => 'tech.email',
59
+ '6a. primnsfqdn :' => 'domain.nserver.0',
60
+ '6e. secns1fqdn :' => 'domain.nserver.1',
61
+ '6i. secns2fqdn :' => 'domain.nserver.2',
62
+ '6m. secns3fqdn :' => 'domain.nserver.3',
63
+ '6q. secns4fqdn :' => 'domain.nserver.4'
64
+ );
65
+
66
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
67
+
68
+ $r['regyinfo']['referrer'] = 'http://www.co.za';
69
+ $r['regyinfo']['registrar'] = 'UniForum Association';
70
+ return $r;
71
+ }
72
+ }
73
+ ?>
lib/whois/whois.coop.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__COOP_HANDLER__'))
29
+ define('__COOP_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class coop_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+
38
+ $items = array (
39
+ 'owner' => 'Contact Type: registrant',
40
+ 'admin' => 'Contact Type: admin',
41
+ 'tech' => 'Contact Type: tech',
42
+ 'billing' => 'Contact Type: billing',
43
+ 'domain.name' => 'Domain Name:',
44
+ 'domain.handle' => 'Domain ID:',
45
+ 'domain.expires' => 'Expiry Date:',
46
+ 'domain.created' => 'Created:',
47
+ 'domain.changed' => 'Last updated:',
48
+ 'domain.status' => 'Domain Status:',
49
+ 'domain.sponsor' => 'Sponsoring registrar:',
50
+ 'domain.nserver.' => 'Host Name:'
51
+ );
52
+
53
+ $translate = array(
54
+ 'Contact ID:' => 'handle',
55
+ 'Name:' => 'name',
56
+ 'Organisation:' => 'organization',
57
+ 'Street 1:' => 'address.street.0',
58
+ 'Street 2:' => 'address.street.1',
59
+ 'Street 3:' => 'address.street.2',
60
+ 'City:' => 'address.city',
61
+ 'State/Province:' => 'address.state',
62
+ 'Postal code:' => 'address.pcode',
63
+ 'Country:' => 'address.country',
64
+ 'Voice:' => 'phone',
65
+ 'Fax:' => 'fax',
66
+ 'Email:' => 'email'
67
+ );
68
+
69
+ $blocks = get_blocks($data_str['rawdata'],$items);
70
+
71
+ $r=array();
72
+
73
+ if (isset($blocks['domain']))
74
+ {
75
+ $r['regrinfo']['domain'] = format_dates($blocks['domain'],'dmy');
76
+ $r['regrinfo']['registered'] = 'yes';
77
+
78
+ if (isset($blocks['owner']))
79
+ {
80
+ $r['regrinfo']['owner'] = generic_parser_b($blocks['owner'],$translate,'dmy',false);
81
+
82
+ if (isset($blocks['tech']))
83
+ $r['regrinfo']['tech'] = generic_parser_b($blocks['tech'],$translate,'dmy',false);
84
+
85
+ if (isset($blocks['admin']))
86
+ $r['regrinfo']['admin'] = generic_parser_b($blocks['admin'],$translate,'dmy',false);
87
+
88
+ if (isset($blocks['billing']))
89
+ $r['regrinfo']['billing'] = generic_parser_b($blocks['billing'],$translate,'dmy',false);
90
+ }
91
+ else
92
+ {
93
+ $r['regrinfo']['owner'] = generic_parser_b($data_str['rawdata'],$translate,'dmy',false);
94
+ }
95
+ }
96
+ else
97
+ $r['regrinfo']['registered'] = 'no';
98
+
99
+ $r['regyinfo'] = array(
100
+ 'referrer' => 'http://www.nic.coop',
101
+ 'registrar' => '.coop registry'
102
+ );
103
+ return $r;
104
+ }
105
+ }
106
+ ?>
lib/whois/whois.cz.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CZ_HANDLER__'))
29
+ define('__CZ_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class cz_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'expire' => 'expires',
39
+ 'registered' => 'created',
40
+ 'nserver' => 'nserver',
41
+ 'domain' => 'name',
42
+ 'contact' => 'handle',
43
+ 'reg-c' => '',
44
+ 'descr' => 'desc',
45
+ 'e-mail' => 'email',
46
+ 'person' => 'name',
47
+ 'org' => 'organization',
48
+ 'fax-no' => 'fax'
49
+ );
50
+
51
+ $contacts = array(
52
+ 'admin-c' => 'admin',
53
+ 'tech-c' => 'tech',
54
+ 'bill-c' => 'billing',
55
+ 'registrant' => 'owner'
56
+ );
57
+
58
+ $r['regrinfo'] = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'dmy');
59
+
60
+ $r['regyinfo'] = array(
61
+ 'referrer' => 'http://www.nic.cz',
62
+ 'registrar' => 'CZ-NIC'
63
+ );
64
+
65
+ if ($data_str['rawdata'][0] == 'Your connection limit exceeded. Please slow down and try again later.')
66
+ {
67
+ $r['regrinfo']['registered'] = 'unknown';
68
+ }
69
+
70
+ return $r;
71
+ }
72
+ }
73
+ ?>
lib/whois/whois.de.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__DE_HANDLER__'))
29
+ define('__DE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class de_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.name' => 'Domain:',
39
+ 'domain.nserver.' =>'Nserver:',
40
+ 'domain.nserver.#' =>'Nsentry:',
41
+ 'domain.status' => 'Status:',
42
+ 'domain.changed' => 'Changed:',
43
+ 'domain.desc.' => 'Descr:',
44
+ 'owner' => '[Holder]',
45
+ 'admin' => '[Admin-C]',
46
+ 'tech' => '[Tech-C]',
47
+ 'zone' => '[Zone-C]'
48
+ );
49
+
50
+ $extra = array(
51
+ 'city:' => 'address.city',
52
+ 'postalcode:' => 'address.pcode',
53
+ 'countrycode:' => 'address.country',
54
+ 'remarks:' => '',
55
+ 'sip:' => 'sip',
56
+ 'type:' => ''
57
+ );
58
+
59
+ $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd',$extra);
60
+
61
+ $r['regyinfo'] = array(
62
+ 'registrar' => 'DENIC eG',
63
+ 'referrer' => 'http://www.denic.de/'
64
+ );
65
+
66
+ if (!isset($r['regrinfo']['domain']['status']) || $r['regrinfo']['domain']['status'] == "free")
67
+ {
68
+ $r['regrinfo']['registered'] = 'no';
69
+ }
70
+ else
71
+ {
72
+ $r['regrinfo']['domain']['changed'] = substr($r['regrinfo']['domain']['changed'], 0, 10);
73
+ $r['regrinfo']['registered'] = 'yes';
74
+ }
75
+ return $r;
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.edu.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__EDU_HANDLER__'))
29
+ define('__EDU_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class edu_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.name' => 'Domain name:',
39
+ 'domain.sponsor' => 'Registrar:',
40
+ 'domain.nserver' => 'Name Servers:',
41
+ 'domain.changed' => 'Domain record last updated:',
42
+ 'domain.created' => 'Domain record activated:',
43
+ 'owner' => 'Registrant:',
44
+ 'admin' => 'Administrative Contact:',
45
+ 'tech' => 'Technical Contact:',
46
+ 'billing' => 'Billing Contact:'
47
+ );
48
+
49
+ $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'dmy');
50
+
51
+ if (isset($b['tech']))
52
+ {
53
+ if ($r['regrinfo']['tech']['name'] == 'Same as above')
54
+ $r['regrinfo']['tech'] = $r['regrinfo']['admin'];
55
+ }
56
+
57
+ $r['regyinfo']['referrer'] = 'http://whois.educause.net';
58
+ $r['regyinfo']['registrar'] = 'EDUCASE';
59
+ return ($r);
60
+ }
61
+ }
62
+ ?>
lib/whois/whois.eu.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__EU_HANDLER__'))
31
+ define('__EU_HANDLER__', 1);
32
+
33
+ class eu_handler
34
+ {
35
+ function parse($data, $query)
36
+ {
37
+
38
+ $items = array(
39
+ 'domain.name' => 'Domain:',
40
+ 'domain.status' => 'Status:',
41
+ 'domain.nserver' => 'Name servers:',
42
+ 'domain.created' => 'Registered:',
43
+ 'domain.registrar' => 'Registrar:',
44
+ 'tech' => 'Registrar Technical Contacts:',
45
+ 'owner' => 'Registrant:',
46
+ '' => 'Please visit'
47
+ );
48
+
49
+ $extra = array(
50
+ 'organisation:' => 'organization',
51
+ 'website:' => 'url'
52
+ );
53
+
54
+ $r['regrinfo'] = get_blocks($data['rawdata'], $items);
55
+
56
+ if (!empty($r['regrinfo']['domain']['status']))
57
+ switch ($r['regrinfo']['domain']['status'])
58
+ {
59
+ case 'FREE':
60
+ case 'AVAILABLE':
61
+ $r['regrinfo']['registered'] = 'no';
62
+ break;
63
+
64
+ case 'APPLICATION PENDING':
65
+ $r['regrinfo']['registered'] = 'pending';
66
+ break;
67
+
68
+ default:
69
+ $r['regrinfo']['registered'] = 'unknown';
70
+ }
71
+ else
72
+ $r['regrinfo']['registered'] = 'yes';
73
+
74
+ if (isset($r['regrinfo']['tech']))
75
+ $r['regrinfo']['tech'] = get_contact($r['regrinfo']['tech'],$extra);
76
+
77
+ if (isset($r['regrinfo']['domain']['registrar']))
78
+ $r['regrinfo']['domain']['registrar'] = get_contact($r['regrinfo']['domain']['registrar'],$extra);
79
+
80
+ $r['regyinfo']['referrer'] = 'http://www.eurid.eu';
81
+ $r['regyinfo']['registrar'] = 'EURID';
82
+ return $r;
83
+ }
84
+ }
85
+ ?>
lib/whois/whois.fi.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__FI_HANDLER__'))
29
+ define('__FI_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class fi_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain:' => 'domain.name',
39
+ 'created:' => 'domain.created',
40
+ 'expires:' => 'domain.expires',
41
+ 'status:' => 'domain.status',
42
+ 'nserver:' => 'domain.nserver.',
43
+ 'descr:' => 'owner.name.',
44
+ 'address:' => 'owner.address.',
45
+ 'phone:' => 'owner.phone',
46
+ );
47
+
48
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
49
+
50
+ $r['regyinfo'] = array(
51
+ 'referrer' => 'https://domain.ficora.fi/',
52
+ 'registrar' => 'Finnish Communications Regulatory Authority'
53
+ );
54
+ return $r;
55
+ }
56
+ }
57
+ ?>
lib/whois/whois.fj.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__FJ_HANDLER__'))
31
+ define('__FJ_HANDLER__', 1);
32
+
33
+ class fj_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'domain.status' => 'Status:',
40
+ 'domain.expires' => 'Expires:',
41
+ 'domain.nserver' => 'Domain servers:'
42
+ );
43
+
44
+ $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
45
+
46
+ if (!empty($r['regrinfo']['domain']['status']))
47
+ {
48
+ $r['regrinfo'] = get_contacts($r['regrinfo']);
49
+
50
+ date_default_timezone_set("Pacific/Fiji");
51
+
52
+ if (isset($r['regrinfo']['domain']['expires']))
53
+ $r['regrinfo']['domain']['expires'] = strftime("%Y-%m-%d",strtotime($r['regrinfo']['domain']['expires']));
54
+
55
+ $r['regrinfo']['registered'] = 'yes';
56
+ }
57
+ else
58
+ $r['regrinfo']['registered'] = 'no';
59
+
60
+ $r['regyinfo'] = array(
61
+ 'referrer' => 'http://www.domains.fj',
62
+ 'registrar' => 'FJ Domain Name Registry'
63
+ );
64
+ return $r;
65
+ }
66
+ }
67
+ ?>
lib/whois/whois.fm.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__FM_HANDLER__'))
29
+ define('__FM_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class fm_handler
34
+ {
35
+ function parse($data, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant',
39
+ 'admin' => 'Admin',
40
+ 'tech' => 'Technical',
41
+ 'billing' => 'Billing',
42
+ 'domain.nserver' => 'Name Servers:',
43
+ 'domain.created' => 'Created:',
44
+ 'domain.expires' => 'Expires:',
45
+ 'domain.changed' => 'Modified:',
46
+ 'domain.status' => 'Status:',
47
+ 'domain.sponsor' => 'Registrar Name:'
48
+ );
49
+
50
+ $r['regrinfo'] = get_blocks($data['rawdata'], $items);
51
+
52
+ $items = array(
53
+ 'phone number:' => 'phone',
54
+ 'email address:' => 'email',
55
+ 'fax number:' => 'fax',
56
+ 'organisation:' => 'organization'
57
+ );
58
+
59
+ if (!empty($r['regrinfo']['domain']['created']))
60
+ {
61
+ $r['regrinfo'] = get_contacts($r['regrinfo'],$items);
62
+
63
+ if (count($r['regrinfo']['billing']['address']) > 4)
64
+ $r['regrinfo']['billing']['address'] = array_slice($r['regrinfo']['billing']['address'],0,4);
65
+
66
+ $r['regrinfo']['registered'] = 'yes';
67
+ format_dates($r['regrinfo']['domain'],'dmY');
68
+ }
69
+ else
70
+ {
71
+ $r = '';
72
+ $r['regrinfo']['registered'] = 'no';
73
+ }
74
+
75
+ $r['regyinfo']['referrer'] = 'http://www.dot.dm';
76
+ $r['regyinfo']['registrar'] = 'dotFM';
77
+ return $r;
78
+ }
79
+ }
80
+ ?>
lib/whois/whois.fr.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__FR_HANDLER__'))
29
+ define('__FR_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class fr_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl' => 'handle',
41
+ 'ns-list' => 'handle',
42
+ 'person' => 'name',
43
+ 'address' => 'address.',
44
+ 'descr' => 'desc',
45
+ 'anniversary' => '',
46
+ 'domain' => '',
47
+ 'last-update' => 'changed',
48
+ 'registered' => 'created',
49
+ 'country' => 'address.country',
50
+ 'registrar' => 'sponsor',
51
+ 'role' => 'organization'
52
+ );
53
+
54
+ $contacts = array(
55
+ 'admin-c' => 'admin',
56
+ 'tech-c' => 'tech',
57
+ 'zone-c' => 'zone',
58
+ 'holder-c' => 'owner',
59
+ 'nsl-id' => 'nserver'
60
+ );
61
+
62
+ $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain','dmY');
63
+
64
+ if (isset($reg['nserver']))
65
+ {
66
+ $reg['domain'] = array_merge($reg['domain'],$reg['nserver']);
67
+ unset($reg['nserver']);
68
+ }
69
+
70
+ $r['regrinfo'] = $reg;
71
+ $r['regyinfo'] = array(
72
+ 'referrer' => 'http://www.nic.fr',
73
+ 'registrar' => 'AFNIC'
74
+ );
75
+ return $r;
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.gtld.afternic.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__AFTERNIC_HANDLER__'))
29
+ define('__AFTERNIC_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class afternic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'zone' => 'Zone Contact',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.changed' => 'Last updated on',
44
+ 'domain.created' => 'Domain created on',
45
+ 'domain.expires' => 'Domain expires on'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'dmy', false, false, true);
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.alldomains.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ALLDOMAINS_HANDLER__'))
29
+ define('__ALLDOMAINS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class alldomains_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative',
40
+ 'tech' => 'Technical',
41
+ 'domain.name' => 'Domain name:',
42
+ 'domain.sponsor' => 'Registrar:',
43
+ 'domain.nserver.' => 'Domain servers in listed order:'
44
+ );
45
+
46
+ return easy_parser($data_str, $items, 'ymd');
47
+ }
48
+ }
49
+ ?>
lib/whois/whois.gtld.ascio.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ASCIO_HANDLER__'))
29
+ define('__ASCIO_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ascio_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative ',
40
+ 'tech' => 'Technical ',
41
+ 'domain.name' => 'Domain name:',
42
+ 'domain.nserver.' => 'Domain servers in listed order:',
43
+ 'domain.created' => 'Record created:',
44
+ 'domain.expires' => 'Record expires:',
45
+ 'domain.changed' => 'Record last updated:'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'ymd',false,false,true);
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.assorted.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ASSORTED_HANDLER__'))
29
+ define('__ASSORTED_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class assorted_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.nserver.' => 'Domain servers in listed order:',
43
+ 'domain.created' => 'Record created on',
44
+ 'domain.expires' => 'Record expires on',
45
+ 'domain.changed' => 'Record last updated'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'ymd',false,false,true);
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.corporatedomains.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__CORPORATEDOMAINS_HANDLER__'))
29
+ define('__CORPORATEDOMAINS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class corporatedomains_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'zone' => 'Zone Contact',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.changed' => 'Last updated on',
44
+ 'domain.created' => 'Domain created on',
45
+ 'domain.expires' => 'Domain expires on',
46
+ 'domain.sponsor' => 'Registrar Name....:',
47
+ 'domain.nserver' => 'DNS Servers:'
48
+ );
49
+
50
+ return easy_parser($data_str, $items, 'dmy', false, false, true);
51
+ }
52
+ }
53
+ ?>
lib/whois/whois.gtld.directnic.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__DIRECTNIC_HANDLER__'))
29
+ define('__DIRECTNIC_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class directnic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.sponsor' => 'Registration Service Provider:',
43
+ 'domain.nserver' => 'Domain servers in listed order:',
44
+ 'domain.changed' => 'Record last updated ',
45
+ 'domain.created' => 'Record created on ',
46
+ 'domain.expires' => 'Record expires on ',
47
+ '' => 'By submitting a WHOIS query'
48
+ );
49
+
50
+ return easy_parser($data_str, $items, 'mdy',false,false,true);
51
+ }
52
+ }
53
+ ?>
lib/whois/whois.gtld.domaindiscover.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__DOMAINDISCOVER_HANDLER__'))
29
+ define('__DOMAINDISCOVER_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class domaindiscover_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'zone' => 'Zone Contact',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.changed' => 'Last updated on',
44
+ 'domain.created' => 'Domain created on',
45
+ 'domain.expires' => 'Domain expires on'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'dmy', false, false, true);
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.domainpeople.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__DOMAINPEOPLE_HANDLER__'))
29
+ define('__DOMAINPEOPLE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class domainpeople_handler
34
+ {
35
+
36
+ function parse($data_str, $query)
37
+ {
38
+
39
+ $items = array(
40
+ 'owner' => 'Registrant Contact:',
41
+ 'admin' => 'Administrative Contact:',
42
+ 'tech' => 'Technical Contact:',
43
+ 'domain.name' => 'Domain name:',
44
+ 'domain.sponsor' => 'Registration Service Provided By:',
45
+ 'domain.referrer' => 'Contact:',
46
+ 'domain.nserver.' => 'Name Servers:',
47
+ 'domain.created' => 'Creation date:',
48
+ 'domain.expires' => 'Expiration date:',
49
+ // 'domain.changed' => 'Record last updated on',
50
+ 'domain.status' => 'Status:'
51
+ );
52
+
53
+ $r = easy_parser($data_str, $items, 'dmy', false, false, true);
54
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
55
+ $r['domain']['sponsor'] = $r['domain']['sponsor'][0];
56
+ return $r;
57
+ }
58
+ }
59
+ ?>
lib/whois/whois.gtld.dotster.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__DOTSTER_HANDLER__'))
29
+ define('__DOTSTER_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class dotster_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative',
40
+ 'tech' => 'Technical',
41
+ 'domain.nserver' =>
42
+ 'Domain servers in listed order:',
43
+ 'domain.name' => 'Domain name:',
44
+ 'domain.created' => 'Created on:',
45
+ 'domain.expires' => 'Expires on:',
46
+ 'domain.changed' => 'Last Updated on:',
47
+ 'domain.sponsor' => 'Registrar:'
48
+ );
49
+
50
+ return easy_parser($data_str, $items, 'dmy');
51
+ }
52
+ }
53
+ ?>
lib/whois/whois.gtld.dreamhost.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__DREAMHOST_HANDLER__'))
29
+ define('__DREAMHOST_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class dreamhost_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant Contact:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'billing' => 'Billing Contact:',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.nserver' => 'Domain servers in listed order:',
44
+ 'domain.created' => 'Record created on',
45
+ 'domain.expires' => 'Record expires on'
46
+ );
47
+
48
+ $r = easy_parser($data_str, $items, 'dmy', false, false, true);
49
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
50
+ $r['domain']['sponsor'] = $r['domain']['sponsor'][0];
51
+ return $r;
52
+ }
53
+ }
54
+ ?>
lib/whois/whois.gtld.enom.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ENOM_HANDLER__'))
29
+ define('__ENOM_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class enom_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner#0' => 'Registrant Contact',
39
+ 'owner#1' => 'REGISTRANT Contact:',
40
+ 'admin#0' => 'Administrative Contact',
41
+ 'admin#1' => 'ADMINISTRATIVE Contact:',
42
+ 'tech#0' => 'Technical Contact',
43
+ 'tech#1' => 'TECHNICAL Contact:',
44
+ 'billing#0' => 'Billing Contact',
45
+ 'billing#1' => 'BILLING Contact:',
46
+ 'domain.nserver' => 'Nameservers',
47
+ 'domain.name#0' => 'Domain name:',
48
+ 'domain.name#1' => 'Domain name-',
49
+ 'domain.sponsor' => 'Registration Service Provided By:',
50
+ 'domain.status' => 'Status:',
51
+ 'domain.created#0' => 'Creation date:',
52
+ 'domain.expires#0' => 'Expiration date:',
53
+ 'domain.created#1' => 'Created:',
54
+ 'domain.expires#1' => 'Expires:',
55
+ 'domain.created#2' => 'Start of registration-',
56
+ 'domain.expires#2' => 'Registered through-'
57
+ );
58
+
59
+ return easy_parser($data_str, $items, 'dmy', false, false, true);
60
+ }
61
+ }
62
+ ?>
lib/whois/whois.gtld.fabulous.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__FABULOUS_HANDLER__'))
29
+ define('__FABULOUS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class fabulous_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Domain '.$query.':',
39
+ 'admin' => 'Administrative contact:',
40
+ 'tech' => 'Technical contact:',
41
+ 'billing' => 'Billing contact:',
42
+ '' => 'Record dates:'
43
+ );
44
+
45
+ $r = easy_parser($data_str, $items, 'mdy',false,false,true);
46
+
47
+ if (!isset($r['tech'])) $r['tech'] = $r['billing'];
48
+
49
+ if (!isset($r['admin'])) $r['admin'] = $r['tech'];
50
+
51
+ return $r;
52
+ }
53
+ }
54
+ ?>
lib/whois/whois.gtld.fastdomain.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__FASTDOMAIN_HANDLER__'))
29
+ define('__FASTDOMAIN_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class fastdomain_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant Info:',
39
+ 'admin' => 'Administrative Info:',
40
+ 'tech' => 'Technical Info:',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.sponsor' => 'Provider Name....:',
43
+ 'domain.referrer' => 'Provider Homepage:',
44
+ 'domain.nserver' => 'Domain servers in listed order:',
45
+ 'domain.created' => 'Created on..............:',
46
+ 'domain.expires' => 'Expires on..............:',
47
+ 'domain.changed' => 'Last modified on........:',
48
+ 'domain.status' => 'Status:'
49
+ );
50
+
51
+ while (list($key, $val) = each($data_str))
52
+ {
53
+ $faststr = strpos($val, ' (FAST-');
54
+ if ($faststr)
55
+ $data_str[$key] = substr($val, 0, $faststr);
56
+ }
57
+
58
+ $r = easy_parser($data_str, $items, 'dmy', false, false, true);
59
+
60
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
61
+
62
+ $r['domain']['sponsor'] = $r['domain']['sponsor'][0];
63
+
64
+ if (isset($r['domain']['nserver']))
65
+ {
66
+ reset($r['domain']['nserver']);
67
+ $endnserver = false;
68
+ while (list($key, $val) = each($r['domain']['nserver']))
69
+ {
70
+ if ($val == '=-=-=-=')
71
+ unset($r['domain']['nserver'][$key]);
72
+ }
73
+ }
74
+
75
+ return $r;
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.gtld.gandi.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__GANDI_HANDLER__'))
29
+ define('__GANDI_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class gandi_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'owner-c',
39
+ 'admin' => 'admin-c',
40
+ 'tech' => 'tech-c',
41
+ 'billing' => 'bill-c'
42
+ );
43
+
44
+ $trans = array(
45
+ 'nic-hdl:' => 'handle',
46
+ 'person:' => 'name',
47
+ 'zipcode:' => 'address.pcode',
48
+ 'city:' => 'address.city',
49
+ 'lastupdated:' => 'changed',
50
+ 'owner-name:' => ''
51
+ );
52
+
53
+ return easy_parser($data_str, $items, 'dmy', $trans);
54
+ }
55
+ }
56
+ ?>
lib/whois/whois.gtld.genericb.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__GENERICB_HANDLER__'))
29
+ define('__GENERICB_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class genericb_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ return generic_parser_b($data_str);
38
+ }
39
+ }
40
+ ?>
lib/whois/whois.gtld.godaddy.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__GODADDY_HANDLER__'))
29
+ define('__GODADDY_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class godaddy_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.nserver.' => 'Domain servers in listed order:',
43
+ 'domain.created' => 'Created on:',
44
+ 'domain.expires' => 'Expires on:',
45
+ 'domain.changed' => 'Last Updated on:',
46
+ 'domain.sponsor' => 'Registered through:'
47
+ );
48
+
49
+ $r = get_blocks($data_str, $items);
50
+ $r['owner'] = get_contact($r['owner']);
51
+ $r['admin'] = get_contact($r['admin'],false,true);
52
+ $r['tech'] = get_contact($r['tech'],false,true);
53
+ return format_dates($r, 'dmy');
54
+ }
55
+ }
56
+ ?>
lib/whois/whois.gtld.iana.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__IANA_HANDLER__'))
29
+ define('__IANA_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class iana_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'admin' => 'contact: administrative',
39
+ 'tech' => 'contact: technical',
40
+ 'domain.nserver.' => 'nserver:',
41
+ 'domain.created' => 'created:',
42
+ 'domain.changed' => 'changed:',
43
+ 'domain.source' => 'source:',
44
+ 'domain.name' => 'domain:',
45
+ 'disclaimer.' => '% '
46
+ );
47
+
48
+ return easy_parser($data_str,$items,'Ymd',false,false,false,'owner');
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.interdomain.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__INTERDOMAIN_HANDLER__'))
29
+ define('__INTERDOMAIN_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class interdomain_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'Domain Name................' => 'domain.name',
39
+ 'Creation Date............' => 'domain.created',
40
+ 'Expiry Date..............' => 'domain.expires',
41
+ 'Last Update Date.........' => 'domain.changed',
42
+ 'Name Server.............' => 'domain.nserver.',
43
+ 'Organization Name........' => 'owner.name',
44
+ 'Organization Org.........' => 'owner.organization',
45
+ 'Organization Street......' => 'owner.address.street',
46
+ 'Organization City........' => 'owner.address.city',
47
+ 'Organization State.......' => 'owner.address.state',
48
+ 'Organization PC..........' => 'owner.address.pcode',
49
+ 'Organization Country.....' => 'owner.address.country',
50
+ 'Organization Phone.......' => 'owner.phone',
51
+ 'Organization e-mail......' => 'owner.email',
52
+ 'Organization Contact Id....' => 'owner.handle',
53
+ 'Administrative Contact Id..' => 'admin.handle',
54
+ 'Administrative Name......' => 'admin.name',
55
+ 'Administrative Org.......' => 'admin.organization',
56
+ 'Administrative Street....' => 'admin.address.street',
57
+ 'Administrative City......' => 'admin.address.city',
58
+ 'Administrative State.....' => 'admin.address.state',
59
+ 'Administrative PC........' => 'admin.address.pcode',
60
+ 'Administrative Country...' => 'admin.address.country',
61
+ 'Administrative Phone.....' => 'admin.phone',
62
+ 'Administrative e-mail....' => 'admin.email',
63
+ 'Administrative Fax.......' => 'admin.fax',
64
+ 'Technical Contact Id.......' => 'tech.handle',
65
+ 'Technical Name...........' => 'tech.name',
66
+ 'Technical Org............' => 'tech.organization',
67
+ 'Technical Street.........' => 'tech.address.street',
68
+ 'Technical City...........' => 'tech.address.city',
69
+ 'Technical State..........' => 'tech.address.state',
70
+ 'Technical PC.............' => 'tech.address.pcode',
71
+ 'Technical Country........' => 'tech.address.country',
72
+ 'Technical Phone..........' => 'tech.phone',
73
+ 'Technical e-mail.........' => 'tech.email',
74
+ 'Technical Fax............' => 'tech.fax'
75
+ );
76
+
77
+ return generic_parser_b($data_str, $items, 'dmy');
78
+ }
79
+ }
80
+ ?>
lib/whois/whois.gtld.itsyourdomain.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ITSYOURDOMAIN_HANDLER__'))
29
+ define('__ITSYOURDOMAIN_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class itsyourdomain_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant',
39
+ 'admin' => 'Administrative',
40
+ 'tech' => 'Technical',
41
+ 'billing' => 'Billing',
42
+ 'domain.name' => 'Domain:',
43
+ 'domain.nserver.' => 'Domain Name Servers:',
44
+ 'domain.created' => 'Record created on ',
45
+ 'domain.expires' => 'Record expires on ',
46
+ 'domain.changed' => 'Record last updated on '
47
+ );
48
+
49
+ return easy_parser($data_str, $items, 'mdy');
50
+ }
51
+ }
52
+ ?>
lib/whois/whois.gtld.joker.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__JOKER_HANDLER__'))
29
+ define('__JOKER_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class joker_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'contact-hdl' => 'handle',
39
+ 'modified' => 'changed',
40
+ 'reseller' => 'sponsor',
41
+ 'address' => 'address.street',
42
+ 'postal-code' => 'address.pcode',
43
+ 'city' => 'address.city',
44
+ 'state' => 'address.state',
45
+ 'country' => 'address.country',
46
+ 'person' => 'name',
47
+ 'domain' => 'name'
48
+ );
49
+
50
+ $contacts = array(
51
+ 'admin-c' => 'admin',
52
+ 'tech-c' => 'tech',
53
+ 'billing-c' => 'billing'
54
+ );
55
+
56
+ $items = array(
57
+ 'owner' => 'name',
58
+ 'organization' => 'organization',
59
+ 'email' => 'email',
60
+ 'phone' => 'phone',
61
+ 'address' => 'address',
62
+ );
63
+
64
+ $r = generic_parser_a($data_str, $translate, $contacts, 'domain', 'Ymd');
65
+
66
+ foreach($items as $tag => $convert)
67
+ {
68
+ if (isset($r['domain'][$tag]))
69
+ {
70
+ $r['owner'][$convert] = $r['domain'][$tag];
71
+ unset($r['domain'][$tag]);
72
+ }
73
+ }
74
+
75
+ return $r;
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.gtld.markmonitor.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__MARKMONITOR_HANDLER__'))
29
+ define('__MARKMONITOR_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class markmonitor_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact, Zone Contact:',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.sponsor' => 'Registrar Name:',
43
+ 'domain.nserver' => 'Domain servers in listed order:',
44
+ 'domain.created' => 'Created on..............:',
45
+ 'domain.expires' => 'Expires on..............:',
46
+ 'domain.changed' => 'Record last updated on..:'
47
+ );
48
+
49
+ $r = easy_parser($data_str, $items, 'dmy', false, false, true);
50
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
51
+ $r['domain']['sponsor'] = $r['domain']['sponsor'][0];
52
+ return $r;
53
+ }
54
+ }
55
+ ?>
lib/whois/whois.gtld.melbourneit.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__MELBOURNEIT_HANDLER__'))
31
+ define('__MELBOURNEIT_HANDLER__', 1);
32
+
33
+ class melbourneit_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'Domain Name..........' => 'domain.name',
39
+ 'Registration Date....' => 'domain.created',
40
+ 'Expiry Date..........' => 'domain.expires',
41
+ 'Organisation Name....' => 'owner.name',
42
+ 'Organisation Address.' => 'owner.address.',
43
+ 'Admin Name...........' => 'admin.name',
44
+ 'Admin Address........' => 'admin.address.',
45
+ 'Admin Email..........' => 'admin.email',
46
+ 'Admin Phone..........' => 'admin.phone',
47
+ 'Admin Fax............' => 'admin.fax',
48
+ 'Tech Name............' => 'tech.name',
49
+ 'Tech Address.........' => 'tech.address.',
50
+ 'Tech Email...........' => 'tech.email',
51
+ 'Tech Phone...........' => 'tech.phone',
52
+ 'Tech Fax.............' => 'tech.fax',
53
+ 'Name Server..........' => 'domain.nserver.'
54
+ );
55
+
56
+ return generic_parser_b($data_str, $items, 'ymd');
57
+ }
58
+ }
59
+ ?>
lib/whois/whois.gtld.moniker.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__MONIKER_HANDLER__'))
29
+ define('__MONIKER_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class moniker_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant',
39
+ 'admin' => 'Administrative ',
40
+ 'tech' => 'Technical ',
41
+ 'billing' => 'Billing ',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.nserver.' => 'Domain servers in listed order:',
44
+ 'domain.created' => 'Record created on: ',
45
+ 'domain.expires' => 'Domain Expires on: ',
46
+ 'domain.changed' => 'Database last updated on: '
47
+ );
48
+
49
+ return easy_parser($data_str, $items, 'ymd');
50
+ }
51
+ }
52
+ ?>
lib/whois/whois.gtld.namejuice.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NAMEJUICE_HANDLER__'))
29
+ define('__NAMEJUICE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class namejuice_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant Contact:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'domain.name' => 'Domain name:',
42
+ 'domain.nserver.' => 'Name Servers:',
43
+ 'domain.created' => 'Creation date:',
44
+ 'domain.expires' => 'Expiration date:',
45
+ 'domain.changed' => 'Update date:',
46
+ 'domain.status' => 'Status:',
47
+ 'domain.sponsor' => 'Registration Service Provided By:'
48
+ );
49
+
50
+ return easy_parser($data_str, $items, 'dmy', false, true, true);
51
+ }
52
+ }
53
+ ?>
lib/whois/whois.gtld.nameking.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NAMEKING_HANDLER__'))
29
+ define('__NAMEKING_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class nameking_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant',
39
+ 'admin' => 'Admin Contact',
40
+ 'tech' => 'Tech Contact',
41
+ 'billing' => 'Billing Contact',
42
+ 'domain.sponsor' => 'Registration Provided By:',
43
+ 'domain.created' => 'Creation Date:',
44
+ 'domain.expires' => 'Expiration Date:',
45
+ );
46
+
47
+ $extra = array(
48
+ 'tel--' => 'phone',
49
+ 'tel:' => 'phone',
50
+ 'tel --:' => 'phone',
51
+ 'email-:' => 'email',
52
+ 'email:' => 'email',
53
+ 'mail:' => 'email',
54
+ 'name--' => 'name',
55
+ 'org:' => 'organization',
56
+ 'zipcode:' => 'address.pcode',
57
+ 'postcode:' => 'address.pcode',
58
+ 'address:' => 'address.street',
59
+ 'city:' => 'address.city',
60
+ 'province:' => 'address.city.',
61
+ ',province:' => '',
62
+ ',country:' => 'address.country',
63
+ 'organization:' => 'organization',
64
+ 'city, province, post code:' => 'address.city'
65
+ );
66
+
67
+ return easy_parser($data_str, $items, 'mdy', $extra, false, true);
68
+ }
69
+ }
70
+ ?>
lib/whois/whois.gtld.names4ever.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NAMES4EVER_HANDLER__'))
29
+ define('__NAMES4EVER_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class names4ever_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.sponsor' => 'Registrar Name....:',
43
+ 'domain.referrer' => 'Registrar Homepage:',
44
+ 'domain.nserver' => 'DNS Servers:',
45
+ 'domain.created' => 'Record created on',
46
+ 'domain.expires' => 'Record expires on',
47
+ 'domain.changed' => 'Record last updated on',
48
+ 'domain.status' => 'Domain status:'
49
+ );
50
+
51
+ return easy_parser($data_str, $items, 'dmy', false, false, true);
52
+ }
53
+ }
54
+ ?>
lib/whois/whois.gtld.namevault.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NAMEVAULT_HANDLER__'))
29
+ define('__NAMEVAULT_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class namevault_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'billing' => 'Billing Contact:',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.nserver.' => 'Name Servers',
44
+ 'domain.created' => 'Creation Date:',
45
+ 'domain.expires' => 'Expiration Date:',
46
+ 'domain.status' => 'Status:'
47
+ );
48
+
49
+ return easy_parser($data_str, $items, 'dmy', false, true, true);
50
+ }
51
+ }
52
+ ?>
lib/whois/whois.gtld.networksolutions.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NETWORKSOLUTIONS_HANDLER__'))
29
+ define('__NETWORKSOLUTIONS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class networksolutions_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.nserver.' => 'Domain servers in listed order:',
43
+ 'domain.created' => 'Record created on',
44
+ 'domain.expires' => 'Record expires on'
45
+ );
46
+
47
+ return easy_parser($data_str, $items, 'dmy',false,true,true);
48
+ }
49
+ }
50
+ ?>
lib/whois/whois.gtld.nicco.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NICCO_HANDLER__'))
29
+ define('__NICCO_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class nicco_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Holder Contact',
39
+ 'admin' => 'Admin Contact',
40
+ 'tech' => 'Tech. Contact',
41
+ 'domain.nserver.' => 'Nameservers',
42
+ 'domain.created' => 'Creation Date:',
43
+ 'domain.expires' => 'Expiration Date:'
44
+ );
45
+
46
+ $translate = array(
47
+ 'city:' => 'address.city',
48
+ 'org. name:' => 'organization',
49
+ 'address1:' => 'address.street.',
50
+ 'address2:' => 'address.street.',
51
+ 'state:' => 'address.state',
52
+ 'postal code:' => 'address.zip'
53
+ );
54
+
55
+ $r = get_blocks($data_str, $items, true);
56
+ $r['owner'] = get_contact($r['owner'],$translate);
57
+ $r['admin'] = get_contact($r['admin'],$translate,true);
58
+ $r['tech'] = get_contact($r['tech'],$translate,true);
59
+ return format_dates($r, 'dmy');
60
+ }
61
+ }
62
+ ?>
lib/whois/whois.gtld.nicline.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NICLINE_HANDLER__'))
29
+ define('__NICLINE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class nicline_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative contact:',
40
+ 'tech' => 'Technical contact:',
41
+ 'domain.name' => 'Domain name:',
42
+ 'domain.nserver.' => 'Domain servers in listed order:',
43
+ 'domain.created' => 'Created:',
44
+ 'domain.expires' => 'Expires:',
45
+ 'domain.changed' => 'Last updated:'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'dmy');
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.onlinenic.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ONLINENIC_HANDLER__'))
29
+ define('__ONLINENIC_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class onlinenic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrator:',
40
+ 'tech' => 'Technical Contactor:',
41
+ 'billing' => 'Billing Contactor:',
42
+ 'domain.name' => 'Domain name:',
43
+ 'domain.name#' => 'Domain Name:',
44
+ 'domain.nserver' => 'Domain servers in listed order:',
45
+ 'domain.created' => 'Record created on ',
46
+ 'domain.expires' => 'Record expired on ',
47
+ 'domain.changed' => 'Record last updated at '
48
+ );
49
+
50
+ $extra = array(
51
+ 'tel--' => 'phone',
52
+ 'tel:' => 'phone',
53
+ 'tel --:' => 'phone',
54
+ 'email-:' => 'email',
55
+ 'email:' => 'email',
56
+ 'mail:' => 'email',
57
+ 'name--' => 'name',
58
+ 'org:' => 'organization',
59
+ 'zipcode:' => 'address.pcode',
60
+ 'postcode:' => 'address.pcode',
61
+ 'address:' => 'address.street',
62
+ 'city:' => 'address.city',
63
+ 'province:' => '',
64
+ ',province:' => '',
65
+ ',country:' => 'address.country'
66
+ );
67
+
68
+ $r = easy_parser($data_str, $items, 'mdy',$extra,false,true);
69
+
70
+ foreach($r as $key => $part)
71
+ if (isset($part['email']))
72
+ {
73
+ @list($email,$phone) = explode(' ',$part['email']);
74
+ $email = str_replace('(','',$email);
75
+ $email = str_replace(')','',$email);
76
+ $r[$key]['email'] = $email;
77
+ if ($phone != '') $r[$key]['phone'] = $phone;
78
+ }
79
+
80
+ return $r;
81
+ }
82
+ }
83
+ ?>
lib/whois/whois.gtld.opensrs.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__OPENSRS_HANDLER__'))
29
+ define('__OPENSRS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class opensrs_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'domain.name' => 'Domain name:',
42
+ '' => 'Registration Service Provider:',
43
+ 'domain.nserver' => 'Domain servers in listed order:',
44
+ 'domain.changed' => 'Record last updated on',
45
+ 'domain.created' => 'Record created on',
46
+ 'domain.expires' => 'Record expires on',
47
+ 'domain.sponsor' => 'Registrar of Record:'
48
+ );
49
+
50
+ $r = easy_parser($data_str, $items, 'dmy', false, false, true);
51
+
52
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
53
+ $r['domain']['sponsor'] = $r['domain']['sponsor'][0];
54
+
55
+ return $r;
56
+ }
57
+ }
58
+ ?>
lib/whois/whois.gtld.ovh.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__OVH_HANDLER__'))
29
+ define('__OVH_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ovh_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'billing' => 'Billing Contact:',
42
+ 'domain.sponsor' => 'Registrar of Record:',
43
+ 'domain.changed' => 'Record last updated on',
44
+ 'domain.expires' => 'Record expires on',
45
+ 'domain.created' => 'Record created on'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'mdy',false,false,true);
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__GTLD_HANDLER__'))
29
+ define('__GTLD_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class gtld_handler extends WhoisClient
34
+ {
35
+ var $HANDLER_VERSION = '1.1';
36
+
37
+ var $REG_FIELDS = array(
38
+ 'Domain Name:' => 'regrinfo.domain.name',
39
+ 'Registrar:' => 'regyinfo.registrar',
40
+ 'Whois Server:' => 'regyinfo.whois',
41
+ 'Referral URL:' => 'regyinfo.referrer',
42
+ 'Name Server:' => 'regrinfo.domain.nserver.', // identical descriptors
43
+ 'Updated Date:' => 'regrinfo.domain.changed',
44
+ 'Last Updated On:' => 'regrinfo.domain.changed',
45
+ 'EPP Status:' => 'regrinfo.domain.epp_status.',
46
+ 'Status:' => 'regrinfo.domain.status.',
47
+ 'Creation Date:' => 'regrinfo.domain.created',
48
+ 'Created On:' => 'regrinfo.domain.created',
49
+ 'Expiration Date:' => 'regrinfo.domain.expires',
50
+ 'Updated Date:' => 'regrinfo.domain.changed',
51
+ 'No match for ' => 'nodomain'
52
+ );
53
+
54
+ function parse($data, $query)
55
+ {
56
+ $this->Query = array();
57
+ $this->SUBVERSION = sprintf('%s-%s', $query['handler'], $this->HANDLER_VERSION);
58
+ $this->result = generic_parser_b($data['rawdata'], $this->REG_FIELDS, 'dmy');
59
+
60
+ unset($this->result['registered']);
61
+
62
+ if (isset($this->result['nodomain']))
63
+ {
64
+ unset($this->result['nodomain']);
65
+ $this->result['regrinfo']['registered'] = 'no';
66
+ return $this->result;
67
+ }
68
+
69
+ if ($this->deep_whois) $this->result = $this->DeepWhois($query,$this->result);
70
+
71
+ // Next server could fail to return data
72
+ if (empty($this->result['rawdata']) || count($this->result['rawdata']) < 3)
73
+ $this->result['rawdata'] = $data['rawdata'];
74
+
75
+ // Domain is registered no matter what next server says
76
+ $this->result['regrinfo']['registered'] = 'yes';
77
+
78
+ return $this->result;
79
+ }
80
+ }
81
+ ?>
lib/whois/whois.gtld.psiusa.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__PSIUSA_HANDLER__'))
29
+ define('__PSIUSA_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class psiusa_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'created:' => 'domain.created',
39
+ 'last-changed:' => 'domain.changed',
40
+ 'status:' => 'domain.status',
41
+ '[owner-c] fname:' => 'owner.name.first',
42
+ '[owner-c] lname:' => 'owner.name.last',
43
+ '[owner-c] org:' => 'owner.organization',
44
+ '[owner-c] address:' => 'owner.address.street',
45
+ '[owner-c] city:' => 'owner.address.city',
46
+ '[owner-c] pcode:' => 'owner.address.pcode',
47
+ '[owner-c] country:' => 'owner.address.country',
48
+ '[owner-c] state:' => 'owner.address.state',
49
+ '[owner-c] phone:' => 'owner.phone',
50
+ '[owner-c] fax:' => 'owner.fax',
51
+ '[owner-c] email:' => 'owner.email',
52
+ '[admin-c] fname:' => 'admin.name.first',
53
+ '[admin-c] lname:' => 'admin.name.last',
54
+ '[admin-c] org:' => 'admin.organization',
55
+ '[admin-c] address:' => 'admin.address.street',
56
+ '[admin-c] city:' => 'admin.address.city',
57
+ '[admin-c] pcode:' => 'admin.address.pcode',
58
+ '[admin-c] country:' => 'admin.address.country',
59
+ '[admin-c] state:' => 'admin.address.state',
60
+ '[admin-c] phone:' => 'admin.phone',
61
+ '[admin-c] fax:' => 'admin.fax',
62
+ '[admin-c] email:' => 'admin.email',
63
+ '[tech-c] fname:' => 'tech.name.first',
64
+ '[tech-c] lname:' => 'tech.name.last',
65
+ '[tech-c] org:' => 'tech.organization',
66
+ '[tech-c] address:' => 'tech.address.street',
67
+ '[tech-c] city:' => 'tech.address.city',
68
+ '[tech-c] pcode:' => 'tech.address.pcode',
69
+ '[tech-c] country:' => 'tech.address.country',
70
+ '[tech-c] state:' => 'tech.address.state',
71
+ '[tech-c] phone:' => 'tech.phone',
72
+ '[tech-c] fax:' => 'tech.fax',
73
+ '[tech-c] email:' => 'tech.email',
74
+ '[zone-c] fname:' => 'zone.name.first',
75
+ '[zone-c] lname:' => 'zone.name.last',
76
+ '[zone-c] org:' => 'zone.organization',
77
+ '[zone-c] address:' => 'zone.address.street',
78
+ '[zone-c] city:' => 'zone.address.city',
79
+ '[zone-c] pcode:' => 'zone.address.pcode',
80
+ '[zone-c] country:' => 'zone.address.country',
81
+ '[zone-c] state:' => 'zone.address.state',
82
+ '[zone-c] phone:' => 'zone.phone',
83
+ '[zone-c] fax:' => 'zone.fax',
84
+ '[zone-c] email:' => 'zone.email',
85
+ );
86
+
87
+ return generic_parser_b($data_str, $items);
88
+ }
89
+ }
90
+ ?>
lib/whois/whois.gtld.publicdomainregistry.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__PUBLICDOMAINREGISTRY_HANDLER__'))
29
+ define('__PUBLICDOMAINREGISTRY_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class publicdomainregistry_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'owner#' => '(Registrant):',
40
+ 'admin' => 'Administrative Contact',
41
+ 'tech' => 'Technical Contact',
42
+ 'billing' => 'Billing Contact',
43
+ 'domain.name' => 'Domain name:',
44
+ 'domain.sponsor' => 'Registration Service Provided By:',
45
+ 'domain.nserver' => 'Domain servers in listed order:',
46
+ 'domain.changed' => 'Record last updated ',
47
+ 'domain.created' => 'Record created on',
48
+ 'domain.created#' => 'Creation Date:',
49
+ 'domain.expires' => 'Record expires on',
50
+ 'domain.expires#' => 'Expiration Date:',
51
+ 'domain.status' => 'Status:'
52
+ );
53
+
54
+ return easy_parser($data_str, $items, 'mdy', false, true, true);
55
+ }
56
+ }
57
+ ?>
lib/whois/whois.gtld.register.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__REGISTER_HANDLER__'))
29
+ define('__REGISTER_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class register_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner#0' => 'Registrant Info:',
39
+ 'owner#1' => 'Organization:',
40
+ 'owner#2' => 'Registrant:',
41
+ 'owner#3' => 'Registrant Contact:',
42
+ 'admin' => 'Administrative',
43
+ 'tech' => 'Technical',
44
+ 'zone' => 'Zone',
45
+ 'domain.sponsor#0' => 'Registrar Name....:',
46
+ 'domain.sponsor#1' => 'Registration Service Provided By:',
47
+ 'domain.referrer' => 'Registrar Homepage:',
48
+ 'domain.nserver' => 'Domain servers in listed order:',
49
+ 'domain.nserver' => 'DNS Servers:',
50
+ 'domain.name' => 'Domain name:',
51
+ 'domain.created#0' => 'Created on..............:',
52
+ 'domain.created#1' => 'Creation date:',
53
+ 'domain.expires#0' => 'Expires on..............:',
54
+ 'domain.expires#1' => 'Expiration date:',
55
+ 'domain.changed' => 'Record last updated on..:',
56
+ 'domain.status' => 'Status:'
57
+ );
58
+
59
+ return easy_parser($data_str, $items, 'ymd');
60
+ }
61
+ }
62
+ ?>
lib/whois/whois.gtld.rrpproxy.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__RRPPROXY_HANDLER__'))
29
+ define('__RRPPROXY_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class rrpproxy_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'created-date:' => 'domain.created',
39
+ 'updated-date:' => 'domain.changed',
40
+ 'registration-expiration-date:' => 'domain.expires',
41
+ 'RSP:' => 'domain.sponsor',
42
+ 'URL:' => 'domain.referrer',
43
+ 'owner-nom.contact:' => 'owner.handle',
44
+ 'owner-fname:' => 'owner.name.first',
45
+ 'owner-lname:' => 'owner.name.last',
46
+ 'owner-organization:' => 'owner.organization',
47
+ 'owner-street:' => 'owner.address.street',
48
+ 'owner-city:' => 'owner.address.city',
49
+ 'owner-zip:' => 'owner.address.pcode',
50
+ 'owner-country:' => 'owner.address.country',
51
+ 'owner-phone:' => 'owner.phone',
52
+ 'owner-fax:' => 'owner.fax',
53
+ 'owner-email:' => 'owner.email',
54
+ 'admin-nom.contact:' => 'admin.handle',
55
+ 'admin-fname:' => 'admin.name.first',
56
+ 'admin-lname:' => 'admin.name.last',
57
+ 'admin-organization:' => 'admin.organization',
58
+ 'admin-street:' => 'admin.address.street',
59
+ 'admin-city:' => 'admin.address.city',
60
+ 'admin-zip:' => 'admin.address.pcode',
61
+ 'admin-country:' => 'admin.address.country',
62
+ 'admin-phone:' => 'admin.phone',
63
+ 'admin-fax:' => 'admin.fax',
64
+ 'admin-email:' => 'admin.email',
65
+ 'tech-nom.contact:' => 'tech.handle',
66
+ 'tech-fname:' => 'tech.name.first',
67
+ 'tech-lname:' => 'tech.name.last',
68
+ 'tech-organization:' => 'tech.organization',
69
+ 'tech-street:' => 'tech.address.street',
70
+ 'tech-city:' => 'tech.address.city',
71
+ 'tech-zip:' => 'tech.address.pcode',
72
+ 'tech-country:' => 'tech.address.country',
73
+ 'tech-phone:' => 'tech.phone',
74
+ 'tech-fax:' => 'tech.fax',
75
+ 'tech-email:' => 'tech.email',
76
+ 'billing-nom.contact:' => 'billing.handle',
77
+ 'billing-fname:' => 'billing.name.first',
78
+ 'billing-lname:' => 'billing.name.last',
79
+ 'billing-organization:' => 'billing.organization',
80
+ 'billing-street:' => 'billing.address.street',
81
+ 'billing-city:' => 'billing.address.city',
82
+ 'billing-zip:' => 'billing.address.pcode',
83
+ 'billing-country:' => 'billing.address.country',
84
+ 'billing-phone:' => 'billing.phone',
85
+ 'billing-fax:' => 'billing.fax',
86
+ 'billing-email:' => 'billing.email'
87
+ );
88
+
89
+ return generic_parser_b($data_str, $items);
90
+ }
91
+ }
92
+ ?>
lib/whois/whois.gtld.schlund.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__SCHLUND_HANDLER__'))
29
+ define('__SCHLUND_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class schlund_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'created:' => 'domain.created',
39
+ 'last-changed:' => 'domain.changed',
40
+ 'status:' => 'domain.status',
41
+ 'registrant-firstname:' => 'owner.name.first',
42
+ 'registrant-lastname:' => 'owner.name.last',
43
+ 'registrant-organization:' => 'owner.organization',
44
+ 'registrant-street1:' => 'owner.address.street.',
45
+ 'registrant-street2:' => 'owner.address.street.',
46
+ 'registrant-pcode:' => 'owner.address.pcode',
47
+ 'registrant-city:' => 'owner.address.city',
48
+ 'registrant-ccode:' => 'owner.address.country',
49
+ 'registrant-phone:' => 'owner.phone',
50
+ 'registrant-email:' => 'owner.email',
51
+ 'admin-c-firstname:' => 'admin.name.first',
52
+ 'admin-c-lastname:' => 'admin.name.last',
53
+ 'admin-c-organization:' => 'admin.organization',
54
+ 'admin-c-street1:' => 'admin.address.street.',
55
+ 'admin-c-street2:' => 'admin.address.street.',
56
+ 'admin-c-pcode:' => 'admin.address.pcode',
57
+ 'admin-c-city:' => 'admin.address.city',
58
+ 'admin-c-ccode:' => 'admin.address.country',
59
+ 'admin-c-phone:' => 'admin.phone',
60
+ 'admin-c-email:' => 'admin.email',
61
+ 'tech-c-firstname:' => 'tech.name.first',
62
+ 'tech-c-lastname:' => 'tech.name.last',
63
+ 'tech-c-organization:' => 'tech.organization',
64
+ 'tech-c-street1:' => 'tech.address.street.',
65
+ 'tech-c-street2:' => 'tech.address.street.',
66
+ 'tech-c-pcode:' => 'tech.address.pcode',
67
+ 'tech-c-city:' => 'tech.address.city',
68
+ 'tech-c-ccode:' => 'tech.address.country',
69
+ 'tech-c-phone:' => 'tech.phone',
70
+ 'tech-c-email:' => 'tech.email',
71
+ 'bill-c-firstname:' => 'billing.name.first',
72
+ 'bill-c-lastname:' => 'billing.name.last',
73
+ 'bill-c-organization:' => 'billing.organization',
74
+ 'bill-c-street1:' => 'billing.address.street.',
75
+ 'bill-c-street2:' => 'billing.address.street.',
76
+ 'bill-c-pcode:' => 'billing.address.pcode',
77
+ 'bill-c-city:' => 'billing.address.city',
78
+ 'bill-c-ccode:' => 'billing.address.country',
79
+ 'bill-c-phone:' => 'billing.phone',
80
+ 'bill-c-email:' => 'billing.email'
81
+ );
82
+
83
+ return generic_parser_b($data_str, $items);
84
+ }
85
+ }
86
+ ?>
lib/whois/whois.gtld.srsplus.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__SRSPLUS_HANDLER__'))
29
+ define('__SRSPLUS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class srsplus_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative',
40
+ 'tech' => 'Technical',
41
+ 'billing' => 'Billing',
42
+ 'domain.name' => 'Domain Name:',
43
+ 'domain.nserver' => 'Domain servers:',
44
+ 'domain.created' => 'Record created on',
45
+ 'domain.expires' => 'Record expires on'
46
+ );
47
+
48
+ return easy_parser($data_str, $items, 'ymd',false,true,true);
49
+ }
50
+ }
51
+ ?>
lib/whois/whois.gtld.tmagnic.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__TMAGNIC_HANDLER__'))
29
+ define('__TMAGNIC_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class tmagnic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Owner Contact:',
39
+ 'admin' => 'Admin Contact',
40
+ 'tech' => 'Technical Contact',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.nserver.' => 'Domain servers in listed order:',
43
+ 'domain.expires' => 'Record expires on: ',
44
+ 'domain.changed' => 'Record last updated on: ',
45
+ '' => 'Zone Contact',
46
+ '#' => 'Punycode Name:'
47
+ );
48
+
49
+ return easy_parser($data_str, $items, 'ymd',false,false,true);
50
+ }
51
+ }
52
+ ?>
lib/whois/whois.gtld.tvcorp.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__TVCORP_HANDLER__'))
29
+ define('__TVCORP_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class tvcorp_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant',
39
+ 'admin' => 'Admin',
40
+ 'tech' => 'Technical',
41
+ 'billing' => 'Billing',
42
+ 'domain.nserver.' => 'Domain servers:',
43
+ 'domain.created' => 'Record created on',
44
+ 'domain.expires' => 'Record expires on'
45
+ );
46
+
47
+ return easy_parser($data_str, $items, 'mdy');
48
+ }
49
+ }
50
+ ?>
lib/whois/whois.gtld.wildwestdomains.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__WILDWESTDOMAINS_HANDLER__'))
29
+ define('__WILDWESTDOMAINS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class wildwestdomains_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'domain.name' => 'Domain name:',
42
+ 'domain.sponsor'=> 'Registered through:',
43
+ 'domain.nserver' => 'Domain servers in listed order:',
44
+ 'domain.created' => 'Created on:',
45
+ 'domain.expires' => 'Expires on:',
46
+ 'domain.changed' => 'Last Updated on:'
47
+ );
48
+
49
+ return easy_parser($data_str, $items, 'mdy');
50
+ }
51
+ }
52
+ ?>
lib/whois/whois.hu.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if(!defined('__HU_HANDLER__'))
29
+ define('__HU_HANDLER__',1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class hu_handler
34
+ {
35
+ function parse ($data_str, $query)
36
+ {
37
+ $translate = array (
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'hun-id' => 'handle',
41
+ 'person' => 'name',
42
+ 'nameserver' => 'nserver',
43
+ 'person' => 'name',
44
+ 'org' => 'organization',
45
+ 'registered' => 'created'
46
+ );
47
+
48
+ $contacts = array (
49
+ 'registrar' => 'owner',
50
+ 'admin-c' => 'admin',
51
+ 'tech-c' => 'tech',
52
+ 'billing-c' => 'billing',
53
+ 'zone-c' => 'zone',
54
+ 'owner-hun-id' => 'owner'
55
+ );
56
+
57
+ // make those broken hungary comments standards-conforming
58
+ // replace first found hun-id with owner-hun-id (will be parsed later on)
59
+ // make output UTF-8
60
+
61
+ $comments = true;
62
+ $owner_id = true;
63
+
64
+ foreach ($data_str['rawdata'] as $i => $val)
65
+ {
66
+ if ($comments)
67
+ {
68
+ if (strpos($data_str['rawdata'][$i],'domain:') === false)
69
+ {
70
+ if ($i) $data_str['rawdata'][$i] = '% '.$data_str['rawdata'][$i];
71
+ }
72
+ else
73
+ $comments = false;
74
+ }
75
+ else
76
+ if ($owner_id && substr($data_str['rawdata'][$i],0,7) == 'hun-id:')
77
+ {
78
+ $data_str['rawdata'][$i] = 'owner-'.$data_str['rawdata'][$i];
79
+ $owner_id = false;
80
+ }
81
+ }
82
+
83
+ $reg = generic_parser_a($data_str['rawdata'],$translate,$contacts);
84
+
85
+ unset($reg['domain']['organization']);
86
+ unset($reg['domain']['address']);
87
+ unset($reg['domain']['phone']);
88
+ unset($reg['domain']['fax']);
89
+
90
+ $r['regrinfo'] = $reg;
91
+ $r['regyinfo'] = array('referrer'=>'http://www.nic.hu','registrar'=>'HUNIC');
92
+ return format_dates($r,'ymd');
93
+ }
94
+ }
95
+ ?>
lib/whois/whois.icon.png ADDED
Binary file
lib/whois/whois.idna.php ADDED
@@ -0,0 +1,969 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // {{{ license
3
+
4
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
5
+ //
6
+ // +----------------------------------------------------------------------+
7
+ // | This library is free software; you can redistribute it and/or modify |
8
+ // | it under the terms of the GNU Lesser General Public License as |
9
+ // | published by the Free Software Foundation; either version 2.1 of the |
10
+ // | License, or (at your option) any later version. |
11
+ // | |
12
+ // | This library is distributed in the hope that it will be useful, but |
13
+ // | WITHOUT ANY WARRANTY; without even the implied warranty of |
14
+ // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15
+ // | Lesser General Public License for more details. |
16
+ // | |
17
+ // | You should have received a copy of the GNU Lesser General Public |
18
+ // | License along with this library; if not, write to the Free Software |
19
+ // | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
20
+ // | USA. |
21
+ // +----------------------------------------------------------------------+
22
+ //
23
+
24
+ // }}}
25
+
26
+ /**
27
+ * Encode/decode Internationalized Domain Names.
28
+ *
29
+ * The class allows to convert internationalized domain names
30
+ * (see RFC 3490 for details) as they can be used with various registries worldwide
31
+ * to be translated between their original (localized) form and their encoded form
32
+ * as it will be used in the DNS (Domain Name System).
33
+ *
34
+ * The class provides two public methods, encode() and decode(), which do exactly
35
+ * what you would expect them to do. You are allowed to use complete domain names,
36
+ * simple strings and complete email addresses as well. That means, that you might
37
+ * use any of the following notations:
38
+ *
39
+ * - www.nörgler.com
40
+ * - xn--nrgler-wxa
41
+ * - xn--brse-5qa.xn--knrz-1ra.info
42
+ *
43
+ * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4
44
+ * array. Unicode output is available in the same formats.
45
+ * You can select your preferred format via {@link set_paramter()}.
46
+ *
47
+ * ACE input and output is always expected to be ASCII.
48
+ *
49
+ * @author Matthias Sommerfeld <mso@phlylabs.de>
50
+ * @copyright 2004-2007 phlyLabs Berlin, http://phlylabs.de
51
+ * @version 0.5.1
52
+ *
53
+ */
54
+ class idna_convert
55
+ {
56
+ /**
57
+ * Holds all relevant mapping tables, loaded from a seperate file on construct
58
+ * See RFC3454 for details
59
+ *
60
+ * @var array
61
+ * @access private
62
+ */
63
+ var $NP = array();
64
+
65
+ // Internal settings, do not mess with them
66
+ var $_punycode_prefix = 'xn--';
67
+ var $_invalid_ucs = 0x80000000;
68
+ var $_max_ucs = 0x10FFFF;
69
+ var $_base = 36;
70
+ var $_tmin = 1;
71
+ var $_tmax = 26;
72
+ var $_skew = 38;
73
+ var $_damp = 700;
74
+ var $_initial_bias = 72;
75
+ var $_initial_n = 0x80;
76
+ var $_sbase = 0xAC00;
77
+ var $_lbase = 0x1100;
78
+ var $_vbase = 0x1161;
79
+ var $_tbase = 0x11A7;
80
+ var $_lcount = 19;
81
+ var $_vcount = 21;
82
+ var $_tcount = 28;
83
+ var $_ncount = 588; // _vcount * _tcount
84
+ var $_scount = 11172; // _lcount * _tcount * _vcount
85
+ var $_error = false;
86
+
87
+ // See {@link set_paramter()} for details of how to change the following
88
+ // settings from within your script / application
89
+ var $_api_encoding = 'utf8'; // Default input charset is UTF-8
90
+ var $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden
91
+ var $_strict_mode = false; // Behave strict or not
92
+
93
+ // The constructor
94
+ function idna_convert($options = false)
95
+ {
96
+ $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
97
+ if (function_exists('file_get_contents')) {
98
+ $this->NP = unserialize(file_get_contents(dirname(__FILE__).'/npdata.ser'));
99
+ } else {
100
+ $this->NP = unserialize(join('', file(dirname(__FILE__).'/npdata.ser')));
101
+ }
102
+ // If parameters are given, pass these to the respective method
103
+ if (is_array($options)) {
104
+ return $this->set_parameter($options);
105
+ }
106
+ return true;
107
+ }
108
+
109
+ /**
110
+ * Sets a new option value. Available options and values:
111
+ * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
112
+ * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
113
+ * [overlong - Unicode does not allow unnecessarily long encodings of chars,
114
+ * to allow this, set this parameter to true, else to false;
115
+ * default is false.]
116
+ * [strict - true: strict mode, good for registration purposes - Causes errors
117
+ * on failures; false: loose mode, ideal for "wildlife" applications
118
+ * by silently ignoring errors and returning the original input instead
119
+ *
120
+ * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
121
+ * @param string Value to use (if parameter 1 is a string)
122
+ * @return boolean true on success, false otherwise
123
+ * @access public
124
+ */
125
+ function set_parameter($option, $value = false)
126
+ {
127
+ if (!is_array($option)) {
128
+ $option = array($option => $value);
129
+ }
130
+ foreach ($option as $k => $v) {
131
+ switch ($k) {
132
+ case 'encoding':
133
+ switch ($v) {
134
+ case 'utf8':
135
+ case 'ucs4_string':
136
+ case 'ucs4_array':
137
+ $this->_api_encoding = $v;
138
+ break;
139
+ default:
140
+ $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
141
+ return false;
142
+ }
143
+ break;
144
+ case 'overlong':
145
+ $this->_allow_overlong = ($v) ? true : false;
146
+ break;
147
+ case 'strict':
148
+ $this->_strict_mode = ($v) ? true : false;
149
+ break;
150
+ default:
151
+ $this->_error('Set Parameter: Unknown option '.$k);
152
+ return false;
153
+ }
154
+ }
155
+ return true;
156
+ }
157
+
158
+ /**
159
+ * Decode a given ACE domain name
160
+ * @param string Domain name (ACE string)
161
+ * [@param string Desired output encoding, see {@link set_parameter}]
162
+ * @return string Decoded Domain name (UTF-8 or UCS-4)
163
+ * @access public
164
+ */
165
+ function decode($input, $one_time_encoding = false)
166
+ {
167
+ // Optionally set
168
+ if ($one_time_encoding) {
169
+ switch ($one_time_encoding) {
170
+ case 'utf8':
171
+ case 'ucs4_string':
172
+ case 'ucs4_array':
173
+ break;
174
+ default:
175
+ $this->_error('Unknown encoding '.$one_time_encoding);
176
+ return false;
177
+ }
178
+ }
179
+ // Make sure to drop any newline characters around
180
+ $input = trim($input);
181
+
182
+ // Negotiate input and try to determine, whether it is a plain string,
183
+ // an email address or something like a complete URL
184
+ if (strpos($input, '@')) { // Maybe it is an email address
185
+ // No no in strict mode
186
+ if ($this->_strict_mode) {
187
+ $this->_error('Only simple domain name parts can be handled in strict mode');
188
+ return false;
189
+ }
190
+ list ($email_pref, $input) = explode('@', $input, 2);
191
+ $arr = explode('.', $input);
192
+ foreach ($arr as $k => $v) {
193
+ if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
194
+ $conv = $this->_decode($v);
195
+ if ($conv) $arr[$k] = $conv;
196
+ }
197
+ }
198
+ $input = join('.', $arr);
199
+ $arr = explode('.', $email_pref);
200
+ foreach ($arr as $k => $v) {
201
+ if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
202
+ $conv = $this->_decode($v);
203
+ if ($conv) $arr[$k] = $conv;
204
+ }
205
+ }
206
+ $email_pref = join('.', $arr);
207
+ $return = $email_pref . '@' . $input;
208
+ } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
209
+ // No no in strict mode
210
+ if ($this->_strict_mode) {
211
+ $this->_error('Only simple domain name parts can be handled in strict mode');
212
+ return false;
213
+ }
214
+ $parsed = parse_url($input);
215
+ if (isset($parsed['host'])) {
216
+ $arr = explode('.', $parsed['host']);
217
+ foreach ($arr as $k => $v) {
218
+ $conv = $this->_decode($v);
219
+ if ($conv) $arr[$k] = $conv;
220
+ }
221
+ $parsed['host'] = join('.', $arr);
222
+ $return =
223
+ (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'))
224
+ .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@')
225
+ .$parsed['host']
226
+ .(empty($parsed['port']) ? '' : ':'.$parsed['port'])
227
+ .(empty($parsed['path']) ? '' : $parsed['path'])
228
+ .(empty($parsed['query']) ? '' : '?'.$parsed['query'])
229
+ .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
230
+ } else { // parse_url seems to have failed, try without it
231
+ $arr = explode('.', $input);
232
+ foreach ($arr as $k => $v) {
233
+ $conv = $this->_decode($v);
234
+ $arr[$k] = ($conv) ? $conv : $v;
235
+ }
236
+ $return = join('.', $arr);
237
+ }
238
+ } else { // Otherwise we consider it being a pure domain name string
239
+ $return = $this->_decode($input);
240
+ if (!$return) $return = $input;
241
+ }
242
+ // The output is UTF-8 by default, other output formats need conversion here
243
+ // If one time encoding is given, use this, else the objects property
244
+ switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
245
+ case 'utf8':
246
+ return $return;
247
+ break;
248
+ case 'ucs4_string':
249
+ return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
250
+ break;
251
+ case 'ucs4_array':
252
+ return $this->_utf8_to_ucs4($return);
253
+ break;
254
+ default:
255
+ $this->_error('Unsupported output format');
256
+ return false;
257
+ }
258
+ }
259
+
260
+ /**
261
+ * Encode a given UTF-8 domain name
262
+ * @param string Domain name (UTF-8 or UCS-4)
263
+ * [@param string Desired input encoding, see {@link set_parameter}]
264
+ * @return string Encoded Domain name (ACE string)
265
+ * @access public
266
+ */
267
+ function encode($decoded, $one_time_encoding = false)
268
+ {
269
+ // Forcing conversion of input to UCS4 array
270
+ // If one time encoding is given, use this, else the objects property
271
+ switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
272
+ case 'utf8':
273
+ $decoded = $this->_utf8_to_ucs4($decoded);
274
+ break;
275
+ case 'ucs4_string':
276
+ $decoded = $this->_ucs4_string_to_ucs4($decoded);
277
+ case 'ucs4_array':
278
+ break;
279
+ default:
280
+ $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
281
+ return false;
282
+ }
283
+
284
+ // No input, no output, what else did you expect?
285
+ if (empty($decoded)) return '';
286
+
287
+ // Anchors for iteration
288
+ $last_begin = 0;
289
+ // Output string
290
+ $output = '';
291
+ foreach ($decoded as $k => $v) {
292
+ // Make sure to use just the plain dot
293
+ switch($v) {
294
+ case 0x3002:
295
+ case 0xFF0E:
296
+ case 0xFF61:
297
+ $decoded[$k] = 0x2E;
298
+ // Right, no break here, the above are converted to dots anyway
299
+ // Stumbling across an anchoring character
300
+ case 0x2E:
301
+ case 0x2F:
302
+ case 0x3A:
303
+ case 0x3F:
304
+ case 0x40:
305
+ // Neither email addresses nor URLs allowed in strict mode
306
+ if ($this->_strict_mode) {
307
+ $this->_error('Neither email addresses nor URLs are allowed in strict mode.');
308
+ return false;
309
+ } else {
310
+ // Skip first char
311
+ if ($k) {
312
+ $encoded = '';
313
+ $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
314
+ if ($encoded) {
315
+ $output .= $encoded;
316
+ } else {
317
+ $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
318
+ }
319
+ $output .= chr($decoded[$k]);
320
+ }
321
+ $last_begin = $k + 1;
322
+ }
323
+ }
324
+ }
325
+ // Catch the rest of the string
326
+ if ($last_begin) {
327
+ $inp_len = sizeof($decoded);
328
+ $encoded = '';
329
+ $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
330
+ if ($encoded) {
331
+ $output .= $encoded;
332
+ } else {
333
+ $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
334
+ }
335
+ return $output;
336
+ } else {
337
+ if ($output = $this->_encode($decoded)) {
338
+ return $output;
339
+ } else {
340
+ return $this->_ucs4_to_utf8($decoded);
341
+ }
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Use this method to get the last error ocurred
347
+ * @param void
348
+ * @return string The last error, that occured
349
+ * @access public
350
+ */
351
+ function get_last_error()
352
+ {
353
+ return $this->_error;
354
+ }
355
+
356
+ /**
357
+ * The actual decoding algorithm
358
+ * @access private
359
+ */
360
+ function _decode($encoded)
361
+ {
362
+ // We do need to find the Punycode prefix
363
+ if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
364
+ $this->_error('This is not a punycode string');
365
+ return false;
366
+ }
367
+ $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
368
+ // If nothing left after removing the prefix, it is hopeless
369
+ if (!$encode_test) {
370
+ $this->_error('The given encoded string was empty');
371
+ return false;
372
+ }
373
+ // Find last occurence of the delimiter
374
+ $delim_pos = strrpos($encoded, '-');
375
+ if ($delim_pos > strlen($this->_punycode_prefix)) {
376
+ for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) {
377
+ $decoded[] = ord($encoded{$k});
378
+ }
379
+ } else {
380
+ $decoded = array();
381
+ }
382
+ $deco_len = count($decoded);
383
+ $enco_len = strlen($encoded);
384
+
385
+ // Wandering through the strings; init
386
+ $is_first = true;
387
+ $bias = $this->_initial_bias;
388
+ $idx = 0;
389
+ $char = $this->_initial_n;
390
+
391
+ for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
392
+ for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
393
+ $digit = $this->_decode_digit($encoded{$enco_idx++});
394
+ $idx += $digit * $w;
395
+ $t = ($k <= $bias) ? $this->_tmin :
396
+ (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
397
+ if ($digit < $t) break;
398
+ $w = (int) ($w * ($this->_base - $t));
399
+ }
400
+ $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
401
+ $is_first = false;
402
+ $char += (int) ($idx / ($deco_len + 1));
403
+ $idx %= ($deco_len + 1);
404
+ if ($deco_len > 0) {
405
+ // Make room for the decoded char
406
+ for ($i = $deco_len; $i > $idx; $i--) {
407
+ $decoded[$i] = $decoded[($i - 1)];
408
+ }
409
+ }
410
+ $decoded[$idx++] = $char;
411
+ }
412
+ return $this->_ucs4_to_utf8($decoded);
413
+ }
414
+
415
+ /**
416
+ * The actual encoding algorithm
417
+ * @access private
418
+ */
419
+ function _encode($decoded)
420
+ {
421
+ // We cannot encode a domain name containing the Punycode prefix
422
+ $extract = strlen($this->_punycode_prefix);
423
+ $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
424
+ $check_deco = array_slice($decoded, 0, $extract);
425
+
426
+ if ($check_pref == $check_deco) {
427
+ $this->_error('This is already a punycode string');
428
+ return false;
429
+ }
430
+ // We will not try to encode strings consisting of basic code points only
431
+ $encodable = false;
432
+ foreach ($decoded as $k => $v) {
433
+ if ($v > 0x7a) {
434
+ $encodable = true;
435
+ break;
436
+ }
437
+ }
438
+ if (!$encodable) {
439
+ $this->_error('The given string does not contain encodable chars');
440
+ return false;
441
+ }
442
+
443
+ // Do NAMEPREP
444
+ $decoded = $this->_nameprep($decoded);
445
+ if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed
446
+
447
+ $deco_len = count($decoded);
448
+ if (!$deco_len) return false; // Empty array
449
+
450
+ $codecount = 0; // How many chars have been consumed
451
+
452
+ $encoded = '';
453
+ // Copy all basic code points to output
454
+ for ($i = 0; $i < $deco_len; ++$i) {
455
+ $test = $decoded[$i];
456
+ // Will match [-0-9a-zA-Z]
457
+ if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B)
458
+ || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
459
+ $encoded .= chr($decoded[$i]);
460
+ $codecount++;
461
+ }
462
+ }
463
+ if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones
464
+
465
+ // Start with the prefix; copy it to output
466
+ $encoded = $this->_punycode_prefix.$encoded;
467
+
468
+ // If we have basic code points in output, add an hyphen to the end
469
+ if ($codecount) $encoded .= '-';
470
+
471
+ // Now find and encode all non-basic code points
472
+ $is_first = true;
473
+ $cur_code = $this->_initial_n;
474
+ $bias = $this->_initial_bias;
475
+ $delta = 0;
476
+ while ($codecount < $deco_len) {
477
+ // Find the smallest code point >= the current code point and
478
+ // remember the last ouccrence of it in the input
479
+ for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
480
+ if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
481
+ $next_code = $decoded[$i];
482
+ }
483
+ }
484
+
485
+ $delta += ($next_code - $cur_code) * ($codecount + 1);
486
+ $cur_code = $next_code;
487
+
488
+ // Scan input again and encode all characters whose code point is $cur_code
489
+ for ($i = 0; $i < $deco_len; $i++) {
490
+ if ($decoded[$i] < $cur_code) {
491
+ $delta++;
492
+ } elseif ($decoded[$i] == $cur_code) {
493
+ for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
494
+ $t = ($k <= $bias) ? $this->_tmin :
495
+ (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
496
+ if ($q < $t) break;
497
+ $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
498
+ $q = (int) (($q - $t) / ($this->_base - $t));
499
+ }
500
+ $encoded .= $this->_encode_digit($q);
501
+ $bias = $this->_adapt($delta, $codecount+1, $is_first);
502
+ $codecount++;
503
+ $delta = 0;
504
+ $is_first = false;
505
+ }
506
+ }
507
+ $delta++;
508
+ $cur_code++;
509
+ }
510
+ return $encoded;
511
+ }
512
+
513
+ /**
514
+ * Adapt the bias according to the current code point and position
515
+ * @access private
516
+ */
517
+ function _adapt($delta, $npoints, $is_first)
518
+ {
519
+ $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
520
+ $delta += intval($delta / $npoints);
521
+ for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
522
+ $delta = intval($delta / ($this->_base - $this->_tmin));
523
+ }
524
+ return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
525
+ }
526
+
527
+ /**
528
+ * Encoding a certain digit
529
+ * @access private
530
+ */
531
+ function _encode_digit($d)
532
+ {
533
+ return chr($d + 22 + 75 * ($d < 26));
534
+ }
535
+
536
+ /**
537
+ * Decode a certain digit
538
+ * @access private
539
+ */
540
+ function _decode_digit($cp)
541
+ {
542
+ $cp = ord($cp);
543
+ return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
544
+ }
545
+
546
+ /**
547
+ * Internal error handling method
548
+ * @access private
549
+ */
550
+ function _error($error = '')
551
+ {
552
+ $this->_error = $error;
553
+ }
554
+
555
+ /**
556
+ * Do Nameprep according to RFC3491 and RFC3454
557
+ * @param array Unicode Characters
558
+ * @return string Unicode Characters, Nameprep'd
559
+ * @access private
560
+ */
561
+ function _nameprep($input)
562
+ {
563
+ $output = array();
564
+ $error = false;
565
+ //
566
+ // Mapping
567
+ // Walking through the input array, performing the required steps on each of
568
+ // the input chars and putting the result into the output array
569
+ // While mapping required chars we apply the cannonical ordering
570
+ foreach ($input as $v) {
571
+ // Map to nothing == skip that code point
572
+ if (in_array($v, $this->NP['map_nothing'])) continue;
573
+
574
+ // Try to find prohibited input
575
+ if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) {
576
+ $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
577
+ return false;
578
+ }
579
+ foreach ($this->NP['prohibit_ranges'] as $range) {
580
+ if ($range[0] <= $v && $v <= $range[1]) {
581
+ $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
582
+ return false;
583
+ }
584
+ }
585
+ //
586
+ // Hangul syllable decomposition
587
+ if (0xAC00 <= $v && $v <= 0xD7AF) {
588
+ foreach ($this->_hangul_decompose($v) as $out) {
589
+ $output[] = (int) $out;
590
+ }
591
+ // There's a decomposition mapping for that code point
592
+ } elseif (isset($this->NP['replacemaps'][$v])) {
593
+ foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) {
594
+ $output[] = (int) $out;
595
+ }
596
+ } else {
597
+ $output[] = (int) $v;
598
+ }
599
+ }
600
+ // Before applying any Combining, try to rearrange any Hangul syllables
601
+ $output = $this->_hangul_compose($output);
602
+ //
603
+ // Combine code points
604
+ //
605
+ $last_class = 0;
606
+ $last_starter = 0;
607
+ $out_len = count($output);
608
+ for ($i = 0; $i < $out_len; ++$i) {
609
+ $class = $this->_get_combining_class($output[$i]);
610
+ if ((!$last_class || $last_class > $class) && $class) {
611
+ // Try to match
612
+ $seq_len = $i - $last_starter;
613
+ $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
614
+ // On match: Replace the last starter with the composed character and remove
615
+ // the now redundant non-starter(s)
616
+ if ($out) {
617
+ $output[$last_starter] = $out;
618
+ if (count($out) != $seq_len) {
619
+ for ($j = $i+1; $j < $out_len; ++$j) {
620
+ $output[$j-1] = $output[$j];
621
+ }
622
+ unset($output[$out_len]);
623
+ }
624
+ // Rewind the for loop by one, since there can be more possible compositions
625
+ $i--;
626
+ $out_len--;
627
+ $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]);
628
+ continue;
629
+ }
630
+ }
631
+ // The current class is 0
632
+ if (!$class) $last_starter = $i;
633
+ $last_class = $class;
634
+ }
635
+ return $output;
636
+ }
637
+
638
+ /**
639
+ * Decomposes a Hangul syllable
640
+ * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
641
+ * @param integer 32bit UCS4 code point
642
+ * @return array Either Hangul Syllable decomposed or original 32bit value as one value array
643
+ * @access private
644
+ */
645
+ function _hangul_decompose($char)
646
+ {
647
+ $sindex = (int) $char - $this->_sbase;
648
+ if ($sindex < 0 || $sindex >= $this->_scount) {
649
+ return array($char);
650
+ }
651
+ $result = array();
652
+ $result[] = (int) $this->_lbase + $sindex / $this->_ncount;
653
+ $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
654
+ $T = intval($this->_tbase + $sindex % $this->_tcount);
655
+ if ($T != $this->_tbase) $result[] = $T;
656
+ return $result;
657
+ }
658
+ /**
659
+ * Ccomposes a Hangul syllable
660
+ * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
661
+ * @param array Decomposed UCS4 sequence
662
+ * @return array UCS4 sequence with syllables composed
663
+ * @access private
664
+ */
665
+ function _hangul_compose($input)
666
+ {
667
+ $inp_len = count($input);
668
+ if (!$inp_len) return array();
669
+ $result = array();
670
+ $last = (int) $input[0];
671
+ $result[] = $last; // copy first char from input to output
672
+
673
+ for ($i = 1; $i < $inp_len; ++$i) {
674
+ $char = (int) $input[$i];
675
+ $sindex = $last - $this->_sbase;
676
+ $lindex = $last - $this->_lbase;
677
+ $vindex = $char - $this->_vbase;
678
+ $tindex = $char - $this->_tbase;
679
+ // Find out, whether two current characters are LV and T
680
+ if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0)
681
+ && 0 <= $tindex && $tindex <= $this->_tcount) {
682
+ // create syllable of form LVT
683
+ $last += $tindex;
684
+ $result[(count($result) - 1)] = $last; // reset last
685
+ continue; // discard char
686
+ }
687
+ // Find out, whether two current characters form L and V
688
+ if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
689
+ // create syllable of form LV
690
+ $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
691
+ $result[(count($result) - 1)] = $last; // reset last
692
+ continue; // discard char
693
+ }
694
+ // if neither case was true, just add the character
695
+ $last = $char;
696
+ $result[] = $char;
697
+ }
698
+ return $result;
699
+ }
700
+
701
+ /**
702
+ * Returns the combining class of a certain wide char
703
+ * @param integer Wide char to check (32bit integer)
704
+ * @return integer Combining class if found, else 0
705
+ * @access private
706
+ */
707
+ function _get_combining_class($char)
708
+ {
709
+ return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0;
710
+ }
711
+
712
+ /**
713
+ * Apllies the cannonical ordering of a decomposed UCS4 sequence
714
+ * @param array Decomposed UCS4 sequence
715
+ * @return array Ordered USC4 sequence
716
+ * @access private
717
+ */
718
+ function _apply_cannonical_ordering($input)
719
+ {
720
+ $swap = true;
721
+ $size = count($input);
722
+ while ($swap) {
723
+ $swap = false;
724
+ $last = $this->_get_combining_class(intval($input[0]));
725
+ for ($i = 0; $i < $size-1; ++$i) {
726
+ $next = $this->_get_combining_class(intval($input[$i+1]));
727
+ if ($next != 0 && $last > $next) {
728
+ // Move item leftward until it fits
729
+ for ($j = $i + 1; $j > 0; --$j) {
730
+ if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break;
731
+ $t = intval($input[$j]);
732
+ $input[$j] = intval($input[$j-1]);
733
+ $input[$j-1] = $t;
734
+ $swap = true;
735
+ }
736
+ // Reentering the loop looking at the old character again
737
+ $next = $last;
738
+ }
739
+ $last = $next;
740
+ }
741
+ }
742
+ return $input;
743
+ }
744
+
745
+ /**
746
+ * Do composition of a sequence of starter and non-starter
747
+ * @param array UCS4 Decomposed sequence
748
+ * @return array Ordered USC4 sequence
749
+ * @access private
750
+ */
751
+ function _combine($input)
752
+ {
753
+ $inp_len = count($input);
754
+ foreach ($this->NP['replacemaps'] as $np_src => $np_target) {
755
+ if ($np_target[0] != $input[0]) continue;
756
+ if (count($np_target) != $inp_len) continue;
757
+ $hit = false;
758
+ foreach ($input as $k2 => $v2) {
759
+ if ($v2 == $np_target[$k2]) {
760
+ $hit = true;
761
+ } else {
762
+ $hit = false;
763
+ break;
764
+ }
765
+ }
766
+ if ($hit) return $np_src;
767
+ }
768
+ return false;
769
+ }
770
+
771
+ /**
772
+ * This converts an UTF-8 encoded string to its UCS-4 representation
773
+ * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
774
+ * each of the "chars". This is due to PHP not being able to handle strings with
775
+ * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
776
+ * The following UTF-8 encodings are supported:
777
+ * bytes bits representation
778
+ * 1 7 0xxxxxxx
779
+ * 2 11 110xxxxx 10xxxxxx
780
+ * 3 16 1110xxxx 10xxxxxx 10xxxxxx
781
+ * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
782
+ * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
783
+ * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
784
+ * Each x represents a bit that can be used to store character data.
785
+ * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
786
+ * @access private
787
+ */
788
+ function _utf8_to_ucs4($input)
789
+ {
790
+ $output = array();
791
+ $out_len = 0;
792
+ $inp_len = strlen($input);
793
+ $mode = 'next';
794
+ $test = 'none';
795
+ for ($k = 0; $k < $inp_len; ++$k) {
796
+ $v = ord($input{$k}); // Extract byte from input string
797
+
798
+ if ($v < 128) { // We found an ASCII char - put into stirng as is
799
+ $output[$out_len] = $v;
800
+ ++$out_len;
801
+ if ('add' == $mode) {
802
+ $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
803
+ return false;
804
+ }
805
+ continue;
806
+ }
807
+ if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
808
+ $start_byte = $v;
809
+ $mode = 'add';
810
+ $test = 'range';
811
+ if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
812
+ $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
813
+ $v = ($v - 192) << 6;
814
+ } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
815
+ $next_byte = 1;
816
+ $v = ($v - 224) << 12;
817
+ } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
818
+ $next_byte = 2;
819
+ $v = ($v - 240) << 18;
820
+ } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
821
+ $next_byte = 3;
822
+ $v = ($v - 248) << 24;
823
+ } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
824
+ $next_byte = 4;
825
+ $v = ($v - 252) << 30;
826
+ } else {
827
+ $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k);
828
+ return false;
829
+ }
830
+ if ('add' == $mode) {
831
+ $output[$out_len] = (int) $v;
832
+ ++$out_len;
833
+ continue;
834
+ }
835
+ }
836
+ if ('add' == $mode) {
837
+ if (!$this->_allow_overlong && $test == 'range') {
838
+ $test = 'none';
839
+ if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
840
+ $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
841
+ return false;
842
+ }
843
+ }
844
+ if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
845
+ $v = ($v - 128) << ($next_byte * 6);
846
+ $output[($out_len - 1)] += $v;
847
+ --$next_byte;
848
+ } else {
849
+ $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
850
+ return false;
851
+ }
852
+ if ($next_byte < 0) {
853
+ $mode = 'next';
854
+ }
855
+ }
856
+ } // for
857
+ return $output;
858
+ }
859
+
860
+ /**
861
+ * Convert UCS-4 string into UTF-8 string
862
+ * See _utf8_to_ucs4() for details
863
+ * @access private
864
+ */
865
+ function _ucs4_to_utf8($input)
866
+ {
867
+ $output = '';
868
+ $k = 0;
869
+ foreach ($input as $v) {
870
+ ++$k;
871
+ // $v = ord($v);
872
+ if ($v < 128) { // 7bit are transferred literally
873
+ $output .= chr($v);
874
+ } elseif ($v < (1 << 11)) { // 2 bytes
875
+ $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
876
+ } elseif ($v < (1 << 16)) { // 3 bytes
877
+ $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
878
+ } elseif ($v < (1 << 21)) { // 4 bytes
879
+ $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63))
880
+ . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
881
+ } elseif ($v < (1 << 26)) { // 5 bytes
882
+ $output .= chr(248 + ($v >> 24)) . chr(128 + (($v >> 18) & 63))
883
+ . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63))
884
+ . chr(128 + ($v & 63));
885
+ } elseif ($v < (1 << 31)) { // 6 bytes
886
+ $output .= chr(252 + ($v >> 30)) . chr(128 + (($v >> 24) & 63))
887
+ . chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63))
888
+ . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
889
+ } else {
890
+ $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k);
891
+ return false;
892
+ }
893
+ }
894
+ return $output;
895
+ }
896
+
897
+ /**
898
+ * Convert UCS-4 array into UCS-4 string
899
+ *
900
+ * @access private
901
+ */
902
+ function _ucs4_to_ucs4_string($input)
903
+ {
904
+ $output = '';
905
+ // Take array values and split output to 4 bytes per value
906
+ // The bit mask is 255, which reads &11111111
907
+ foreach ($input as $v) {
908
+ $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
909
+ }
910
+ return $output;
911
+ }
912
+
913
+ /**
914
+ * Convert UCS-4 strin into UCS-4 garray
915
+ *
916
+ * @access private
917
+ */
918
+ function _ucs4_string_to_ucs4($input)
919
+ {
920
+ $output = array();
921
+ $inp_len = strlen($input);
922
+ // Input length must be dividable by 4
923
+ if ($inp_len % 4) {
924
+ $this->_error('Input UCS4 string is broken');
925
+ return false;
926
+ }
927
+ // Empty input - return empty output
928
+ if (!$inp_len) return $output;
929
+ for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
930
+ // Increment output position every 4 input bytes
931
+ if (!($i % 4)) {
932
+ $out_len++;
933
+ $output[$out_len] = 0;
934
+ }
935
+ $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
936
+ }
937
+ return $output;
938
+ }
939
+ }
940
+
941
+ /**
942
+ * Adapter class for aligning the API of idna_convert with that of Net_IDNA
943
+ * @author Matthias Sommerfeld <mso@phlylabs.de>
944
+ */
945
+ class Net_IDNA_php4 extends idna_convert
946
+ {
947
+ /**
948
+ * Sets a new option value. Available options and values:
949
+ * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
950
+ * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
951
+ * [overlong - Unicode does not allow unnecessarily long encodings of chars,
952
+ * to allow this, set this parameter to true, else to false;
953
+ * default is false.]
954
+ * [strict - true: strict mode, good for registration purposes - Causes errors
955
+ * on failures; false: loose mode, ideal for "wildlife" applications
956
+ * by silently ignoring errors and returning the original input instead
957
+ *
958
+ * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
959
+ * @param string Value to use (if parameter 1 is a string)
960
+ * @return boolean true on success, false otherwise
961
+ * @access public
962
+ */
963
+ function setParams($option, $param = false)
964
+ {
965
+ return $this->IC->set_parameters($option, $param);
966
+ }
967
+ }
968
+
969
+ ?>
lib/whois/whois.ie.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__IE_HANDLER__'))
29
+ define('__IE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ie_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'nic-hdl' => 'handle',
39
+ 'person' => 'name',
40
+ 'renewal' => 'expires'
41
+ );
42
+
43
+ $contacts = array(
44
+ 'admin-c' => 'admin',
45
+ 'tech-c' => 'tech',
46
+ );
47
+
48
+ $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
49
+
50
+ if (isset($reg['domain']['descr']))
51
+ {
52
+ $reg['owner']['organization'] = $reg['domain']['descr'][0];
53
+ unset($reg['domain']['descr']);
54
+ }
55
+
56
+ $r['regrinfo'] = $reg;
57
+ $r['regyinfo'] = array(
58
+ 'referrer' => 'http://www.domainregistry.ie',
59
+ 'registrar' => 'IE Domain Registry'
60
+ );
61
+ return $r;
62
+ }
63
+ }
64
+ ?>
lib/whois/whois.in.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__IN_HANDLER__'))
29
+ define('__IN_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class in_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://whois.registry.in',
40
+ 'registrar' => 'INRegistry'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.info.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__INFO_HANDLER__'))
29
+ define('__INFO_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class info_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://whois.afilias.info',
40
+ 'registrar' => 'Afilias Global Registry Services'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.int.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__INT_HANDLER__'))
29
+ define('__INT_HANDLER__', 1);
30
+
31
+ require_once('whois.gtld.iana.php');
32
+
33
+ class int_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $iana = new iana_handler();
38
+ $r['regrinfo'] = $iana->parse($data_str['rawdata'], $query);
39
+ $r['regyinfo']['referrer'] = 'http://www.iana.org/int-dom/int.htm';
40
+ $r['regyinfo']['registrar'] = 'Internet Assigned Numbers Authority';
41
+ return ($r);
42
+ }
43
+ }
44
+ ?>
lib/whois/whois.ip.afrinic.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__AFRINIC_HANDLER__'))
31
+ define('__AFRINIC_HANDLER__', 1);
32
+
33
+ class afrinic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl' => 'handle',
41
+ 'person' => 'name',
42
+ 'netname' => 'name',
43
+ 'organisation' => 'handle',
44
+ 'org-name' => 'organization',
45
+ 'org-type' => 'type'
46
+ );
47
+
48
+ $contacts = array(
49
+ 'admin-c' => 'admin',
50
+ 'tech-c' => 'tech',
51
+ 'org' => 'owner'
52
+ );
53
+
54
+ $r = generic_parser_a($data_str, $translate, $contacts, 'network', 'Ymd');
55
+
56
+ if (isset($r['network']['descr']))
57
+ {
58
+ $r['owner']['organization'] = $r['network']['descr'];
59
+ unset($r['network']['descr']);
60
+ }
61
+
62
+ if (isset($r['owner']['remarks']) && is_array($r['owner']['remarks']))
63
+ while (list($key, $val) = each($r['owner']['remarks']))
64
+ {
65
+ $pos = strpos($val,'rwhois://');
66
+
67
+ if ($pos!==false)
68
+ $r['rwhois'] = strtok(substr($val,$pos),' ');
69
+ }
70
+
71
+ $r = array( 'regrinfo' => $r );
72
+ $r['regyinfo']['type'] = 'ip';
73
+ $r['regyinfo']['registrar'] = 'African Network Information Center';
74
+ return $r;
75
+ }
76
+ }
77
+ ?>
lib/whois/whois.ip.apnic.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if(!defined('__APNIC_HANDLER__'))
31
+ define('__APNIC_HANDLER__',1);
32
+
33
+ class apnic_handler
34
+ {
35
+ function parse ($data_str, $query)
36
+ {
37
+ $translate = array (
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl' => 'handle',
41
+ 'person' => 'name',
42
+ 'country' => 'address',
43
+ 'netname' => 'name',
44
+ 'descr' => 'desc',
45
+ 'aut-num' => 'handle'
46
+ );
47
+
48
+ $contacts = array (
49
+ 'admin-c' => 'admin',
50
+ 'tech-c' => 'tech'
51
+ );
52
+
53
+ $blocks = generic_parser_a_blocks($data_str,$translate,$disclaimer);
54
+
55
+ if (isset($disclaimer) && is_array($disclaimer)) $r['disclaimer'] = $disclaimer;
56
+
57
+ if (empty($blocks) || !is_array($blocks['main']))
58
+ {
59
+ $r['registered'] = 'no';
60
+ }
61
+ else
62
+ {
63
+ if (isset($blocks[$query]))
64
+ {
65
+ $as = true;
66
+ $rb = $blocks[$query];
67
+ }
68
+ else
69
+ {
70
+ $rb = $blocks['main'];
71
+ $as = false;
72
+ }
73
+
74
+ $r['registered'] = 'yes';
75
+
76
+ while (list($key,$val) = each($contacts))
77
+ if (isset($rb[$key]))
78
+ {
79
+ if (is_array($rb[$key]))
80
+ $blk = $rb[$key][count($rb[$key])-1];
81
+ else
82
+ $blk = $rb[$key];
83
+
84
+ //$blk = strtoupper(strtok($blk,' '));
85
+ if (isset($blocks[$blk])) $r[$val] = $blocks[$blk];
86
+ unset($rb[$key]);
87
+ }
88
+
89
+ $r['network'] = $rb;
90
+ format_dates($r,'Ymd');
91
+
92
+ if (isset($r['network']['desc']))
93
+ {
94
+ if (is_array($r['network']['desc']))
95
+ {
96
+ $r['owner']['organization'] = array_shift($r['network']['desc']);
97
+ $r['owner']['address'] = $r['network']['desc'];
98
+ }
99
+ else
100
+ $r['owner']['organization'] = $r['network']['desc'];
101
+
102
+ unset($r['network']['desc']);
103
+ }
104
+
105
+ if (isset($r['network']['address']))
106
+ {
107
+ if (isset($r['owner']['address']))
108
+ $r['owner']['address'][] = $r['network']['address'];
109
+ else
110
+ $r['owner']['address'] = $r['network']['address'];
111
+
112
+ unset($r['network']['address']);
113
+ }
114
+ }
115
+
116
+ $r = array( 'regrinfo' => $r );
117
+ $r['regyinfo']['type'] ='ip';
118
+ $r['regyinfo']['registrar'] = 'Asia Pacific Network Information Centre';
119
+ return $r;
120
+ }
121
+ }
122
+ ?>
lib/whois/whois.ip.arin.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+
29
+ if (!defined('__ARIN_HANDLER__'))
30
+ define('__ARIN_HANDLER__', 1);
31
+
32
+ require_once('whois.parser.php');
33
+
34
+ class arin_handler
35
+ {
36
+ function parse($data_str, $query)
37
+ {
38
+ $items = array(
39
+ 'OrgName:' => 'owner.organization',
40
+ 'CustName:' => 'owner.organization',
41
+ 'OrgId:' => 'owner.handle',
42
+ 'Address:' => 'owner.address.street.',
43
+ 'City:' => 'owner.address.city',
44
+ 'StateProv:' => 'owner.address.state',
45
+ 'PostalCode:' => 'owner.address.pcode',
46
+ 'Country:' => 'owner.address.country',
47
+ 'NetRange:' => 'network.inetnum',
48
+ 'NetName:' => 'network.name',
49
+ 'NetHandle:' => 'network.handle',
50
+ 'NetType:' => 'network.status',
51
+ 'NameServer:' => 'network.nserver.',
52
+ 'Comment:' => 'network.desc.',
53
+ 'RegDate:' => 'network.created',
54
+ 'Updated:' => 'network.changed',
55
+ 'ASHandle:' => 'network.handle',
56
+ 'ASName:' => 'network.name',
57
+ 'NetHandle:' => 'network.handle',
58
+ 'NetName:' => 'network.name',
59
+ 'TechHandle:' => 'tech.handle',
60
+ 'TechName:' => 'tech.name',
61
+ 'TechPhone:' => 'tech.phone',
62
+ 'TechEmail:' => 'tech.email',
63
+ 'OrgAbuseName:' => 'abuse.name',
64
+ 'OrgAbuseHandle:' => 'abuse.handle',
65
+ 'OrgAbusePhone:' => 'abuse.phone',
66
+ 'OrgAbuseEmail:' => 'abuse.email.',
67
+ 'ReferralServer:' => 'rwhois'
68
+ );
69
+
70
+ $r = generic_parser_b($data_str, $items, 'ymd', false, true);
71
+
72
+ if (@isset($r['abuse']['email']))
73
+ $r['abuse']['email'] = implode(',',$r['abuse']['email']);
74
+
75
+ return array( 'regrinfo' => $r );
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.ip.krnic.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__KRNIC_HANDLER__'))
29
+ define('__KRNIC_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class krnic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $blocks = array(
38
+ 'owner1' => '[ Organization Information ]',
39
+ 'tech1' => '[ Technical Contact Information ]',
40
+
41
+ 'owner2' => '[ ISP Organization Information ]',
42
+ 'admin2' => '[ ISP IP Admin Contact Information ]',
43
+ 'tech2' => '[ ISP IP Tech Contact Information ]',
44
+
45
+ 'admin3' => '[ ISP IPv4 Admin Contact Information ]',
46
+ 'tech3' => '[ ISP IPv4 Tech Contact Information ]',
47
+
48
+ 'abuse' => '[ ISP Network Abuse Contact Information ]',
49
+
50
+ 'network.inetnum' => 'IPv4 Address :',
51
+ 'network.name' => 'Network Name :',
52
+ 'network.mnt-by' => 'Connect ISP Name :',
53
+ 'network.created' => 'Registration Date :'
54
+ );
55
+
56
+ $items = array(
57
+ 'Orgnization ID :' => 'handle',
58
+ 'Org Name :' => 'organization',
59
+ 'Org Name :' => 'organization',
60
+ 'Name :' => 'name',
61
+ 'Name :' => 'name',
62
+ 'Org Address :' => 'address.street',
63
+ 'Zip Code :' => 'address.pcode',
64
+ 'State :' => 'address.state',
65
+ 'Address :' => 'address.street',
66
+ 'Zip Code :' => 'address.pcode',
67
+ 'Phone :' => 'phone',
68
+ 'Phone :' => 'phone',
69
+ 'Fax :' => 'fax',
70
+ 'E-Mail :' => 'email',
71
+ 'E-Mail :' => 'email'
72
+ );
73
+
74
+ $b = get_blocks($data_str, $blocks);
75
+
76
+ if (isset($b['network']))
77
+ $r['network'] = $b['network'];
78
+
79
+ if (isset($b['owner1']))
80
+ $r['owner'] = generic_parser_b($b['owner1'], $items, 'Ymd', false);
81
+ else
82
+ if (isset($b['owner2']))
83
+ $r['owner'] = generic_parser_b($b['owner2'], $items, 'Ymd', false);
84
+
85
+ if (isset($b['admin2']))
86
+ $r['admin'] = generic_parser_b($b['admin2'], $items, 'Ymd', false);
87
+ else
88
+ if (isset($b['admin3']))
89
+ $r['admin'] = generic_parser_b($b['admin3'], $items, 'Ymd', false);
90
+
91
+ if (isset($b['tech1']))
92
+ $r['tech'] = generic_parser_b($b['tech1'], $items, 'Ymd', false);
93
+ else
94
+ if (isset($b['tech2']))
95
+ $r['tech'] = generic_parser_b($b['tech2'], $items, 'Ymd', false);
96
+ else
97
+ if (isset($b['tech3']))
98
+ $r['tech'] = generic_parser_b($b['tech3'], $items, 'Ymd', false);
99
+
100
+ if (isset($b['abuse']))
101
+ $r['abuse'] = generic_parser_b($b['abuse'], $items, 'Ymd', false);
102
+
103
+ $r = format_dates($r, 'Ymd');
104
+
105
+ $r = array( 'regrinfo' => $r );
106
+ $r['regyinfo']['type'] ='ip';
107
+ $r['regyinfo']['registrar'] = 'Korean Network Information Centre';
108
+
109
+ return $r;
110
+ }
111
+ }
112
+ ?>
lib/whois/whois.ip.lacnic.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__LACNIC_HANDLER__'))
31
+ define('__LACNIC_HANDLER__', 1);
32
+
33
+ class lacnic_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl-br' => 'handle',
41
+ 'nic-hdl' => 'handle',
42
+ 'person' => 'name',
43
+ 'netname' => 'name',
44
+ 'descr' => 'desc',
45
+ 'country' => 'address.country'
46
+ );
47
+
48
+ $contacts = array(
49
+ 'owner-c' => 'owner',
50
+ 'tech-c' => 'tech',
51
+ 'abuse-c' => 'abuse',
52
+ 'admin-c' => 'admin'
53
+ );
54
+
55
+ $r = generic_parser_a($data_str, $translate, $contacts, 'network');
56
+
57
+ unset($r['network']['owner']);
58
+ unset($r['network']['ownerid']);
59
+ unset($r['network']['responsible']);
60
+ unset($r['network']['address']);
61
+ unset($r['network']['phone']);
62
+ unset($r['network']['aut-num']);
63
+ unset($r['network']['nsstat']);
64
+ unset($r['network']['nslastaa']);
65
+ unset($r['network']['inetrev']);
66
+
67
+ if (!empty($r['network']['aut-num']))
68
+ $r['network']['handle'] = $r['network']['aut-num'];
69
+
70
+ if (is_array($r['network']['nserver']))
71
+ $r['network']['nserver'] = array_unique($r['network']['nserver']);
72
+
73
+ $r = array( 'regrinfo' => $r );
74
+ $r['regyinfo']['type'] ='ip';
75
+ $r['regyinfo']['registrar'] = 'Latin American and Caribbean IP address Regional Registry';
76
+ return $r;
77
+ }
78
+ }
79
+ ?>
lib/whois/whois.ip.lib.php ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ //-----------------------------------------------------------------
29
+ // Check if ip adddress is valid
30
+
31
+ function phpwhois_validip($ip)
32
+ {
33
+
34
+ if (empty($ip))
35
+ return false;
36
+
37
+ if ((ip2long($ip) == -1) or (ip2long($ip) === false))
38
+ return false;
39
+
40
+ $reserved_ips = array (
41
+ array('0.0.0.0','2.255.255.255'),
42
+ array('10.0.0.0','10.255.255.255'),
43
+ array('127.0.0.0','127.255.255.255'),
44
+ array('169.254.0.0','169.254.255.255'),
45
+ array('172.16.0.0','172.31.255.255'),
46
+ array('192.0.2.0','192.0.2.255'),
47
+ array('192.168.0.0','192.168.255.255'),
48
+ array('255.255.255.0','255.255.255.255')
49
+ );
50
+
51
+ foreach ($reserved_ips as $r)
52
+ {
53
+ $min = ip2long($r[0]);
54
+ $max = ip2long($r[1]);
55
+ if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
56
+ }
57
+
58
+ return true;
59
+ }
60
+
61
+ //-----------------------------------------------------------------
62
+ // Get real client ip address
63
+
64
+ function phpwhois_getclientip()
65
+ {
66
+ if (!empty($_SERVER['HTTP_CLIENT_IP']) && phpwhois_validip($_SERVER['HTTP_CLIENT_IP']))
67
+ return $_SERVER['HTTP_CLIENT_IP'];
68
+
69
+ if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
70
+ foreach (explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']) as $ip)
71
+ if (phpwhois_validip(trim($ip)))
72
+ return $ip;
73
+
74
+ if (!empty($_SERVER['HTTP_X_FORWARDED']) && phpwhois_validip($_SERVER['HTTP_X_FORWARDED']))
75
+ return $_SERVER['HTTP_X_FORWARDED'];
76
+
77
+ if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && phpwhois_validip($_SERVER['HTTP_FORWARDED_FOR']))
78
+ return $_SERVER['HTTP_FORWARDED_FOR'];
79
+
80
+ if (!empty($_SERVER['HTTP_FORWARDED']) && phpwhois_validip($_SERVER['HTTP_FORWARDED']))
81
+ return $_SERVER['HTTP_FORWARDED'];
82
+
83
+ if (!empty($_SERVER['HTTP_X_FORWARDED']) && phpwhois_validip($_SERVER['HTTP_X_FORWARDED']))
84
+ return $_SERVER['HTTP_X_FORWARDED'];
85
+
86
+ return $_SERVER['REMOTE_ADDR'];
87
+ }
88
+
89
+ //-----------------------------------------------------------------
90
+ // Convert from CIDR to net range
91
+
92
+ function phpwhois_cidr_conv($net)
93
+ {
94
+ $start = strtok($net, '/');
95
+ $n = 3-substr_count($net, '.');
96
+
97
+ if ($n > 0)
98
+ {
99
+ for ($i = $n; $i > 0; $i--)
100
+ $start.= '.0';
101
+ }
102
+
103
+ $bits1 = str_pad(decbin(ip2long($start)), 32, '0', 'STR_PAD_LEFT');
104
+ $net = pow(2, (32-substr(strstr($net, '/'), 1))) - 1;
105
+ $bits2 = str_pad(decbin($net), 32, '0', 'STR_PAD_LEFT');
106
+ $final = '';
107
+
108
+ for ($i = 0; $i < 32; $i++)
109
+ {
110
+ if ($bits1[$i] == $bits2[$i])
111
+ $final.= $bits1[$i];
112
+ if ($bits1[$i] == 1 and $bits2[$i] == 0)
113
+ $final.= $bits1[$i];
114
+ if ($bits1[$i] == 0 and $bits2[$i] == 1)
115
+ $final.= $bits2[$i];
116
+ }
117
+
118
+ return $start." - ".long2ip(bindec($final));
119
+ }
120
+ ?>
lib/whois/whois.ip.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__IP_HANDLER__'))
29
+ define('__IP_HANDLER__', 1);
30
+
31
+ require_once('whois.ip.lib.php');
32
+
33
+ class ip_handler extends WhoisClient
34
+ {
35
+ // Deep whois ?
36
+ var $deep_whois = true;
37
+
38
+ var $HANDLER_VERSION = '1.0';
39
+
40
+ var $REGISTRARS = array(
41
+ 'European Regional Internet Registry/RIPE NCC' => 'whois.ripe.net',
42
+ 'RIPE Network Coordination Centre' => 'whois.ripe.net',
43
+ 'Asia Pacific Network Information Center' => 'whois.apnic.net',
44
+ 'Asia Pacific Network Information Centre' => 'whois.apnic.net',
45
+ 'Latin American and Caribbean IP address Regional Registry' => 'whois.lacnic.net',
46
+ 'African Network Information Center' => 'whois.afrinic.net'
47
+ );
48
+
49
+ var $HANDLERS = array(
50
+ 'whois.krnic.net' => 'krnic',
51
+ 'whois.apnic.net' => 'apnic',
52
+ 'whois.ripe.net' => 'ripe',
53
+ 'whois.arin.net' => 'arin',
54
+ 'whois.lacnic.net' => 'lacnic',
55
+ 'whois.afrinic.net' => 'afrinic'
56
+ );
57
+
58
+ var $more_data = array(); // More queries to get more accurated data
59
+ var $done = array();
60
+
61
+ function parse($data, $query)
62
+ {
63
+ $result['regrinfo'] = array();
64
+ $result['regyinfo'] = array();
65
+ $result['regyinfo']['registrar'] = 'American Registry for Internet Numbers (ARIN)';
66
+ $result['rawdata'] = array();
67
+
68
+ if (strpos($query,'.') === false)
69
+ $result['regyinfo']['type'] = 'AS';
70
+ else
71
+ $result['regyinfo']['type'] = 'ip';
72
+
73
+ if (!$this->deep_whois) return null;
74
+
75
+ $this->Query = array();
76
+ $this->Query['server'] = 'whois.arin.net';
77
+ $this->Query['query'] = $query;
78
+
79
+ $rawdata = $data['rawdata'];
80
+
81
+ if (empty($rawdata)) return $result;
82
+
83
+ $presults[] = $rawdata;
84
+ $ip = ip2long($query);
85
+ $done = array();
86
+
87
+ while (count($presults) > 0)
88
+ {
89
+ $rwdata = array_shift($presults);
90
+ $found = false;
91
+
92
+ foreach($rwdata as $line)
93
+ {
94
+ if (!strncmp($line,'American Registry for Internet Numbers',38)) continue;
95
+
96
+ $p = strpos($line, '(NETBLK-');
97
+
98
+ if ($p === false) $p = strpos($line, '(NET-');
99
+
100
+ if ($p !== false)
101
+ {
102
+ $net = strtok(substr($line,$p+1),') ');
103
+ list($low,$high) = explode('-',str_replace(' ','',substr($line,$p+strlen($net)+3)));
104
+
105
+ if (!isset($done[$net]) && $ip >= ip2long($low) && $ip <= ip2long($high))
106
+ {
107
+ $owner = substr($line,0,$p-1);
108
+
109
+ if (!empty($this->REGISTRARS['owner']))
110
+ {
111
+ $this->handle_rwhois($this->REGISTRARS['owner'],$query);
112
+ break 2;
113
+ }
114
+ else
115
+ {
116
+ $this->Query['args'] = 'n '.$net;
117
+ $presults[] = $this->GetRawData($net);
118
+ $done[$net] = 1;
119
+ }
120
+ }
121
+ $found = true;
122
+ }
123
+ }
124
+
125
+ if (!$found)
126
+ {
127
+ $this->Query['file'] = 'whois.ip.arin.php';
128
+ $this->Query['handler'] = 'arin';
129
+ $result = $this->parse_results($result,$rwdata,$query,true);
130
+ }
131
+ }
132
+
133
+ unset($this->Query['args']);
134
+
135
+ while (count($this->more_data) > 0)
136
+ {
137
+ $srv_data = array_shift($this->more_data);
138
+ $this->Query['server'] = $srv_data['server'];
139
+ unset($this->Query['handler']);
140
+ // Use original query
141
+ $rwdata = $this->GetRawData($srv_data['query']);
142
+
143
+ if (!empty($rwdata))
144
+ {
145
+ if (!empty($srv_data['handler']))
146
+ {
147
+ $this->Query['handler'] = $srv_data['handler'];
148
+
149
+ if (!empty($srv_data['file']))
150
+ $this->Query['file'] = $srv_data['file'];
151
+ else
152
+ $this->Query['file'] = 'whois.'.$this->Query['handler'].'.php';
153
+ }
154
+
155
+ $result = $this->parse_results($result,$rwdata,$query,$srv_data['reset']);
156
+ $result = $this->set_whois_info($result);
157
+ $reset = false;
158
+ }
159
+ }
160
+
161
+
162
+ // Normalize nameserver fields
163
+
164
+ if (isset($result['regrinfo']['network']['nserver']))
165
+ {
166
+ if (!is_array($result['regrinfo']['network']['nserver']))
167
+ {
168
+ unset($result['regrinfo']['network']['nserver']);
169
+ }
170
+ else
171
+ $result['regrinfo']['network']['nserver'] = $this->FixNameServer($result['regrinfo']['network']['nserver']);
172
+ }
173
+
174
+ return $result;
175
+ }
176
+
177
+ //-----------------------------------------------------------------
178
+
179
+ function parse_results($result,$rwdata,$query,$reset)
180
+ {
181
+ $rwres = $this->Process($rwdata);
182
+
183
+ if ($result['regyinfo']['type'] == 'AS' && !empty($rwres['regrinfo']['network']))
184
+ {
185
+ $rwres['regrinfo']['AS'] = $rwres['regrinfo']['network'];
186
+ unset($rwres['regrinfo']['network']);
187
+ }
188
+
189
+ if ($reset)
190
+ {
191
+ $result['regrinfo'] = $rwres['regrinfo'];
192
+ $result['rawdata'] = $rwdata;
193
+ }
194
+ else
195
+ {
196
+ $result['rawdata'][] = '';
197
+
198
+ foreach ($rwdata as $line)
199
+ $result['rawdata'][] = $line;
200
+
201
+ foreach($rwres['regrinfo'] as $key => $data)
202
+ {
203
+ $result = $this->join_result($result,$key,$rwres);
204
+ }
205
+ }
206
+
207
+ if ($this->deep_whois)
208
+ {
209
+ if (isset($rwres['regrinfo']['rwhois']))
210
+ {
211
+ $this->handle_rwhois($rwres['regrinfo']['rwhois'],$query);
212
+ unset($result['regrinfo']['rwhois']);
213
+ }
214
+ else
215
+ if (!@empty($rwres['regrinfo']['owner']['organization']))
216
+ switch ($rwres['regrinfo']['owner']['organization'])
217
+ {
218
+ case 'KRNIC':
219
+ $this->handle_rwhois('whois.krnic.net',$query);
220
+ break;
221
+
222
+ case 'African Network Information Center':
223
+ $this->handle_rwhois('whois.afrinic.net',$query);
224
+ break;
225
+ }
226
+ }
227
+
228
+ if (!empty($rwres['regyinfo']))
229
+ $result['regyinfo'] = array_merge($result['regyinfo'],$rwres['regyinfo']);
230
+
231
+ return $result;
232
+ }
233
+
234
+ //-----------------------------------------------------------------
235
+
236
+ function handle_rwhois($server,$query)
237
+ {
238
+ // Avoid querying the same server twice
239
+
240
+ $parts = parse_url($server);
241
+
242
+ if (empty($parts['host']))
243
+ $host = $parts['path'];
244
+ else
245
+ $host = $parts['host'];
246
+
247
+ if (array_key_exists($host,$this->done)) return;
248
+
249
+ $q = array (
250
+ 'query' => $query,
251
+ 'server' => $server
252
+ );
253
+
254
+ if (isset($this->HANDLERS[$host]))
255
+ {
256
+ $q['handler'] = $this->HANDLERS[$host];
257
+ $q['file'] = sprintf('whois.ip.%s.php', $q['handler']);
258
+ $q['reset'] = true;
259
+ }
260
+ else
261
+ {
262
+ $q['handler'] = 'rwhois';
263
+ $q['reset'] = false;
264
+ unset($q['file']);
265
+ }
266
+
267
+ $this->more_data[] = $q;
268
+ $this->done[$host] = 1;
269
+ }
270
+
271
+ //-----------------------------------------------------------------
272
+
273
+ function join_result($result, $key, $newres)
274
+ {
275
+ if (isset($result['regrinfo'][$key]) && !array_key_exists(0,$result['regrinfo'][$key]))
276
+ {
277
+ $r = $result['regrinfo'][$key];
278
+ $result['regrinfo'][$key] = array($r);
279
+ }
280
+
281
+ $result['regrinfo'][$key][] = $newres['regrinfo'][$key];
282
+ return $result;
283
+ }
284
+ }
285
+ ?>
lib/whois/whois.ip.ripe.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__RIPE_HANDLER__'))
31
+ define('__RIPE_HANDLER__', 1);
32
+
33
+ class ripe_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl' => 'handle',
41
+ 'person' => 'name',
42
+ 'netname' => 'name',
43
+ 'descr' => 'desc'
44
+ );
45
+
46
+ $contacts = array(
47
+ 'admin-c' => 'admin',
48
+ 'tech-c' => 'tech'
49
+ );
50
+
51
+ if (!empty($data_str['rawdata'])) $data_str = $data_str['rawdata'];
52
+
53
+ $r = generic_parser_a($data_str, $translate, $contacts, 'network');
54
+
55
+ if (isset($r['network']['desc']))
56
+ {
57
+ $r['owner']['organization'] = $r['network']['desc'];
58
+ unset($r['network']['desc']);
59
+ }
60
+
61
+ if (isset($r['admin']['abuse-mailbox']))
62
+ {
63
+ $r['abuse']['email'] = $r['admin']['abuse-mailbox'];
64
+ unset($r['admin']['abuse-mailbox']);
65
+ }
66
+
67
+ if (isset($r['tech']['abuse-mailbox']))
68
+ {
69
+ $r['abuse']['email'] = $r['tech']['abuse-mailbox'];
70
+ unset($r['tech']['abuse-mailbox']);
71
+ }
72
+
73
+ // Clean mess
74
+ if (isset($r['tech']['tech-c'])) unset($r['tech']['tech-c']);
75
+ if (isset($r['tech']['admin-c'])) unset($r['tech']['admin-c']);
76
+ if (isset($r['admin']['tech-c'])) unset($r['admin']['tech-c']);
77
+ if (isset($r['admin']['admin-c'])) unset($r['admin']['admin-c']);
78
+
79
+ $r = array( 'regrinfo' => $r );
80
+ $r['regyinfo']['type'] ='ip';
81
+ $r['regyinfo']['registrar'] = 'RIPE Network Coordination Centre';
82
+ return $r;
83
+ }
84
+ }
85
+ ?>
lib/whois/whois.ir.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * PHPWhois IR Lookup Extension - http://github.com/sepehr/phpwhois-ir
4
+ *
5
+ * An extension to PHPWhois (http://phpwhois.org) library to support IR lookups.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+
21
+ // Define the handler flag.
22
+ if (!defined('__IR_HANDLER__'))
23
+ define('__IR_HANDLER__', 1);
24
+
25
+ // Loadup the parser.
26
+ require_once('whois.parser.php');
27
+
28
+ /**
29
+ * IR Domain names lookup handler class.
30
+ */
31
+ class ir_handler
32
+ {
33
+ function parse($data_str, $query)
34
+ {
35
+ $translate = array(
36
+ 'nic-hdl' => 'handle',
37
+ 'org' => 'organization',
38
+ 'e-mail' => 'email',
39
+ 'person' => 'name',
40
+ 'fax-no' => 'fax',
41
+ 'domain' => 'name'
42
+ );
43
+
44
+ $contacts = array(
45
+ 'admin-c' => 'admin',
46
+ 'tech-c' => 'tech',
47
+ 'holder-c' => 'owner'
48
+ );
49
+
50
+ $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
51
+
52
+ $r['regrinfo'] = $reg;
53
+ $r['regyinfo'] = array(
54
+ 'referrer'=>'http://whois.nic.ir/',
55
+ 'registrar' => 'NIC-IR'
56
+ );
57
+ return $r;
58
+ }
59
+ }
60
+ ?>
lib/whois/whois.is.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__IS_HANDLER__'))
29
+ define('__IS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class is_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'fax-no' => 'fax',
39
+ 'e-mail' => 'email',
40
+ 'nic-hdl' => 'handle',
41
+ 'person' => 'name'
42
+ );
43
+
44
+ $contacts = array(
45
+ 'owner-c' => 'owner',
46
+ 'admin-c' => 'admin',
47
+ 'tech-c' => 'tech',
48
+ 'billing-c' => 'billing',
49
+ 'zone-c' => 'zone'
50
+ );
51
+
52
+ $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'mdy');
53
+
54
+ if (isset($reg['domain']['descr']))
55
+ {
56
+ $reg['owner']['name'] = array_shift($reg['domain']['descr']);
57
+ $reg['owner']['address'] = $reg['domain']['descr'];
58
+ unset($reg['domain']['descr']);
59
+ }
60
+
61
+ $r['regrinfo'] = $reg;
62
+ $r['regyinfo'] = array(
63
+ 'referrer' => 'http://www.isnic.is',
64
+ 'registrar' => 'ISNIC'
65
+ );
66
+ return $r;
67
+ }
68
+ }
69
+ ?>
lib/whois/whois.it.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ /*
29
+ BUG
30
+ - nserver -> array
31
+ - ContactID in address
32
+ */
33
+
34
+ if (!defined('__IT_HANDLER__'))
35
+ define('__IT_HANDLER__', 1);
36
+
37
+ require_once('whois.parser.php');
38
+
39
+ class it_handler
40
+ {
41
+ function parse($data_str, $query)
42
+ {
43
+ $items = array(
44
+ 'domain.name' => 'Domain:',
45
+ 'domain.nserver' => 'Nameservers',
46
+ 'domain.status' => 'Status:',
47
+ 'domain.expires' => 'Expire Date:',
48
+ 'owner' => 'Registrant',
49
+ 'admin' => 'Admin Contact',
50
+ 'tech' => 'Technical Contacts',
51
+ 'registrar' => 'Registrar'
52
+ );
53
+
54
+ $extra = array(
55
+ 'address:' => 'address.',
56
+ 'contactid:' => 'handle',
57
+ 'organization:' => 'organization',
58
+ 'created:' => 'created',
59
+ 'last update:' => 'changed',
60
+ 'web:' => 'web'
61
+ );
62
+
63
+ $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd',$extra);
64
+
65
+ if (isset($r['regrinfo']['registrar']))
66
+ {
67
+ $r['regrinfo']['domain']['registrar'] = $r['regrinfo']['registrar'];
68
+ unset($r['regrinfo']['registrar']);
69
+ }
70
+
71
+ $r['regyinfo'] = array(
72
+ 'registrar' => 'IT-Nic',
73
+ 'referrer' => 'http://www.nic.it/'
74
+ );
75
+ return $r;
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.jp.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__JP_HANDLER__'))
29
+ define('__JP_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class jp_handler extends WhoisClient
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ '[State]' => 'domain.status',
39
+ '[Status]' => 'domain.status',
40
+ '[Registered Date]' => 'domain.created',
41
+ '[Created on]' => 'domain.created',
42
+ '[Expires on]' => 'domain.expires',
43
+ '[Last Updated]' => 'domain.changed',
44
+ '[Last Update]' => 'domain.changed',
45
+ '[Organization]' => 'owner.organization',
46
+ '[Name]' => 'owner.name',
47
+ '[Email]' => 'owner.email',
48
+ '[Postal code]' => 'owner.address.pcode',
49
+ '[Postal Address]' => 'owner.address.street',
50
+ '[Phone]' => 'owner.phone',
51
+ '[Fax]' => 'owner.fax',
52
+ '[Administrative Contact]' => 'admin.handle',
53
+ '[Technical Contact]' => 'tech.handle',
54
+ '[Name Server]' => 'domain.nserver.'
55
+ );
56
+
57
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
58
+
59
+ $r['regyinfo'] = array(
60
+ 'referrer' => 'http://www.jprs.jp',
61
+ 'registrar' => 'Japan Registry Services'
62
+ );
63
+
64
+ if (!$this->deep_whois) return $r;
65
+
66
+ $r['rawdata'] = $data_str['rawdata'];
67
+
68
+ $items = array(
69
+ 'a. [JPNIC Handle]' => 'handle',
70
+ 'c. [Last, First]' => 'name',
71
+ 'd. [E-Mail]' => 'email',
72
+ 'g. [Organization]' => 'organization',
73
+ 'o. [TEL]' => 'phone',
74
+ 'p. [FAX]' => 'fax',
75
+ '[Last Update]' => 'changed'
76
+ );
77
+
78
+ $this->Query['server'] = 'jp.whois-servers.net';
79
+
80
+ if (!empty($r['regrinfo']['admin']['handle']))
81
+ {
82
+ $rwdata = $this->GetRawData('CONTACT '.$r['regrinfo']['admin']['handle'].'/e');
83
+ $r['rawdata'][] = '';
84
+ $r['rawdata'] = array_merge($r['rawdata'],$rwdata);
85
+ $r['regrinfo']['admin'] = generic_parser_b($rwdata,$items,'ymd',false);
86
+ $r = $this->set_whois_info($r);
87
+ }
88
+
89
+ if (!empty($r['regrinfo']['tech']['handle']))
90
+ {
91
+ if (!empty($r['regrinfo']['admin']['handle']) &&
92
+ $r['regrinfo']['admin']['handle'] == $r['regrinfo']['tech']['handle'])
93
+ {
94
+ $r['regrinfo']['tech'] = $r['regrinfo']['admin'];
95
+ }
96
+ else
97
+ {
98
+ unset($this->Query);
99
+ $this->Query['server'] = 'jp.whois-servers.net';
100
+ $rwdata = $this->GetRawData('CONTACT '.$r['regrinfo']['tech']['handle'].'/e');
101
+ $r['rawdata'][] = '';
102
+ $r['rawdata'] = array_merge($r['rawdata'],$rwdata);
103
+ $r['regrinfo']['tech'] = generic_parser_b($rwdata,$items,'ymd',false);
104
+ $r = $this->set_whois_info($r);
105
+ }
106
+ }
107
+
108
+ return $r;
109
+ }
110
+ }
111
+ ?>
lib/whois/whois.lt.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__LT_HANDLER__'))
29
+ define('__LT_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class lt_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'contact nic-hdl:' => 'handle',
39
+ 'contact name:' => 'name'
40
+ );
41
+
42
+ $items = array(
43
+ 'admin' => 'Contact type: Admin',
44
+ 'tech' => 'Contact type: Tech',
45
+ 'zone' => 'Contact type: Zone',
46
+ 'owner.name' => 'Registrar:',
47
+ 'owner.email' => 'Registrar email:',
48
+ 'domain.status' => 'Status:',
49
+ 'domain.created' => 'Registered:',
50
+ 'domain.changed' => 'Last updated:',
51
+ 'domain.nserver.' => 'NS:',
52
+ '' => '%'
53
+ );
54
+
55
+ $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd', $translate);
56
+
57
+ $r['regyinfo'] = array(
58
+ 'referrer' => 'http://www.domreg.lt',
59
+ 'registrar' => 'DOMREG.LT'
60
+ );
61
+ return $r;
62
+ }
63
+ }
64
+ ?>
lib/whois/whois.lu.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__LU_HANDLER__'))
29
+ define('__LU_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class lu_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domainname:' => 'domain.name',
39
+ 'domaintype:' => 'domain.status',
40
+ 'nserver:' => 'domain.nserver.',
41
+ 'registered:' => 'domain.created',
42
+ 'source:' => 'domain.source',
43
+ 'ownertype:' => 'owner.type',
44
+ 'org-name:' => 'owner.organization',
45
+ 'org-address:' => 'owner.address.',
46
+ 'org-zipcode:' => 'owner.address.pcode',
47
+ 'org-city:' => 'owner.address.city',
48
+ 'org-country:' => 'owner.address.country',
49
+ 'adm-name:' => 'admin.name',
50
+ 'adm-address:' => 'admin.address.',
51
+ 'adm-zipcode:' => 'admin.address.pcode',
52
+ 'adm-city:' => 'admin.address.city',
53
+ 'adm-country:' => 'admin.address.country',
54
+ 'adm-email:' => 'admin.email',
55
+ 'tec-name:' => 'tech.name',
56
+ 'tec-address:' => 'tech.address.',
57
+ 'tec-zipcode:' => 'tech.address.pcode',
58
+ 'tec-city:' => 'tech.address.city',
59
+ 'tec-country:' => 'tech.address.country',
60
+ 'tec-email:' => 'tech.email',
61
+ 'bil-name:' => 'billing.name',
62
+ 'bil-address:' => 'billing.address.',
63
+ 'bil-zipcode:' => 'billing.address.pcode',
64
+ 'bil-city:' => 'billing.address.city',
65
+ 'bil-country:' => 'billing.address.country',
66
+ 'bil-email:' => 'billing.email'
67
+ );
68
+
69
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'dmy');
70
+
71
+ $r['regyinfo'] = array(
72
+ 'referrer' => 'http://www.dns.lu',
73
+ 'registrar' => 'DNS-LU'
74
+ );
75
+ return $r;
76
+ }
77
+ }
78
+ ?>
lib/whois/whois.ly.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__LY_HANDLER__'))
31
+ define('__LY_HANDLER__', 1);
32
+
33
+ class ly_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'domain.name' => 'Domain Name:',
42
+ 'domain.status' => 'Domain Status:',
43
+ 'domain.created' => 'Created:',
44
+ 'domain.changed' => 'Updated:',
45
+ 'domain.expires' => 'Expired:',
46
+ 'domain.nserver' => 'Domain servers in listed order:'
47
+ );
48
+
49
+ $extra = array( 'zip/postal code:' => 'address.pcode' );
50
+
51
+ $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
52
+
53
+ if (!empty($r['regrinfo']['domain']['name']))
54
+ {
55
+ $r['regrinfo'] = get_contacts($r['regrinfo'],$extra);
56
+ $r['regrinfo']['domain']['name'] = $r['regrinfo']['domain']['name'][0];
57
+ $r['regrinfo']['registered'] = 'yes';
58
+ }
59
+ else
60
+ {
61
+ $r = '';
62
+ $r['regrinfo']['registered'] = 'no';
63
+ }
64
+
65
+ $r['regyinfo'] = array(
66
+ 'referrer' => 'http://www.nic.ly',
67
+ 'registrar' => 'Libya ccTLD'
68
+ );
69
+ return $r;
70
+ }
71
+ }
72
+ ?>
lib/whois/whois.main.php ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.client.php');
29
+ require_once('whois.idna.php');
30
+
31
+ class Whois extends WhoisClient
32
+ {
33
+ // Deep whois ?
34
+ var $deep_whois = true;
35
+
36
+ // Windows based ?
37
+ var $windows = false;
38
+
39
+ // Recursion allowed ?
40
+ var $gtld_recurse = true;
41
+
42
+ // Support for non-ICANN tld's
43
+ var $non_icann = false;
44
+
45
+ // Network Solutions registry server
46
+ var $NSI_REGISTRY = 'whois.nsiregistry.net';
47
+
48
+ /*
49
+ * Constructor function
50
+ */
51
+ function Whois()
52
+ {
53
+ // Load DATA array
54
+ @require('whois.servers.php');
55
+
56
+ if ( ( substr( php_uname(), 0, 7 ) == 'Windows' ) )
57
+ $this->windows = true;
58
+ else
59
+ $this->windows = false;
60
+
61
+ // Set version
62
+ $this->VERSION = sprintf("phpWhois v%s-%s", $this->CODE_VERSION, $this->DATA_VERSION);
63
+ }
64
+
65
+ /*
66
+ * Use special whois server
67
+ */
68
+
69
+ function UseServer ($tld, $server)
70
+ {
71
+ $this->WHOIS_SPECIAL[$tld] = $server;
72
+ }
73
+
74
+ /*
75
+ * Lookup query
76
+ */
77
+
78
+ function Lookup($query = '', $is_utf = true)
79
+ {
80
+ // start clean
81
+ $this->Query = array( 'status' => '' );
82
+
83
+ $query = trim($query);
84
+
85
+ $IDN = new idna_convert();
86
+
87
+ if ($is_utf)
88
+ $query = $IDN->encode($query);
89
+ else
90
+ $query = $IDN->encode(utf8_encode($query));
91
+
92
+ // If domain to query was not set
93
+ if (!isSet($query) || $query == '')
94
+ {
95
+ // Configure to use default whois server
96
+ $this->Query['server'] = $this->NSI_REGISTRY;
97
+ return ;
98
+ }
99
+
100
+ // Set domain to query in query array
101
+
102
+ $this->Query['query'] = $domain = strtolower($query);
103
+
104
+ // If query is an ip address do ip lookup
105
+
106
+ if ($query == long2ip(ip2long($query)))
107
+ {
108
+ // IPv4 Prepare to do lookup via the 'ip' handler
109
+ $ip = @gethostbyname($query);
110
+
111
+ if (isset($this->WHOIS_SPECIAL['ip']))
112
+ {
113
+ $this->Query['server'] = $this->WHOIS_SPECIAL['ip'];
114
+ $this->Query['args'] = $ip;
115
+ }
116
+ else
117
+ {
118
+ $this->Query['server'] = 'whois.arin.net';
119
+ $this->Query['args'] = "n $ip";
120
+ $this->Query['file'] = 'whois.ip.php';
121
+ $this->Query['handler'] = 'ip';
122
+ }
123
+ $this->Query['host_ip'] = $ip;
124
+ $this->Query['query'] = $ip;
125
+ $this->Query['tld'] = 'ip';
126
+ $this->Query['host_name'] = @gethostbyaddr($ip);
127
+ return $this->GetData('',$this->deep_whois);
128
+ }
129
+
130
+ if (strpos($query, ':'))
131
+ {
132
+ // IPv6 AS Prepare to do lookup via the 'ip' handler
133
+ $ip = @gethostbyname($query);
134
+
135
+ if (isset($this->WHOIS_SPECIAL['ip']))
136
+ {
137
+ $this->Query['server'] = $this->WHOIS_SPECIAL['ip'];
138
+ }
139
+ else
140
+ {
141
+ $this->Query['server'] = 'whois.ripe.net';
142
+ $this->Query['file'] = 'whois.ip.ripe.php';
143
+ $this->Query['handler'] = 'ripe';
144
+ }
145
+ $this->Query['query'] = $ip;
146
+ $this->Query['tld'] = 'ip';
147
+ return $this->GetData('',$this->deep_whois);
148
+ }
149
+
150
+ if (!strpos($query, '.'))
151
+ {
152
+ // AS Prepare to do lookup via the 'ip' handler
153
+ $ip = @gethostbyname($query);
154
+ $this->Query['server'] = 'whois.arin.net';
155
+ if (strtolower(substr($ip,0,2)) == 'as')
156
+ $as = substr($ip,2);
157
+ else
158
+ $as = $ip;
159
+ $this->Query['args'] = "a $as";
160
+ $this->Query['file'] = 'whois.ip.php';
161
+ $this->Query['handler'] = 'ip';
162
+ $this->Query['query'] = $ip;
163
+ $this->Query['tld'] = 'as';
164
+ return $this->GetData('',$this->deep_whois);
165
+ }
166
+
167
+ // Build array of all possible tld's for that domain
168
+
169
+ $tld = '';
170
+ $server = '';
171
+ $dp = explode('.', $domain);
172
+ $np = count($dp)-1;
173
+ $tldtests = array();
174
+
175
+ for ($i = 0; $i < $np; $i++)
176
+ {
177
+ array_shift($dp);
178
+ $tldtests[] = implode('.', $dp);
179
+ }
180
+
181
+ // Search the correct whois server
182
+
183
+ if ($this->non_icann)
184
+ $special_tlds = array_merge($this->WHOIS_SPECIAL,$this->WHOIS_NON_ICANN);
185
+ else
186
+ $special_tlds = $this->WHOIS_SPECIAL;
187
+
188
+ foreach($tldtests as $tld)
189
+ {
190
+ // Test if we know in advance that no whois server is
191
+ // available for this domain and that we can get the
192
+ // data via http or whois request
193
+
194
+ if (isset($special_tlds[$tld]))
195
+ {
196
+ $val = $special_tlds[$tld];
197
+
198
+ if ($val == '') return $this->Unknown();
199
+
200
+ $domain = substr($query, 0, - strlen($tld) - 1);
201
+ $val = str_replace('{domain}', $domain, $val);
202
+ $server = str_replace('{tld}', $tld, $val);
203
+ break;
204
+ }
205
+ }
206
+
207
+ if ($server == '')
208
+ foreach($tldtests as $tld)
209
+ {
210
+ // Determine the top level domain, and it's whois server using
211
+ // DNS lookups on 'whois-servers.net'.
212
+ // Assumes a valid DNS response indicates a recognised tld (!?)
213
+
214
+ $cname = $tld.'.whois-servers.net';
215
+
216
+ if (gethostbyname($cname) == $cname) continue;
217
+ $server = $tld.'.whois-servers.net';
218
+ break;
219
+ }
220
+
221
+ if ($tld && $server)
222
+ {
223
+ // If found, set tld and whois server in query array
224
+ $this->Query['server'] = $server;
225
+ $this->Query['tld'] = $tld;
226
+ $handler = '';
227
+
228
+ foreach($tldtests as $htld)
229
+ {
230
+ // special handler exists for the tld ?
231
+
232
+ if (isSet($this->DATA[$htld]))
233
+ {
234
+ $handler = $this->DATA[$htld];
235
+ break;
236
+ }
237
+
238
+ // Regular handler exists for the tld ?
239
+ if (($fp = @fopen('whois.'.$htld.'.php', 'r', 1)) and fclose($fp))
240
+ {
241
+ $handler = $htld;
242
+ break;
243
+ }
244
+ }
245
+
246
+ // If there is a handler set it
247
+
248
+ if ($handler != '')
249
+ {
250
+ $this->Query['file'] = "whois.$handler.php";
251
+ $this->Query['handler'] = $handler;
252
+ }
253
+
254
+ // Special parameters ?
255
+
256
+ if (isset($this->WHOIS_PARAM[$server]))
257
+ $this->Query['server'] = $this->Query['server'].'?'.str_replace('$',$domain,$this->WHOIS_PARAM[$server]);
258
+
259
+ $result = $this->GetData('',$this->deep_whois);
260
+ $this->Checkdns($result);
261
+ return $result;
262
+ }
263
+
264
+ // If tld not known, and domain not in DNS, return error
265
+ return $this->Unknown();
266
+ }
267
+
268
+ /* Unsupported domains */
269
+
270
+ function Unknown()
271
+ {
272
+ unset($this->Query['server']);
273
+ $this->Query['status'] = 'error';
274
+ $result['rawdata'][] = $this->Query['errstr'][] = $this->Query['query'].' domain is not supported';
275
+ $this->Checkdns($result);
276
+ $this->FixResult($result, $this->Query['query']);
277
+ return $result;
278
+ }
279
+
280
+ /* Get nameservers if missing */
281
+
282
+ function Checkdns(&$result)
283
+ {
284
+ if ($this->deep_whois && empty($result['regrinfo']['domain']['nserver']) && function_exists('dns_get_record'))
285
+ {
286
+ $ns = @dns_get_record($this->Query['query'],DNS_NS);
287
+ if (!is_array($ns)) return;
288
+ $nserver = array();
289
+ foreach($ns as $row) $nserver[] = $row['target'];
290
+ if (count($nserver) > 0)
291
+ $result['regrinfo']['domain']['nserver'] = $this->FixNameServer($nserver);
292
+ }
293
+ }
294
+ /*
295
+ * Fix and/or add name server information
296
+ */
297
+
298
+ function FixResult(&$result, $domain)
299
+ {
300
+ // Add usual fields
301
+ $result['regrinfo']['domain']['name'] = $domain;
302
+
303
+ // Check if nameservers exist
304
+
305
+ if (!isset($result['regrinfo']['registered']))
306
+ {
307
+ if (function_exists('checkdnsrr') && checkdnsrr($domain, 'NS'))
308
+ $result['regrinfo']['registered'] = 'yes';
309
+ else
310
+ $result['regrinfo']['registered'] = 'unknown';
311
+ }
312
+
313
+ // Normalize nameserver fields
314
+
315
+ if (isset($result['regrinfo']['domain']['nserver']))
316
+ {
317
+ if (!is_array($result['regrinfo']['domain']['nserver']))
318
+ {
319
+ unset($result['regrinfo']['domain']['nserver']);
320
+ }
321
+ else
322
+ $result['regrinfo']['domain']['nserver'] = $this->FixNameServer($result['regrinfo']['domain']['nserver']);
323
+ }
324
+ }
325
+ }
326
+
327
+ ?>
lib/whois/whois.me.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ME_HANDLER__'))
29
+ define('__ME_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class me_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://domain.me',
40
+ 'registrar' => 'doMEn'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.mobi.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__MOBI_HANDLER__'))
29
+ define('__MOBI_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class mobi_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+
39
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
40
+ $r['regrinfo']['registered'] = 'unknown';
41
+
42
+ $r['regyinfo']['referrer'] = 'http://www.mtld.mobi/';
43
+ $r['regyinfo']['registrar'] = 'Dot Mobi Registry';
44
+ return $r;
45
+ }
46
+ }
47
+ ?>
lib/whois/whois.museum.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__MUSEUM_HANDLER__'))
29
+ define('__MUSEUM_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class museum_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://musedoma.museum',
40
+ 'registrar' => 'Museum Domain Management Association'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.mx.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__MX_HANDLER__'))
29
+ define('__MX_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class mx_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner' => 'Registrant:',
39
+ 'admin' => 'Administrative Contact:',
40
+ 'tech' => 'Technical Contact:',
41
+ 'billing' => 'Billing Contact:',
42
+ 'domain.nserver' => 'Name Servers:',
43
+ 'domain.created' => 'Created On:',
44
+ 'domain.expires' => 'Expiration Date:',
45
+ 'domain.changed' => 'Last Updated On:',
46
+ 'domain.sponsor' => 'Registrar:'
47
+ );
48
+
49
+ $extra = array(
50
+ 'city:' => 'address.city',
51
+ 'state:' => 'address.state',
52
+ 'dns:' => '0'
53
+ );
54
+
55
+ $r['regrinfo'] = easy_parser($data_str['rawdata'],$items,'dmy',$extra);
56
+
57
+ $r['regyinfo'] = array(
58
+ 'registrar' => 'NIC Mexico',
59
+ 'referrer' => 'http://www.nic.mx/'
60
+ );
61
+
62
+ if (empty($r['regrinfo']['domain']['created']))
63
+ $r['regrinfo']['registered'] = 'no';
64
+ else
65
+ $r['regrinfo']['registered'] = 'yes';
66
+
67
+ return $r;
68
+ }
69
+ }
70
+ ?>
lib/whois/whois.name.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NAME_HANDLER__'))
29
+ define('__NAME_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class name_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://www.nic.name/',
40
+ 'registrar' => 'Global Name Registry'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.nl.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NL_HANDLER__'))
29
+ define('__NL_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class nl_handler
34
+ {
35
+ function parse($data, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.name' => 'Domain name:',
39
+ 'domain.status' => 'Status:',
40
+ 'domain.nserver' => 'Domain nameservers:',
41
+ 'domain.created' => 'Date registered:',
42
+ 'domain.changed' => 'Record last updated:',
43
+ 'domain.sponsor' => 'Registrar:',
44
+ 'admin' => 'Administrative contact:',
45
+ 'tech' => 'Technical contact(s):'
46
+ );
47
+
48
+ $r['regrinfo'] = get_blocks($data['rawdata'], $items);
49
+ $r['regyinfo']['referrer'] = 'http://www.domain-registry.nl';
50
+ $r['regyinfo']['registrar'] = 'Stichting Internet Domeinregistratie NL';
51
+
52
+ if (!isset($r['regrinfo']['domain']['status']))
53
+ {
54
+ $r['regrinfo']['registered'] = 'no';
55
+ return $r;
56
+ }
57
+
58
+ if (isset($r['regrinfo']['tech']))
59
+ $r['regrinfo']['tech'] = $this->get_contact($r['regrinfo']['tech']);
60
+
61
+ if (isset($r['regrinfo']['zone']))
62
+ $r['regrinfo']['zone'] = $this->get_contact($r['regrinfo']['zone']);
63
+
64
+ if (isset($r['regrinfo']['admin']))
65
+ $r['regrinfo']['admin'] = $this->get_contact($r['regrinfo']['admin']);
66
+
67
+ if (isset($r['regrinfo']['owner']))
68
+ $r['regrinfo']['owner'] = $this->get_contact($r['regrinfo']['owner']);
69
+
70
+ $r['regrinfo']['registered'] = 'yes';
71
+ format_dates($r,'dmy');
72
+ return $r;
73
+ }
74
+
75
+ function get_contact($data)
76
+ {
77
+ $r = get_contact($data);
78
+
79
+ if (isset($r['name']) && preg_match('/^[A-Z0-9]+-[A-Z0-9]+$/',$r['name']))
80
+ {
81
+ $r['handle'] = $r['name'];
82
+ $r['name'] = array_shift ($r['address']);
83
+ }
84
+
85
+ return $r;
86
+ }
87
+ }
88
+ ?>
lib/whois/whois.nu.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NU_HANDLER__'))
29
+ define('__NU_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class nu_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'name' => 'Domain Name (UTF-8):',
39
+ 'created' => 'Record created on',
40
+ 'expires' => 'Record expires on',
41
+ 'changed' => 'Record last updated on',
42
+ 'status' => 'Record status:',
43
+ 'handle' => 'Record ID:'
44
+ );
45
+
46
+ while (list($key, $val) = each($data_str['rawdata']))
47
+ {
48
+ $val = trim($val);
49
+
50
+ if ($val != '')
51
+ {
52
+ if ($val == 'Domain servers in listed order:')
53
+ {
54
+ while (list($key, $val) = each($data_str['rawdata']))
55
+ {
56
+ $val = trim($val);
57
+ if ($val == '')
58
+ break;
59
+ $r['regrinfo']['domain']['nserver'][] = $val;
60
+ }
61
+ break;
62
+ }
63
+
64
+ reset($items);
65
+
66
+ while (list($field, $match) = each($items))
67
+ if (strstr($val, $match))
68
+ {
69
+ $r['regrinfo']['domain'][$field] = trim(substr($val, strlen($match)));
70
+ break;
71
+ }
72
+ }
73
+ }
74
+
75
+ if (isset($r['regrinfo']['domain']))
76
+ $r['regrinfo']['registered'] = 'yes';
77
+ else
78
+ $r['regrinfo']['registered'] = 'no';
79
+
80
+ $r['regyinfo'] = array(
81
+ 'whois' => 'whois.nic.nu',
82
+ 'referrer' => 'http://www.nunames.nu',
83
+ 'registrar' => '.NU Domain, Ltd'
84
+ );
85
+
86
+ format_dates($r, 'dmy');
87
+ return $r;
88
+ }
89
+ }
90
+ ?>
lib/whois/whois.nz.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__NZ_HANDLER__'))
29
+ define('__NZ_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class nz_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain_name:' => 'domain.name',
39
+ 'query_status:' => 'domain.status',
40
+ 'ns_name_01:' => 'domain.nserver.0',
41
+ 'ns_name_02:' => 'domain.nserver.1',
42
+ 'ns_name_03:' => 'domain.nserver.2',
43
+ 'domain_dateregistered:' => 'domain.created',
44
+ 'domain_datelastmodified:' => 'domain.changed',
45
+ 'domain_datebilleduntil:' => 'domain.expires',
46
+ 'registrar_name:' => 'domain.sponsor',
47
+ 'registrant_contact_name:' => 'owner.name',
48
+ 'registrant_contact_address1:' => 'owner.address.address.0',
49
+ 'registrant_contact_address2:' => 'owner.address.address.1',
50
+ 'registrant_contact_address3:' => 'owner.address.address.2',
51
+ 'registrant_contact_postalcode:'=> 'owner.address.pcode',
52
+ 'registrant_contact_city:' => 'owner.address.city',
53
+ 'Registrant State/Province:' => 'owner.address.state',
54
+ 'registrant_contact_country:' => 'owner.address.country',
55
+ 'registrant_contact_phone:' => 'owner.phone',
56
+ 'registrant_contact_fax:' => 'owner.fax',
57
+ 'registrant_contact_email:' => 'owner.email',
58
+ 'admin_contact_name:' => 'admin.name',
59
+ 'admin_contact_address1:' => 'admin.address.address.0',
60
+ 'admin_contact_address2:' => 'admin.address.address.1',
61
+ 'admin_contact_address3:' => 'admin.address.address.2',
62
+ 'admin_contact_postalcode:' => 'admin.address.pcode',
63
+ 'admin_contact_city:' => 'admin.address.city',
64
+ 'admin_contact_country:' => 'admin.address.country',
65
+ 'admin_contact_phone:' => 'admin.phone',
66
+ 'admin_contact_fax:' => 'admin.fax',
67
+ 'admin_contact_email:' => 'admin.email',
68
+ 'technical_contact_name:' => 'tech.name',
69
+ 'technical_contact_address1:' => 'tech.address.address.0',
70
+ 'technical_contact_address1:' => 'tech.address.address.1',
71
+ 'technical_contact_address1:' => 'tech.address.address.2',
72
+ 'technical_contact_postalcode:' => 'tech.address.pcode',
73
+ 'technical_contact_city:' => 'tech.address.city',
74
+ 'technical_contact_country:' => 'tech.address.country',
75
+ 'technical_contact_phone:' => 'tech.phone',
76
+ 'technical_contact_fax:' => 'tech.fax',
77
+ 'technical_contact_email:' => 'tech.email'
78
+ );
79
+
80
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
81
+
82
+ if (!empty($r['regrinfo']['domain']['status']))
83
+ $domain_status = substr($r['regrinfo']['domain']['status'],0,3);
84
+ else
85
+ $domain_status = '';
86
+
87
+ if ($domain_status=='200')
88
+ $r['regrinfo']['registered']='yes';
89
+ elseif ($domain_status=='220')
90
+ $r['regrinfo']['registered']='no';
91
+ else
92
+ $r['regrinfo']['registered']='unknown';
93
+
94
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
95
+ $r['regrinfo']['registered'] = 'unknown';
96
+
97
+ $r['regyinfo']['referrer'] = 'http://www.dnc.org.nz';
98
+ $r['regyinfo']['registrar'] = 'New Zealand Domain Name Registry Limited';
99
+ return $r;
100
+ }
101
+ }
102
+ ?>
lib/whois/whois.org.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ORG_HANDLER__'))
29
+ define('__ORG_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class org_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+
39
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
40
+ $r['regrinfo']['registered'] = 'unknown';
41
+
42
+ $r['regyinfo']['referrer'] = 'http://www.pir.org/';
43
+ $r['regyinfo']['registrar'] = 'Public Interest Registry';
44
+ return $r;
45
+ }
46
+ }
47
+ ?>
lib/whois/whois.org.za.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__ORG_ZA_HANDLER__'))
31
+ define('__ORG_ZA_HANDLER__', 1);
32
+
33
+ class org_za_handler
34
+ {
35
+ function parse($data, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.status' => 'Status:',
39
+ 'domain.nserver' => 'Domain name servers in listed order:',
40
+ 'domain.changed' => 'Record last updated on',
41
+ 'owner' => 'rwhois search on',
42
+ 'admin' => 'Administrative Contact:',
43
+ 'tech' => 'Technical Contact:',
44
+ 'billing' => 'Billing Contact:',
45
+ '#' => 'Search Again'
46
+ );
47
+
48
+ $r['regrinfo'] = get_blocks($data['rawdata'], $items);
49
+
50
+ if (isset($r['regrinfo']['domain']['status']))
51
+ {
52
+ $r['regrinfo']['registered'] = 'yes';
53
+ $r['regrinfo']['domain']['handler'] = strtok(array_shift($r['regrinfo']['owner']),' ');
54
+ $r['regrinfo'] = get_contacts($r['regrinfo']);
55
+ }
56
+ else
57
+ $r['regrinfo']['registered'] = 'no';
58
+
59
+ $r['regyinfo']['referrer'] = 'http://www.org.za';
60
+ $r['regyinfo']['registrar'] = 'The ORG.ZA Domain';
61
+ return $r;
62
+ }
63
+ }
64
+ ?>
lib/whois/whois.parser.php ADDED
@@ -0,0 +1,873 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ //-------------------------------------------------------------------------
29
+
30
+ function generic_parser_a ($rawdata, $translate, $contacts, $main='domain', $dateformat='dmy')
31
+ {
32
+ $blocks = generic_parser_a_blocks($rawdata,$translate,$disclaimer);
33
+
34
+ if (isset($disclaimer) && is_array($disclaimer))
35
+ $ret['disclaimer']=$disclaimer;
36
+
37
+ if (empty($blocks) || !is_array($blocks['main']))
38
+ {
39
+ $ret['registered']='no';
40
+ return $ret;
41
+ }
42
+
43
+ $r = $blocks['main'];
44
+ $ret['registered'] = 'yes';
45
+
46
+ while (list($key,$val) = each($contacts))
47
+ if (isset($r[$key]))
48
+ {
49
+ if (is_array($r[$key]))
50
+ $blk = $r[$key][count($r[$key])-1];
51
+ else
52
+ $blk = $r[$key];
53
+
54
+ $blk = strtoupper(strtok($blk,' '));
55
+ if (isset($blocks[$blk])) $ret[$val] = $blocks[$blk];
56
+ unset($r[$key]);
57
+ }
58
+
59
+ if ($main) $ret[$main] = $r;
60
+
61
+ format_dates($ret,$dateformat);
62
+ return $ret;
63
+ }
64
+
65
+ //-------------------------------------------------------------------------
66
+
67
+ function generic_parser_a_blocks ($rawdata, $translate, &$disclaimer)
68
+ {
69
+ $r = array();
70
+ $newblock = false;
71
+ $hasdata = false;
72
+ $block = array();
73
+ $blocks = false;
74
+ $gkey = 'main';
75
+ $dend = false;
76
+
77
+ while (list($key,$val)=each($rawdata))
78
+ {
79
+ $val=trim($val);
80
+
81
+ if ($val != '' && ($val[0] == '%' || $val[0] == '#'))
82
+ {
83
+ if (!$dend) $disclaimer[]=trim(substr($val,1));
84
+ continue;
85
+ }
86
+ if ($val=='')
87
+ {
88
+ $newblock = true;
89
+ continue;
90
+ }
91
+ if ($newblock && $hasdata)
92
+ {
93
+ $blocks[$gkey] = $block;
94
+ $block = array();
95
+ $gkey = '';
96
+ }
97
+ $dend = true;
98
+ $newblock = false;
99
+ $k = trim(strtok($val,':'));
100
+ $v = trim(substr(strstr($val,':'),1));
101
+
102
+ if ($v == '') continue;
103
+
104
+ $hasdata = true;
105
+
106
+ if (isset($translate[$k]))
107
+ {
108
+ $k=$translate[$k];
109
+ if ($k=='') continue;
110
+ if (strstr($k,'.'))
111
+ {
112
+ eval("\$block".getvarname($k)."=\$v;");
113
+ continue;
114
+ }
115
+ }
116
+ else $k=strtolower($k);
117
+
118
+ if ($k=='handle')
119
+ {
120
+ $v = strtok($v,' ');
121
+ $gkey = strtoupper($v);
122
+ }
123
+
124
+ if (isset($block[$k]) && is_array($block[$k]))
125
+ $block[$k][]=$v;
126
+ else
127
+ if (!isset($block[$k]) || $block[$k]=='')
128
+ $block[$k]=$v;
129
+ else
130
+ {
131
+ $x=$block[$k];
132
+ unset($block[$k]);
133
+ $block[$k][]=$x;
134
+ $block[$k][]=$v;
135
+ }
136
+ }
137
+
138
+ if ($hasdata) $blocks[$gkey]=$block;
139
+
140
+ return $blocks;
141
+ }
142
+
143
+ //-------------------------------------------------------------------------
144
+
145
+ function generic_parser_b ( $rawdata, $items = false, $dateformat='mdy', $hasreg=true, $scanall=false )
146
+ {
147
+ if (!$items)
148
+ $items = array(
149
+ 'Domain Name:' => 'domain.name',
150
+ 'Domain ID:' => 'domain.handle',
151
+ 'Sponsoring Registrar:' => 'domain.sponsor',
152
+ 'Registrar ID:' => 'domain.sponsor',
153
+ 'Domain Status:' => 'domain.status.',
154
+ 'Status:' => 'domain.status.',
155
+ 'Name Server:' => 'domain.nserver.',
156
+ 'Nameservers:' => 'domain.nserver.',
157
+ 'Maintainer:' => 'domain.referer',
158
+
159
+ 'Domain Registration Date:' => 'domain.created',
160
+ 'Domain Create Date:' => 'domain.created',
161
+ 'Domain Expiration Date:' => 'domain.expires',
162
+ 'Domain Last Updated Date:' => 'domain.changed',
163
+ 'Creation Date:' => 'domain.created',
164
+ 'Last Modification Date:' => 'domain.changed',
165
+ 'Expiration Date:' => 'domain.expires',
166
+ 'Created On:' => 'domain.created',
167
+ 'Last Updated On:' => 'domain.changed',
168
+ 'Expiration Date:' => 'domain.expires',
169
+
170
+ 'Registrant ID:' => 'owner.handle',
171
+ 'Registrant Name:' => 'owner.name',
172
+ 'Registrant Organization:' => 'owner.organization',
173
+ 'Registrant Address:' => 'owner.address.street.',
174
+ 'Registrant Address1:' => 'owner.address.street.',
175
+ 'Registrant Address2:' => 'owner.address.street.',
176
+ 'Registrant Street:' => 'owner.address.street.',
177
+ 'Registrant Street1:' => 'owner.address.street.',
178
+ 'Registrant Street2:' => 'owner.address.street.',
179
+ 'Registrant Street3:' => 'owner.address.street.',
180
+ 'Registrant Postal Code:' => 'owner.address.pcode',
181
+ 'Registrant City:' => 'owner.address.city',
182
+ 'Registrant State/Province:' => 'owner.address.state',
183
+ 'Registrant Country:' => 'owner.address.country',
184
+ 'Registrant Country/Economy:' => 'owner.address.country',
185
+ 'Registrant Phone Number:' => 'owner.phone',
186
+ 'Registrant Phone:' => 'owner.phone',
187
+ 'Registrant Facsimile Number:' => 'owner.fax',
188
+ 'Registrant FAX:' => 'owner.fax',
189
+ 'Registrant Email:' => 'owner.email',
190
+ 'Registrant E-mail:' => 'owner.email',
191
+
192
+ 'Administrative Contact ID:' => 'admin.handle',
193
+ 'Administrative Contact Name:' => 'admin.name',
194
+ 'Administrative Contact Organization:' => 'admin.organization',
195
+ 'Administrative Contact Address:' => 'admin.address.street.',
196
+ 'Administrative Contact Address1:' => 'admin.address.street.',
197
+ 'Administrative Contact Address2:' => 'admin.address.street.',
198
+ 'Administrative Contact Postal Code:' => 'admin.address.pcode',
199
+ 'Administrative Contact City:' => 'admin.address.city',
200
+ 'Administrative Contact State/Province:' => 'admin.address.state',
201
+ 'Administrative Contact Country:' => 'admin.address.country',
202
+ 'Administrative Contact Phone Number:' => 'admin.phone',
203
+ 'Administrative Contact Email:' => 'admin.email',
204
+ 'Administrative Contact Facsimile Number:' => 'admin.fax',
205
+ 'Administrative Contact Tel:' => 'admin.phone',
206
+ 'Administrative Contact Fax:' => 'admin.fax',
207
+ 'Administrative ID:' => 'admin.handle',
208
+ 'Administrative Name:' => 'admin.name',
209
+ 'Administrative Organization:' => 'admin.organization',
210
+ 'Administrative Address:' => 'admin.address.street.',
211
+ 'Administrative Address1:' => 'admin.address.street.',
212
+ 'Administrative Address2:' => 'admin.address.street.',
213
+ 'Administrative Postal Code:' => 'admin.address.pcode',
214
+ 'Administrative City:' => 'admin.address.city',
215
+ 'Administrative State/Province:' => 'admin.address.state',
216
+ 'Administrative Country/Economy:' => 'admin.address.country',
217
+ 'Administrative Phone:' => 'admin.phone',
218
+ 'Administrative E-mail:' => 'admin.email',
219
+ 'Administrative Facsimile Number:' => 'admin.fax',
220
+ 'Administrative Tel:' => 'admin.phone',
221
+ 'Administrative FAX:' => 'admin.fax',
222
+ 'Admin ID:' => 'admin.handle',
223
+ 'Admin Name:' => 'admin.name',
224
+ 'Admin Organization:' => 'admin.organization',
225
+ 'Admin Street:' => 'admin.address.street.',
226
+ 'Admin Street1:' => 'admin.address.street.',
227
+ 'Admin Street2:' => 'admin.address.street.',
228
+ 'Admin Street3:' => 'admin.address.street.',
229
+ 'Admin Address:' => 'admin.address.street.',
230
+ 'Admin Address2:' => 'admin.address.street.',
231
+ 'Admin Address3:' => 'admin.address.street.',
232
+ 'Admin City:' => 'admin.address.city',
233
+ 'Admin State/Province:' => 'admin.address.state',
234
+ 'Admin Postal Code:' => 'admin.address.pcode',
235
+ 'Admin Country:' => 'admin.address.country',
236
+ 'Admin Country/Economy:' => 'admin.address.country',
237
+ 'Admin Phone:' => 'admin.phone',
238
+ 'Admin FAX:' => 'admin.fax',
239
+ 'Admin Email:' => 'admin.email',
240
+ 'Admin E-mail:' => 'admin.email',
241
+
242
+ 'Technical Contact ID:' => 'tech.handle',
243
+ 'Technical Contact Name:' => 'tech.name',
244
+ 'Technical Contact Organization:' => 'tech.organization',
245
+ 'Technical Contact Address:' => 'tech.address.street.',
246
+ 'Technical Contact Address1:' => 'tech.address.street.',
247
+ 'Technical Contact Address2:' => 'tech.address.street.',
248
+ 'Technical Contact Postal Code:' => 'tech.address.pcode',
249
+ 'Technical Contact City:' => 'tech.address.city',
250
+ 'Technical Contact State/Province:' => 'tech.address.state',
251
+ 'Technical Contact Country:' => 'tech.address.country',
252
+ 'Technical Contact Phone Number:' => 'tech.phone',
253
+ 'Technical Contact Facsimile Number:' => 'tech.fax',
254
+ 'Technical Contact Phone:' => 'tech.phone',
255
+ 'Technical Contact Fax:' => 'tech.fax',
256
+ 'Technical Contact Email:' => 'tech.email',
257
+ 'Technical ID:' => 'tech.handle',
258
+ 'Technical Name:' => 'tech.name',
259
+ 'Technical Organization:' => 'tech.organization',
260
+ 'Technical Address:' => 'tech.address.street.',
261
+ 'Technical Address1:' => 'tech.address.street.',
262
+ 'Technical Address2:' => 'tech.address.street.',
263
+ 'Technical Postal Code:' => 'tech.address.pcode',
264
+ 'Technical City:' => 'tech.address.city',
265
+ 'Technical State/Province:' => 'tech.address.state',
266
+ 'Technical Country/Economy:' => 'tech.address.country',
267
+ 'Technical Phone Number:' => 'tech.phone',
268
+ 'Technical Facsimile Number:' => 'tech.fax',
269
+ 'Technical Phone:' => 'tech.phone',
270
+ 'Technical Fax:' => 'tech.fax',
271
+ 'Technical FAX:' => 'tech.fax',
272
+ 'Technical E-mail:' => 'tech.email',
273
+ 'Tech ID:' => 'tech.handle',
274
+ 'Tech Name:' => 'tech.name',
275
+ 'Tech Organization:' => 'tech.organization',
276
+ 'Tech Address:' => 'tech.address.street.',
277
+ 'Tech Address2:' => 'tech.address.street.',
278
+ 'Tech Address3:' => 'tech.address.street.',
279
+ 'Tech Street:' => 'tech.address.street.',
280
+ 'Tech Street1:' => 'tech.address.street.',
281
+ 'Tech Street2:' => 'tech.address.street.',
282
+ 'Tech Street3:' => 'tech.address.street.',
283
+ 'Tech City:' => 'tech.address.city',
284
+ 'Tech Postal Code:' => 'tech.address.pcode',
285
+ 'Tech State/Province:' => 'tech.address.state',
286
+ 'Tech Country:' => 'tech.address.country',
287
+ 'Tech Country/Economy:' => 'tech.address.country',
288
+ 'Tech Phone:' => 'tech.phone',
289
+ 'Tech FAX:' => 'tech.fax',
290
+ 'Tech Email:' => 'tech.email',
291
+ 'Tech E-mail:' => 'tech.email',
292
+
293
+ 'Billing Contact ID:' => 'billing.handle',
294
+ 'Billing Contact Name:' => 'billing.name',
295
+ 'Billing Contact Organization:' => 'billing.organization',
296
+ 'Billing Contact Address1:' => 'billing.address.street.',
297
+ 'Billing Contact Address2:' => 'billing.address.street.',
298
+ 'Billing Contact Postal Code:' => 'billing.address.pcode',
299
+ 'Billing Contact City:' => 'billing.address.city',
300
+ 'Billing Contact State/Province:' => 'billing.address.state',
301
+ 'Billing Contact Country:' => 'billing.address.country',
302
+ 'Billing Contact Phone Number:' => 'billing.phone',
303
+ 'Billing Contact Facsimile Number:' => 'billing.fax',
304
+ 'Billing Contact Email:' => 'billing.email',
305
+ 'Billing ID:' => 'billing.handle',
306
+ 'Billing Name:' => 'billing.name',
307
+ 'Billing Organization:' => 'billing.organization',
308
+ 'Billing Address:' => 'billing.address.street.',
309
+ 'Billing Address1:' => 'billing.address.street.',
310
+ 'Billing Address2:' => 'billing.address.street.',
311
+ 'Billing Address3:' => 'billing.address.street.',
312
+ 'Billing Street:' => 'billing.address.street.',
313
+ 'Billing Street1:' => 'billing.address.street.',
314
+ 'Billing Street2:' => 'billing.address.street.',
315
+ 'Billing Street3:' => 'billing.address.street.',
316
+ 'Billing City:' => 'billing.address.city',
317
+ 'Billing Postal Code:' => 'billing.address.pcode',
318
+ 'Billing State/Province:' => 'billing.address.state',
319
+ 'Billing Country:' => 'billing.address.country',
320
+ 'Billing Country/Economy:' => 'billing.address.country',
321
+ 'Billing Phone:' => 'billing.phone',
322
+ 'Billing Fax:' => 'billing.fax',
323
+ 'Billing FAX:' => 'billing.fax',
324
+ 'Billing Email:' => 'billing.email',
325
+ 'Billing E-mail:' => 'billing.email',
326
+
327
+ 'Zone ID:' => 'zone.handle',
328
+ 'Zone Organization:' => 'zone.organization',
329
+ 'Zone Name:' => 'zone.name',
330
+ 'Zone Address:' => 'zone.address.street.',
331
+ 'Zone Address 2:' => 'zone.address.street.',
332
+ 'Zone City:' => 'zone.address.city',
333
+ 'Zone State/Province:' => 'zone.address.state',
334
+ 'Zone Postal Code:' => 'zone.address.pcode',
335
+ 'Zone Country:' => 'zone.address.country',
336
+ 'Zone Phone Number:' => 'zone.phone',
337
+ 'Zone Fax Number:' => 'zone.fax',
338
+ 'Zone Email:' => 'zone.email'
339
+ );
340
+
341
+ $r = '';
342
+ $disok = true;
343
+
344
+ while (list($key,$val) = each($rawdata))
345
+ {
346
+ if (trim($val) != '')
347
+ {
348
+ if (($val[0]=='%' || $val[0]=='#') && $disok)
349
+ {
350
+ $r['disclaimer'][] = trim(substr($val,1));
351
+ $disok = true;
352
+ continue;
353
+ }
354
+
355
+ $disok = false;
356
+ reset($items);
357
+
358
+ while (list($match, $field)=each($items))
359
+ {
360
+ $pos = strpos($val,$match);
361
+
362
+ if ($pos !== false)
363
+ {
364
+ if ($field != '')
365
+ {
366
+ $var = '$r'.getvarname($field);
367
+ $itm = trim(substr($val,$pos+strlen($match)));
368
+
369
+ if ($itm!='')
370
+ eval($var.'="'.str_replace('"','\"',$itm).'";');
371
+ }
372
+
373
+ if (!$scanall)
374
+ break;
375
+ }
376
+ }
377
+ }
378
+ }
379
+
380
+ if (empty($r))
381
+ {
382
+ if ($hasreg) $r['registered'] = 'no';
383
+ }
384
+ else
385
+ {
386
+ if ($hasreg) $r['registered'] = 'yes';
387
+
388
+ $r = format_dates($r, $dateformat);
389
+ }
390
+
391
+ return $r;
392
+ }
393
+
394
+ //-------------------------------------------------------------------------
395
+
396
+ function getvarname ( $vdef )
397
+ {
398
+ $parts = explode('.',$vdef);
399
+ $var = '';
400
+
401
+ foreach($parts as $mn)
402
+ if ($mn == '') $var = $var.'[]';
403
+ else $var = $var.'["'.$mn.'"]';
404
+
405
+ return $var;
406
+ }
407
+
408
+ //-------------------------------------------------------------------------
409
+
410
+ function get_blocks ( $rawdata, $items, $partial_match = false, $def_block = false )
411
+ {
412
+
413
+ $r = array();
414
+ $endtag = '';
415
+
416
+ while (list($key,$val) = each($rawdata))
417
+ {
418
+ $val = trim($val);
419
+ if ($val == '') continue;
420
+
421
+ $var = $found = false;
422
+
423
+ foreach ($items as $field => $match)
424
+ {
425
+ $pos = strpos($val,$match);
426
+
427
+ if ($field != '' && $pos !== false)
428
+ {
429
+ if ($val == $match)
430
+ {
431
+ $found = true;
432
+ $endtag = '';
433
+ $line = $val;
434
+ break;
435
+ }
436
+
437
+ $last = substr($val,-1,1);
438
+
439
+ if ($last == ':' || $last == '-' || $last == ']')
440
+ {
441
+ $found = true;
442
+ $endtag = $last;
443
+ $line = $val;
444
+ }
445
+ else
446
+ {
447
+ $var = getvarname(strtok($field,'#'));
448
+ $itm = trim(substr($val,$pos+strlen($match)));
449
+ eval('$r'.$var.'=$itm;');
450
+ }
451
+
452
+ break;
453
+ }
454
+ }
455
+
456
+ if (!$found)
457
+ {
458
+ if (!$var && $def_block) $r[$def_block][] = $val;
459
+ continue;
460
+ }
461
+
462
+ $block = array();
463
+
464
+ // Block found, get data ...
465
+
466
+ while (list($key,$val) = each($rawdata))
467
+ {
468
+ $val = trim($val);
469
+
470
+ if ($val == '' || $val == str_repeat($val[0],strlen($val))) continue;
471
+
472
+ $last = substr($val,-1,1);
473
+ /*
474
+ if ($last == $endtag)
475
+ {
476
+ // Another block found
477
+ prev($rawdata);
478
+ break;
479
+ }
480
+
481
+ if ($endtag == '' || $partial_match)
482
+ */
483
+ if ($endtag == '' || $partial_match || $last == $endtag)
484
+ {
485
+ //Check if this line starts another block
486
+ $et = false;
487
+
488
+ foreach ($items as $field => $match)
489
+ {
490
+ $pos = strpos($val,$match);
491
+
492
+ if ($pos !== false && $pos == 0)
493
+ {
494
+ $et = true;
495
+ break;
496
+ }
497
+ }
498
+
499
+ if ($et)
500
+ {
501
+ // Another block found
502
+ prev($rawdata);
503
+ break;
504
+ }
505
+ }
506
+
507
+ $block[] = $val;
508
+ }
509
+
510
+ if (empty($block)) continue;
511
+
512
+ foreach ($items as $field => $match)
513
+ {
514
+ $pos = strpos($line,$match);
515
+
516
+ if ($pos !== false)
517
+ {
518
+ $var = getvarname(strtok($field,'#'));
519
+ if ($var != '[]') eval('$r'.$var.'=$block;');
520
+ }
521
+ }
522
+ }
523
+
524
+ return $r;
525
+ }
526
+
527
+ //-------------------------------------------------------------------------
528
+
529
+ function easy_parser($data_str, $items, $date_format, $translate = false ,
530
+ $has_org = false, $partial_match = false,
531
+ $def_block = false )
532
+ {
533
+ $r = get_blocks($data_str, $items, $partial_match, $def_block);
534
+ $r = get_contacts($r, $translate, $has_org);
535
+ format_dates($r, $date_format);
536
+ return $r;
537
+ }
538
+
539
+ //-------------------------------------------------------------------------
540
+
541
+ function get_contacts ( $array, $extra_items='', $has_org= false )
542
+ {
543
+ if (isset($array['billing']))
544
+ $array['billing'] = get_contact($array['billing'], $extra_items, $has_org);
545
+
546
+ if (isset($array['tech']))
547
+ $array['tech'] = get_contact($array['tech'], $extra_items, $has_org);
548
+
549
+ if (isset($array['zone']))
550
+ $array['zone'] = get_contact($array['zone'], $extra_items, $has_org);
551
+
552
+ if (isset($array['admin']))
553
+ $array['admin'] = get_contact($array['admin'], $extra_items, $has_org);
554
+
555
+ if (isset($array['owner']))
556
+ $array['owner'] = get_contact($array['owner'], $extra_items, $has_org);
557
+
558
+ if (isset($array['registrar']))
559
+ $array['registrar'] = get_contact($array['registrar'], $extra_items, $has_org);
560
+
561
+ return $array;
562
+ }
563
+
564
+ //-------------------------------------------------------------------------
565
+
566
+ function get_contact ( $array, $extra_items='', $has_org= false )
567
+ {
568
+
569
+ if (!is_array($array))
570
+ return array();
571
+
572
+ $items = array (
573
+ 'fax..:' => 'fax',
574
+ 'fax.' => 'fax',
575
+ 'fax-no:' => 'fax',
576
+ 'fax -' => 'fax',
577
+ 'fax-' => 'fax',
578
+ 'fax::' => 'fax',
579
+ 'fax:' => 'fax',
580
+ '[fax]' => 'fax',
581
+ '(fax)' => 'fax',
582
+ 'fax' => 'fax',
583
+ 'tel. ' => 'phone',
584
+ 'tel:' => 'phone',
585
+ 'phone::' => 'phone',
586
+ 'phone:' => 'phone',
587
+ 'phone-' => 'phone',
588
+ 'phone -' => 'phone',
589
+ 'email:' => 'email',
590
+ 'e-mail:' => 'email',
591
+ 'company name:' => 'organization',
592
+ 'organisation:' => 'organization',
593
+ 'first name:' => 'name.first',
594
+ 'last name:' => 'name.last',
595
+ 'street:' => 'address.street',
596
+ 'address:' => 'address.street.',
597
+ 'language:' => '',
598
+ 'location:' => 'address.city',
599
+ 'country:' => 'address.country',
600
+ 'name:' => 'name',
601
+ 'last modified:' => 'changed'
602
+ );
603
+
604
+ if ($extra_items)
605
+ {
606
+ foreach($items as $match => $field)
607
+ if (!isset($extra_items[$match]))
608
+ $extra_items[$match] = $field;
609
+ $items = $extra_items;
610
+ }
611
+
612
+ while (list($key,$val)=each($array))
613
+ {
614
+ $ok=true;
615
+
616
+ while ($ok)
617
+ {
618
+ reset($items);
619
+ $ok = false;
620
+
621
+ while (list($match,$field) = each($items))
622
+ {
623
+ $pos = strpos(strtolower($val),$match);
624
+
625
+ if ($pos === false) continue;
626
+
627
+ $itm = trim(substr($val,$pos+strlen($match)));
628
+
629
+ if ($field != '' && $itm != '')
630
+ {
631
+ eval('$r'.getvarname($field).'=$itm;');
632
+ }
633
+
634
+ $val = trim(substr($val,0,$pos));
635
+
636
+ if ($val == '')
637
+ {
638
+ unset($array[$key]);
639
+ break;
640
+ }
641
+ else
642
+ {
643
+ $array[$key] = $val;
644
+ $ok = true;
645
+ }
646
+ //break;
647
+ }
648
+
649
+ if (preg_match("/([+]*[-\(\)\. x0-9]){7,}/", $val, $matches))
650
+ {
651
+ $phone = trim(str_replace(' ','',$matches[0]));
652
+
653
+ if (strlen($phone) > 8 && !preg_match('/[0-9]{5}\-[0-9]{3}/',$phone))
654
+ {
655
+ if (isset($r['phone']))
656
+ {
657
+ if (isset($r['fax'])) continue;
658
+ $r['fax'] = trim($matches[0]);
659
+ }
660
+ else
661
+ {
662
+ $r['phone'] = trim($matches[0]);
663
+ }
664
+
665
+ $val = str_replace($matches[0],'',$val);
666
+
667
+ if ($val == '')
668
+ {
669
+ unset($array[$key]);
670
+ continue;
671
+ }
672
+ else
673
+ {
674
+ $array[$key] = $val;
675
+ $ok = true;
676
+ }
677
+ }
678
+ }
679
+
680
+ if (preg_match('/([-0-9a-zA-Z._+&\/=]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6})/',$val, $matches))
681
+ {
682
+ $r['email'] = $matches[0];
683
+
684
+ $val = str_replace($matches[0],'',$val);
685
+ $val = trim(str_replace('()','',$val));
686
+
687
+ if ($val == '')
688
+ {
689
+ unset($array[$key]);
690
+ continue;
691
+ }
692
+ else
693
+ {
694
+ if (!isset($r['name']))
695
+ {
696
+ $r['name'] = $val;
697
+ unset($array[$key]);
698
+ }
699
+ else
700
+ $array[$key] = $val;
701
+
702
+ $ok = true;
703
+ }
704
+ }
705
+ }
706
+ }
707
+
708
+ if (!isset($r['name']) && count($array)>0)
709
+ {
710
+ $r['name'] = array_shift($array);
711
+ }
712
+
713
+ if ($has_org && count($array)>0)
714
+ {
715
+ $r['organization'] = array_shift($array);
716
+ }
717
+
718
+ if (isset($r['name']) && is_array($r['name']))
719
+ {
720
+ $r['name'] = implode($r['name'],' ');
721
+ }
722
+
723
+ if (!empty($array))
724
+ {
725
+ if (isset($r['address']))
726
+ $r['address'] = array_merge($r['address'],$array);
727
+ else
728
+ $r['address'] = $array;
729
+ }
730
+
731
+ return $r;
732
+ }
733
+
734
+ //-------------------------------------------------------------------------
735
+
736
+ function format_dates (&$res,$format='mdy')
737
+ {
738
+ if (!is_array($res)) return $res;
739
+
740
+ foreach ($res as $key => $val)
741
+ {
742
+ if (is_array($val))
743
+ {
744
+ if (!is_numeric($key) && ($key=='expires' || $key=='created' || $key=='changed'))
745
+ {
746
+ $d = get_date($val[0],$format);
747
+ if ($d) $res[$key] = $d;
748
+ }
749
+ else
750
+ {
751
+ $res[$key] = format_dates($val,$format);
752
+ }
753
+ }
754
+ else
755
+ {
756
+ if (!is_numeric($key) && ($key=='expires' || $key=='created' || $key=='changed'))
757
+ {
758
+ $d = get_date($val,$format);
759
+ if ($d) $res[$key] = $d;
760
+ }
761
+ }
762
+ }
763
+
764
+ return $res;
765
+ }
766
+
767
+ //-------------------------------------------------------------------------
768
+
769
+ function get_date($date,$format)
770
+ {
771
+ $months = array( 'jan'=>1, 'ene'=>1, 'feb'=>2, 'mar'=>3, 'apr'=>4, 'abr'=>4,
772
+ 'may'=>5, 'jun'=>6, 'jul'=>7, 'aug'=>8, 'ago'=>8, 'sep'=>9,
773
+ 'oct'=>10, 'nov'=>11, 'dec'=>12, 'dic'=>12 );
774
+
775
+ $parts = explode(' ',$date);
776
+
777
+ if (strpos($parts[0],'@') !== false)
778
+ {
779
+ unset($parts[0]);
780
+ $date = implode(' ',$parts);
781
+ }
782
+
783
+ $date = str_replace(',',' ',trim($date));
784
+ $date = str_replace('.',' ',$date);
785
+ $date = str_replace('-',' ',$date);
786
+ $date = str_replace('/',' ',$date);
787
+ $date = str_replace("\t",' ',$date);
788
+
789
+ $parts = explode(' ',$date);
790
+ $res = false;
791
+
792
+ if ((strlen($parts[0]) == 8 || count($parts) == 1) && is_numeric($parts[0]))
793
+ {
794
+ $val = $parts[0];
795
+ for ($p=$i=0; $i<3; $i++)
796
+ {
797
+ if ($format[$i] != 'Y')
798
+ {
799
+ $res[$format[$i]] = substr($val,$p,2);
800
+ $p += 2;
801
+ }
802
+ else
803
+ {
804
+ $res['y'] = substr($val,$p,4);
805
+ $p += 4;
806
+ }
807
+ }
808
+ }
809
+ else
810
+ {
811
+ $format = strtolower($format);
812
+
813
+ for ($p=$i=0; $p<count($parts) && $i<strlen($format); $p++)
814
+ {
815
+ if (trim($parts[$p]) == '')
816
+ continue;
817
+
818
+ if ($format[$i] != '-')
819
+ {
820
+ $res[$format[$i]] = $parts[$p];
821
+ }
822
+ $i++;
823
+ }
824
+ }
825
+
826
+ if (!$res) return $date;
827
+
828
+ $ok = false;
829
+
830
+ while (!$ok)
831
+ {
832
+ reset($res);
833
+ $ok = true;
834
+
835
+ while (list($key, $val) = each($res))
836
+ {
837
+ if ($val == '' || $key == '') continue;
838
+
839
+ if (!is_numeric($val) && isset($months[substr(strtolower($val),0,3)]))
840
+ {
841
+ $res[$key] = $res['m'];
842
+ $res['m'] = $months[substr(strtolower($val),0,3)];
843
+ $ok = false;
844
+ break;
845
+ }
846
+
847
+ if ($key != 'y' && $key != 'Y' && $val > 1900)
848
+ {
849
+ $res[$key] = $res['y'];
850
+ $res['y'] = $val;
851
+ $ok = false;
852
+ break;
853
+ }
854
+ }
855
+ }
856
+
857
+ if ($res['m'] > 12)
858
+ {
859
+ $v = $res['m'];
860
+ $res['m'] = $res['d'];
861
+ $res['d'] = $v;
862
+ }
863
+
864
+ if ($res['y'] < 70)
865
+ $res['y'] += 2000;
866
+ else
867
+ if ($res['y'] <= 99)
868
+ $res['y'] += 1900;
869
+
870
+ return sprintf("%.4d-%02d-%02d",$res['y'],$res['m'],$res['d']);
871
+ }
872
+
873
+ ?>
lib/whois/whois.pl.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__PL_HANDLER__'))
29
+ define('__PL_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class pl_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.created' => 'created:',
39
+ 'domain.changed' => 'last modified:',
40
+ 'domain.sponsor' => 'REGISTRAR:',
41
+ '#' => 'WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system'
42
+
43
+ );
44
+
45
+ $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd');
46
+
47
+ $r['regyinfo'] = array(
48
+ 'referrer' => 'http://www.dns.pl/english/index.html',
49
+ 'registrar' => 'NASK'
50
+ );
51
+ return $r;
52
+ }
53
+ }
54
+ ?>
lib/whois/whois.pro.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ require_once('whois.parser.php');
29
+
30
+ if (!defined('__PRO_HANDLER__'))
31
+ define('__PRO_HANDLER__', 1);
32
+
33
+ class pro_handler
34
+ {
35
+ function parse($data, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data['rawdata']);
38
+ $r['regyinfo']['referrer'] = 'http://www.registrypro.pro';
39
+ $r['regyinfo']['registrar'] = 'RegistryPRO';
40
+ return $r;
41
+ }
42
+ }
43
+ ?>
lib/whois/whois.pt.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ /* TODO:
29
+ - whois - converter para http://domaininfo.com/idn_conversion.asp punnycode antes de efectuar a pesquisa
30
+ - o punnycode deveria fazer parte dos resultados fazer parte dos resultados!
31
+ */
32
+
33
+ if (!defined('__PT_HANDLER__'))
34
+ define('__PT_HANDLER__', 1);
35
+
36
+ require_once('whois.parser.php');
37
+
38
+ class pt_handler
39
+ {
40
+ function parse($data, $query)
41
+ {
42
+ $items = array(
43
+ 'domain.name' => ' / Domain Name:',
44
+ 'domain.created' => 'Data de registo / Creation Date (dd/mm/yyyy):',
45
+ 'domain.nserver.' => 'Nameserver:',
46
+ 'domain.status' => 'Estado / Status:',
47
+ 'owner' => 'Titular / Registrant',
48
+ 'billing' => 'Entidade Gestora / Billing Contact',
49
+ 'admin' => 'Respons�vel Administrativo / Admin Contact',
50
+ 'tech' => 'Respons�vel T�cnico / Tech Contact',
51
+ '#' => 'Nameserver Information'
52
+ );
53
+
54
+ $r['regrinfo'] = get_blocks($data['rawdata'], $items);
55
+
56
+ if (empty($r['regrinfo']['domain']['name']))
57
+ {
58
+ print_r($r['regrinfo']);
59
+ $r['regrinfo']['registered'] = 'no';
60
+ return $r;
61
+ }
62
+
63
+ $r['regrinfo']['domain']['created'] = get_date($r['regrinfo']['domain']['created'], 'dmy');
64
+
65
+ if ($r['regrinfo']['domain']['status'] == 'ACTIVE')
66
+ {
67
+ $r['regrinfo'] = get_contacts($r['regrinfo']);
68
+ $r['regrinfo']['registered'] = 'yes';
69
+ }
70
+ else
71
+ $r['regrinfo']['registered'] = 'no';
72
+
73
+ $r['regyinfo'] = array(
74
+ 'referrer' => 'http://www.fccn.pt',
75
+ 'registrar' => 'FCCN'
76
+ );
77
+
78
+ return $r;
79
+ }
80
+ }
81
+ ?>
lib/whois/whois.ro.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ /*
29
+ BUG
30
+ - date on ro could be given as "mail date" (ex: updated field)
31
+ - multiple person for one role, ex: news.ro
32
+ - seems the only role listed is registrant
33
+ */
34
+
35
+ if (!defined('__RO_HANDLER__'))
36
+ define('__RO_HANDLER__', 1);
37
+
38
+ require_once('whois.parser.php');
39
+
40
+ class ro_handler
41
+ {
42
+ function parse($data_str, $query)
43
+ {
44
+ $translate = array(
45
+ 'fax-no' => 'fax',
46
+ 'e-mail' => 'email',
47
+ 'nic-hdl' => 'handle',
48
+ 'person' => 'name',
49
+ 'address' => 'address.',
50
+ 'domain-name' => '',
51
+ 'updated' => 'changed',
52
+ 'registration-date' => 'created',
53
+ 'domain-status' => 'status',
54
+ 'nameserver' => 'nserver'
55
+ );
56
+
57
+ $contacts = array(
58
+ 'admin-contact' => 'admin',
59
+ 'technical-contact' => 'tech',
60
+ 'zone-contact' => 'zone',
61
+ 'billing-contact' => 'billing'
62
+ );
63
+
64
+ $extra = array(
65
+ 'postal code:' => 'address.pcode'
66
+ );
67
+
68
+ $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain','Ymd');
69
+
70
+ if (isset($reg['domain']['description']))
71
+ {
72
+ $reg['owner'] = get_contact($reg['domain']['description'],$extra);
73
+ unset($reg['domain']['description']);
74
+
75
+ foreach($reg as $key => $item)
76
+ {
77
+ if (isset($item['address']))
78
+ {
79
+ $data = $item['address'];
80
+ unset($reg[$key]['address']);
81
+ $reg[$key] = array_merge($reg[$key],get_contact($data,$extra));
82
+ }
83
+ }
84
+
85
+ $reg['registered'] = 'yes';
86
+ }
87
+ else
88
+ $reg['registered'] = 'no';
89
+
90
+ $r['regrinfo'] = $reg;
91
+ $r['regyinfo'] = array(
92
+ 'referrer' => 'http://www.nic.ro',
93
+ 'registrar' => 'nic.ro'
94
+ );
95
+
96
+ return $r;
97
+ }
98
+ }
99
+ ?>
lib/whois/whois.ru.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__RU_HANDLER__'))
29
+ define('__RU_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ru_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain:' => 'domain.name',
39
+ 'state:' => 'domain.status',
40
+ 'nserver:' => 'domain.nserver.',
41
+ 'source:' => 'domain.source',
42
+ 'created:' => 'domain.created',
43
+ 'paid-till:' => 'domain.expires',
44
+ 'type:' => 'owner.type',
45
+ 'org:' => 'owner.organization',
46
+ 'phone:' => 'owner.phone',
47
+ 'fax-no:' => 'owner.fax',
48
+ 'email:' => 'admin.email'
49
+ );
50
+
51
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'dmy');
52
+
53
+ if (empty($r['regrinfo']['domain']['status']))
54
+ $r['regrinfo']['registered'] = 'no';
55
+
56
+ $r['regyinfo'] = array(
57
+ 'referrer' => 'http://www.ripn.net',
58
+ 'registrar' => 'RUCENTER-REG-RIPN'
59
+ );
60
+ return $r;
61
+ }
62
+ }
63
+ ?>
lib/whois/whois.rwhois.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__RWHOIS_HANDLER__'))
29
+ define('__RWHOIS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class rwhois_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'network:Organization-Name:' => 'owner.name',
39
+ 'network:Organization;I:' => 'owner.organization',
40
+ 'network:Organization-City:' => 'owner.address.city',
41
+ 'network:Organization-Zip:' => 'owner.address.pcode',
42
+ 'network:Organization-Country:' => 'owner.address.country',
43
+ 'network:IP-Network-Block:' => 'network.inetnum',
44
+ 'network:IP-Network:' => 'network.inetnum',
45
+ 'network:Network-Name:' => 'network.name',
46
+ 'network:ID:' => 'network.handle',
47
+ 'network:Created:' => 'network.created',
48
+ 'network:Updated:' => 'network.changed',
49
+ 'network:Tech-Contact;I:' => 'tech.email',
50
+ 'network:Admin-Contact;I:' => 'admin.email'
51
+ );
52
+
53
+ $res = generic_parser_b($data_str, $items, 'Ymd', false);
54
+ if (isset($res['disclaimer'])) unset($res['disclaimer']);
55
+ return array( 'regrinfo' => $res );
56
+ }
57
+ }
58
+ ?>
lib/whois/whois.sc.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__SC_HANDLER__'))
29
+ define('__SC_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class sc_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, 'dmy');
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://www.nic.sc',
40
+ 'registrar' => 'VCS (Pty) Limited'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.se.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__SE_HANDLER__'))
29
+ define('__SE_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class se_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain' => 'domain.name',
39
+ 'state:' => 'domain.status.',
40
+ 'status:' => 'domain.status.',
41
+ 'expires:' => 'domain.expires',
42
+ 'created:' => 'domain.created',
43
+ 'nserver:' => 'domain.nserver.',
44
+ 'holder:' => 'owner.handle'
45
+ );
46
+
47
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd', false);
48
+
49
+ $r['regrinfo']['registered'] = isset($r['regrinfo']['domain']['name']) ? 'yes' : 'no';
50
+
51
+ $r['regyinfo'] = array(
52
+ 'referrer' => 'http://www.nic-se.se',
53
+ 'registrar' => 'NIC-SE'
54
+ );
55
+ return $r;
56
+ }
57
+ }
58
+ ?>
lib/whois/whois.servers.php ADDED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ /* servers.whois v18 Markus Welters 2004/06/25 */
29
+ /* servers.whois v17 ross golder 2003/02/09 */
30
+ /* servers.whois v16 mark jeftovic 2001/02/28 */
31
+
32
+ $this->DATA_VERSION = '19';
33
+
34
+ $this->DATA = array(
35
+ 'bz' => 'gtld',
36
+ 'com' => 'gtld',
37
+ 'jobs' => 'gtld',
38
+ 'li' => 'ch',
39
+ 'net' => 'gtld',
40
+ 'tv' => 'gtld',
41
+ 'za.org' => 'zanet',
42
+ 'za.net' => 'zanet'
43
+ );
44
+
45
+ /* Non UTF-8 servers */
46
+
47
+ $this->NON_UTF8 = array(
48
+ 'br.whois-servers.net' => 1,
49
+ 'ca.whois-servers.net' => 1,
50
+ 'cl.whois-servers.net' => 1,
51
+ 'hu.whois-servers.net' => 1,
52
+ 'is.whois-servers.net' => 1,
53
+ 'pt.whois-servers.net' => 1,
54
+ 'whois.interdomain.net' => 1,
55
+ 'whois.lacnic.net' => 1,
56
+ 'whois.nicline.com' => 1,
57
+ 'whois.ripe.net' => 1
58
+ );
59
+
60
+ /* If whois Server needs any parameters, enter it here */
61
+
62
+ $this->WHOIS_PARAM = array(
63
+ 'com.whois-servers.net' => 'domain =$',
64
+ 'net.whois-servers.net' => 'domain =$',
65
+ 'de.whois-servers.net' => '-T dn,ace $',
66
+ 'jp.whois-servers.net' => 'DOM $/e'
67
+ );
68
+
69
+ /* TLD's that have special whois servers or that can only be reached via HTTP */
70
+
71
+ $this->WHOIS_SPECIAL = array(
72
+ 'ad' => '',
73
+ 'ae' => 'whois.aeda.net.ae',
74
+ 'af' => 'whois.nic.af',
75
+ 'ai' => 'http://whois.offshore.ai/cgi-bin/whois.pl?domain-name={domain}.ai',
76
+ 'al' => '',
77
+ 'az' => '',
78
+ 'ba' => '',
79
+ 'bb' => 'http://domains.org.bb/regsearch/getdetails.cfm?DND={domain}.bb',
80
+ 'bg' => 'http://www.register.bg/bg-nic/displaydomain.pl?domain={domain}.bg&search=exist',
81
+ 'bi' => 'whois.nic.bi',
82
+ 'bj' => 'whois.nic.bj',
83
+ 'by' => '',
84
+ 'bz' => 'whois2.afilias-grs.net',
85
+ 'cy' => '',
86
+ 'es' => '',
87
+ 'fj' => 'whois.usp.ac.fj',
88
+ 'fm' => 'http://www.dot.fm/query_whois.cfm?domain={domain}&tld=fm',
89
+ 'jobs' => 'jobswhois.verisign-grs.com',
90
+ 'ke' => 'kenic.or.ke',
91
+ 'la' => 'whois.centralnic.net',
92
+ 'gr' => '',
93
+ 'gs' => 'http://www.adamsnames.tc/whois/?domain={domain}.gs',
94
+ 'gt' => 'http://www.gt/Inscripcion/whois.php?domain={domain}.gt',
95
+ 'me' => 'whois.meregistry.net',
96
+ 'mobi' => 'whois.dotmobiregistry.net',
97
+ 'ms' => 'http://www.adamsnames.tc/whois/?domain={domain}.ms',
98
+ 'mt' => 'http://www.um.edu.mt/cgi-bin/nic/whois?domain={domain}.mt',
99
+ 'nl' => 'whois.domain-registry.nl',
100
+ 'ly' => 'whois.nic.ly',
101
+ 'pe' => 'kero.rcp.net.pe',
102
+ 'pr' => 'whois.uprr.pr',
103
+ 'pro' => 'whois.registry.pro',
104
+ 'sc' => 'whois2.afilias-grs.net',
105
+ 'tc' => 'http://www.adamsnames.tc/whois/?domain={domain}.tc',
106
+ 'tf' => 'http://www.adamsnames.tc/whois/?domain={domain}.tf',
107
+ 've' => 'whois.nic.ve',
108
+ 'vg' => 'http://www.adamsnames.tc/whois/?domain={domain}.vg',
109
+ // Second level
110
+ 'net.au' => 'whois.aunic.net',
111
+ 'ae.com' => 'whois.centralnic.net',
112
+ 'br.com' => 'whois.centralnic.net',
113
+ 'cn.com' => 'whois.centralnic.net',
114
+ 'de.com' => 'whois.centralnic.net',
115
+ 'eu.com' => 'whois.centralnic.net',
116
+ 'hu.com' => 'whois.centralnic.net',
117
+ 'jpn.com'=> 'whois.centralnic.net',
118
+ 'kr.com' => 'whois.centralnic.net',
119
+ 'gb.com' => 'whois.centralnic.net',
120
+ 'no.com' => 'whois.centralnic.net',
121
+ 'qc.com' => 'whois.centralnic.net',
122
+ 'ru.com' => 'whois.centralnic.net',
123
+ 'sa.com' => 'whois.centralnic.net',
124
+ 'se.com' => 'whois.centralnic.net',
125
+ 'za.com' => 'whois.centralnic.net',
126
+ 'uk.com' => 'whois.centralnic.net',
127
+ 'us.com' => 'whois.centralnic.net',
128
+ 'uy.com' => 'whois.centralnic.net',
129
+ 'gb.net' => 'whois.centralnic.net',
130
+ 'se.net' => 'whois.centralnic.net',
131
+ 'uk.net' => 'whois.centralnic.net',
132
+ 'za.net' => 'whois.za.net',
133
+ 'za.org' => 'whois.za.net',
134
+ 'co.za' => 'http://co.za/cgi-bin/whois.sh?Domain={domain}.co.za',
135
+ 'org.za' => 'http://www.org.za/cgi-bin/rwhois?domain={domain}.org.za&format=full'
136
+ );
137
+
138
+ /* handled gTLD whois servers */
139
+
140
+ $this->WHOIS_GTLD_HANDLER = array(
141
+ 'whois.bulkregister.com' => 'enom',
142
+ 'whois.dotregistrar.com' => 'dotster',
143
+ 'whois.namesdirect.com' => 'dotster',
144
+ 'whois.psi-usa.info' => 'psiusa',
145
+ 'whois.www.tv' => 'tvcorp',
146
+ 'whois.tucows.com' => 'opensrs',
147
+ 'whois.35.com' => 'onlinenic',
148
+ 'whois.nominalia.com' => 'genericb',
149
+ 'whois.encirca.com' => 'genericb',
150
+ 'whois.corenic.net' => 'genericb'
151
+ );
152
+
153
+ /* Non ICANN TLD's */
154
+
155
+ $this->WHOIS_NON_ICANN = array (
156
+ 'agent' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
157
+ 'agente' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
158
+ 'america' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
159
+ 'amor' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
160
+ 'amore' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
161
+ 'amour' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
162
+ 'arte' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
163
+ 'artes' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
164
+ 'arts' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
165
+ 'asta' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
166
+ 'auction' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
167
+ 'auktion' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
168
+ 'boutique' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
169
+ 'chat' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
170
+ 'chiesa' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
171
+ 'church' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
172
+ 'cia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
173
+ 'ciao' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
174
+ 'cie' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
175
+ 'club' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
176
+ 'clube' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
177
+ 'com2' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
178
+ 'deporte' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
179
+ 'ditta' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
180
+ 'earth' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
181
+ 'eglise' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
182
+ 'enchere' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
183
+ 'escola' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
184
+ 'escuela' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
185
+ 'esporte' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
186
+ 'etc' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
187
+ 'famiglia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
188
+ 'familia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
189
+ 'familie' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
190
+ 'family' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
191
+ 'free' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
192
+ 'hola' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
193
+ 'game' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
194
+ 'ges' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
195
+ 'gmbh' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
196
+ 'golf' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
197
+ 'gratis' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
198
+ 'gratuit' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
199
+ 'iglesia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
200
+ 'igreja' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
201
+ 'inc' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
202
+ 'jeu' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
203
+ 'jogo' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
204
+ 'juego' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
205
+ 'kids' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
206
+ 'kirche' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
207
+ 'krunst' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
208
+ 'law' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
209
+ 'legge' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
210
+ 'lei' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
211
+ 'leilao' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
212
+ 'ley' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
213
+ 'liebe' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
214
+ 'lion' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
215
+ 'llc' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
216
+ 'llp' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
217
+ 'loi' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
218
+ 'loja' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
219
+ 'love' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
220
+ 'ltd' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
221
+ 'makler' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
222
+ 'med' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
223
+ 'mp3' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
224
+ 'not' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
225
+ 'online' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
226
+ 'recht' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
227
+ 'reise' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
228
+ 'resto' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
229
+ 'school' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
230
+ 'schule' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
231
+ 'scifi' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
232
+ 'scuola' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
233
+ 'shop' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
234
+ 'soc' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
235
+ 'spiel' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
236
+ 'sport' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
237
+ 'subasta' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
238
+ 'tec' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
239
+ 'tech' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
240
+ 'tienda' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
241
+ 'travel' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
242
+ 'turismo' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
243
+ 'usa' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
244
+ 'verein' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
245
+ 'viaje' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
246
+ 'viagem' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
247
+ 'video' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
248
+ 'voyage' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
249
+ 'xxx' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
250
+ 'z' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}'
251
+ );
252
+ ?>
lib/whois/whois.si.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__SI_HANDLER__'))
29
+ define('__SI_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class si_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $translate = array(
38
+ 'nic-hdl' => 'handle',
39
+ 'nameserver' => 'nserver'
40
+ );
41
+
42
+ $contacts = array(
43
+ 'registrant' => 'owner',
44
+ 'tech-c' => 'tech'
45
+ );
46
+
47
+ $r['regrinfo'] = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
48
+ $r['regyinfo'] = array(
49
+ 'referrer' => 'http://www.arnes.si',
50
+ 'registrar' => 'ARNES'
51
+ );
52
+ return $r;
53
+ }
54
+ }
55
+ ?>
lib/whois/whois.su.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__SU_HANDLER__'))
29
+ define('__SU_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class su_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain:' => 'domain.name',
39
+ 'state:' => 'domain.status',
40
+ 'person:' => 'owner.name',
41
+ 'phone:' => 'owner.phone',
42
+ 'e-mail:' => 'owner.email',
43
+ 'created:' => 'domain.created',
44
+ 'paid-till:' => 'domain.expires',
45
+ /*
46
+ 'nserver:' => 'domain.nserver.',
47
+ 'source:' => 'domain.source',
48
+ 'type:' => 'owner.type',
49
+ 'org:' => 'owner.organization',
50
+ 'fax-no:' => 'owner.fax',
51
+ */
52
+ );
53
+
54
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'dmy');
55
+
56
+ $r['regyinfo'] = array(
57
+ 'referrer' => 'http://www.ripn.net',
58
+ 'registrar' => 'RUCENTER-REG-RIPN'
59
+ );
60
+ return $r;
61
+ }
62
+ }
63
+ ?>
lib/whois/whois.tel.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__TEL_HANDLER__'))
29
+ define('__TEL_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class tel_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, '-md--y');
38
+ $r['regyinfo'] = array(
39
+ 'referrer' => 'http://www.telnic.org',
40
+ 'registrar' => 'Telnic'
41
+ );
42
+ return $r;
43
+ }
44
+ }
45
+ ?>
lib/whois/whois.travel.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__TRAVEL_HANDLER__'))
29
+ define('__TRAVEL_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class travel_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
38
+ $r['regyinfo']['referrer'] = 'http://www.nic.travel/';
39
+ $r['regyinfo']['registrar'] = 'Tralliance Corporation';
40
+ return $r;
41
+ }
42
+ }
43
+ ?>
lib/whois/whois.uk.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__UK_HANDLER__'))
29
+ define('__UK_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class uk_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'owner.organization' => 'Registrant:',
39
+ 'owner.address' => "Registrant's address:",
40
+ 'owner.type' => 'Registrant type:',
41
+ 'domain.created' => 'Registered on:',
42
+ 'domain.changed' => 'Last updated:',
43
+ 'domain.expires' => 'Renewal date:',
44
+ 'domain.nserver' => 'Name servers:',
45
+ 'domain.sponsor' => 'Registrar:',
46
+ 'domain.status' => 'Registration status:',
47
+ 'domain.dnssec' => 'DNSSEC:',
48
+ '' => 'WHOIS lookup made at',
49
+ 'disclaimer' => '--',
50
+ );
51
+
52
+ $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
53
+
54
+ if (isset($r['regrinfo']['owner']))
55
+ {
56
+ $r['regrinfo']['owner']['organization'] = $r['regrinfo']['owner']['organization'][0];
57
+ $r['regrinfo']['domain']['sponsor'] = $r['regrinfo']['domain']['sponsor'][0];
58
+ $r['regrinfo']['registered'] = 'yes';
59
+
60
+ $r = format_dates($r, 'dmy');
61
+ }
62
+ else
63
+ $r['regrinfo']['registered'] = 'no';
64
+
65
+ $r['regyinfo'] = array(
66
+ 'referrer' => 'http://www.nominet.org.uk',
67
+ 'registrar' => 'Nominet UK'
68
+ );
69
+ return $r;
70
+ }
71
+ }
72
+ ?>
lib/whois/whois.us.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if(!defined('__US_HANDLER__')) define('__US_HANDLER__',1);
29
+
30
+ require_once('whois.parser.php');
31
+
32
+ class us_handler
33
+ {
34
+ function parse ($data_str, $query)
35
+ {
36
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, '-md--y');
37
+ $r['regyinfo'] = array(
38
+ 'referrer'=>'http://www.neustar.us',
39
+ 'registrar' => 'NEUSTAR INC.'
40
+ );
41
+ return $r;
42
+ }
43
+ }
44
+ ?>
lib/whois/whois.utils.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ class utils extends Whois {
29
+
30
+ // showObject() and debugObject()
31
+ // - debug code to show an object or array
32
+
33
+ function showObject(&$obj)
34
+ {
35
+ $r = $this->debugObject($obj);
36
+ return "<pre>$r</pre>\n";
37
+ }
38
+
39
+ function debugObject($obj,$indent=0)
40
+ {
41
+ if (is_Array($obj))
42
+ {
43
+ $return = '';
44
+ foreach($obj as $k => $v)
45
+ {
46
+ $return .= str_repeat('&nbsp;',$indent);
47
+ $return .= $k."->$v\n";
48
+ $return .= $this->debugObject($v,$indent+1);
49
+ }
50
+ return $return;
51
+ }
52
+ }
53
+
54
+ function ns_rr_defined($query) {
55
+ return checkdnsrr($query,'NS');
56
+ }
57
+
58
+ // get nice HTML output
59
+
60
+ function showHTML($result, $link_myself=true, $params='query=$0&amp;output=nice') {
61
+
62
+ // adds links fort HTML output
63
+
64
+ $email_regex = "/([-_\w\.]+)(@)([-_\w\.]+)\b/i";
65
+ $html_regex = "/(?:^|\b)((((http|https|ftp):\/\/)|(www\.))([\w\.]+)([,:%#&\/?~=\w+\.-]+))(?:\b|$)/is";
66
+ $ip_regex = "/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/i";
67
+
68
+ $out = '';
69
+ $lempty = true;
70
+
71
+ foreach($result['rawdata'] as $line)
72
+ {
73
+ $line = trim($line);
74
+
75
+ if ($line == '')
76
+ {
77
+ if ($lempty) continue;
78
+ else $lempty = true;
79
+ }
80
+ else
81
+ $lempty = false;
82
+
83
+ $out .= $line."\n";
84
+ }
85
+
86
+ if ($lempty) $out = trim($out);
87
+
88
+ $out = strip_tags($out);
89
+ $out = preg_replace ($email_regex, '<a href="mailto:$0">$0</a>', $out);
90
+ $out = preg_replace_callback ($html_regex, 'href_replace', $out);
91
+
92
+ if ($link_myself)
93
+ {
94
+ if ($params[0] == '/')
95
+ $link = $params;
96
+ else
97
+ $link = $_SERVER['PHP_SELF'].'?'.$params;
98
+
99
+ $out = preg_replace ($ip_regex, '<a href="'.$link.'">$0</a>', $out);
100
+
101
+ if (isset($result['regrinfo']['domain']['nserver']))
102
+ {
103
+ $nserver = $result['regrinfo']['domain']['nserver'];
104
+ }
105
+ else
106
+ $nserver = false;
107
+
108
+ if (isset($result['regrinfo']['network']['nserver']))
109
+ {
110
+ $nserver = $result['regrinfo']['network']['nserver'];
111
+ }
112
+
113
+ if (is_array($nserver))
114
+ {
115
+ reset($nserver);
116
+ while (list($host, $ip) = each($nserver))
117
+ {
118
+ $url = '<a href="'. str_replace('$0',$ip,$link)."\">$host</a>";
119
+ $out = str_replace($host, $url, $out);
120
+ $out = str_replace(strtoupper($host), $url, $out);
121
+ }
122
+ }
123
+ }
124
+
125
+ // Add bold field names
126
+
127
+ $out = preg_replace ("/(?m)^([-\s\.&;'\w\t\(\)\/]+:\s*)/", '<b>$1</b>', $out);
128
+
129
+ // Add italics for disclaimer
130
+
131
+ $out = preg_replace ("/(?m)^(%.*)/", '<i>$0</i>', $out);
132
+
133
+ return str_replace("\n","<br/>\n",$out);
134
+ }
135
+ }
136
+
137
+ function href_replace($matches)
138
+ {
139
+ if (substr($matches[0],0,4)=='www.')
140
+ {
141
+ $web=$matches[0];
142
+ $url='http://'.$web;
143
+ }
144
+ else
145
+ {
146
+ $web=$matches[0];
147
+ $url=$web;
148
+ }
149
+
150
+ return '<a href="'.$url.'" target="_blank">'.$web.'</a>';
151
+ }
152
+ ?>
lib/whois/whois.ve.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
26
+ USA.
27
+ */
28
+
29
+ if (!defined('__VE_HANDLER__'))
30
+ define('__VE_HANDLER__', 1);
31
+
32
+ require_once('whois.parser.php');
33
+
34
+ class ve_handler
35
+ {
36
+ function parse($data_str, $query)
37
+ {
38
+ $items = array(
39
+ 'owner' => 'Titular:',
40
+ 'domain.name' => 'Nombre de Dominio:',
41
+ 'admin' => 'Contacto Administrativo',
42
+ 'tech' => 'Contacto Tecnico',
43
+ 'billing' => 'Contacto de Cobranza:',
44
+ 'domain.created' => 'Fecha de Creacion:',
45
+ 'domain.changed' => 'Ultima Actualizacion:',
46
+ 'domain.expires' => 'Fecha de Vencimiento:',
47
+ 'domain.status' => 'Estatus del dominio:',
48
+ 'domain.nserver' => 'Servidor(es) de Nombres de Dominio'
49
+ );
50
+
51
+ $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
52
+
53
+ if (!isset($r['regrinfo']['domain']['created']) || is_array($r['regrinfo']['domain']['created']))
54
+ {
55
+ $r['regrinfo'] = array ( 'registered' => 'no');
56
+ return $r;
57
+ }
58
+
59
+ $dns = array();
60
+
61
+ foreach($r['regrinfo']['domain']['nserver'] as $nserv)
62
+ {
63
+ if ($nserv[0] == '-') $dns[] = $nserv;
64
+ }
65
+
66
+ $r['regrinfo']['domain']['nserver'] = $dns;
67
+ $r['regrinfo'] = get_contacts($r['regrinfo']);
68
+ $r['regyinfo'] = array(
69
+ 'referrer' => 'http://registro.nic.ve',
70
+ 'registrar' => 'NIC-Venezuela - CNTI'
71
+ );
72
+ return $r;
73
+ }
74
+ }
75
+ ?>
lib/whois/whois.ws.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__WS_HANDLER__'))
29
+ define('__WS_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class ws_handler extends WhoisClient
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'Domain Name:' => 'domain.name',
39
+ 'Registrant Name:' => 'owner.organization',
40
+ 'Registrant Email:' => 'owner.email',
41
+ 'Domain Created:' => 'domain.created',
42
+ 'Domain Last Updated:' => 'domain.changed',
43
+ 'Registrar Name:' => 'domain.sponsor',
44
+ 'Current Nameservers:' => 'domain.nserver.',
45
+ 'Administrative Contact Email:' => 'admin.email',
46
+ 'Administrative Contact Telephone:' => 'admin.phone',
47
+ 'Registrar Whois:' => 'rwhois'
48
+ );
49
+
50
+ $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
51
+
52
+ $r['regyinfo']['referrer'] = 'http://www.samoanic.ws';
53
+ $r['regyinfo']['registrar'] = 'Samoa Nic';
54
+
55
+ if (!empty($r['regrinfo']['domain']['name']))
56
+ {
57
+ $r['regrinfo']['registered'] = 'yes';
58
+
59
+ if (isset($r['regrinfo']['rwhois']))
60
+ {
61
+ if ($this->deep_whois)
62
+ {
63
+ $r['regyinfo']['whois'] = $r['regrinfo']['rwhois'];
64
+ $r = $this->DeepWhois($query,$r);
65
+ }
66
+
67
+ unset($r['regrinfo']['rwhois']);
68
+ }
69
+ }
70
+ else
71
+ $r['regrinfo']['registered'] = 'no';
72
+
73
+ return $r;
74
+ }
75
+ }
76
+ ?>
lib/whois/whois.zanet.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Whois.php PHP classes to conduct whois queries
4
+
5
+ Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
6
+
7
+ Maintained by David Saez
8
+
9
+ For the most recent version of this package visit:
10
+
11
+ http://www.phpwhois.org
12
+
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
+ */
27
+
28
+ if (!defined('__ZANET_HANDLER__'))
29
+ define('__ZANET_HANDLER__', 1);
30
+
31
+ require_once('whois.parser.php');
32
+
33
+ class zanet_handler
34
+ {
35
+ function parse($data_str, $query)
36
+ {
37
+ $items = array(
38
+ 'domain.name' => 'Domain Name : ',
39
+ 'domain.created' => 'Record Created :',
40
+ 'domain.changed' => 'Record Last Updated :',
41
+ 'owner.name' => 'Registered for :',
42
+ 'admin' => 'Administrative Contact :',
43
+ 'tech' => 'Technical Contact :',
44
+ 'domain.nserver' => 'Domain Name Servers listed in order:',
45
+ 'registered' => 'No such domain: ',
46
+ '' => 'The ZA NiC whois'
47
+ );
48
+
49
+ // Arrange contacts ...
50
+
51
+ $rawdata = array();
52
+
53
+ while (list($key, $line) = each($data_str['rawdata']))
54
+ {
55
+ if (strpos($line, ' Contact ') !== false)
56
+ {
57
+ $pos = strpos($line, ':');
58
+
59
+ if ($pos !== false)
60
+ {
61
+ $rawdata[] = substr($line, 0, $pos + 1);
62
+ $rawdata[] = trim(substr($line, $pos + 1));
63
+ continue;
64
+ }
65
+ }
66
+ $rawdata[] = $line;
67
+ }
68
+
69
+ $r['regrinfo'] = get_blocks($rawdata, $items);
70
+
71
+ if (isset($r['regrinfo']['registered']))
72
+ {
73
+ $r['regrinfo']['registered'] = 'no';
74
+ }
75
+ else
76
+ {
77
+ if (isset($r['regrinfo']['admin']))
78
+ $r['regrinfo']['admin'] = get_contact($r['regrinfo']['admin']);
79
+
80
+ if (isset($r['regrinfo']['tech']))
81
+ $r['regrinfo']['tech'] = get_contact($r['regrinfo']['tech']);
82
+ }
83
+
84
+ $r['regyinfo']['referrer'] = 'http://www.za.net/'; // or http://www.za.org
85
+ $r['regyinfo']['registrar'] = 'ZA NiC';
86
+ format_dates($r, 'xmdxxy');
87
+ return $r;
88
+ }
89
+ }
90
+ ?>
lib/wordfenceClass.php CHANGED
@@ -213,11 +213,6 @@ class wordfence {
213
  }
214
  //End upgrade from 1.5.6
215
 
216
- //Show an alert that user needs to enter an email address if user has not seen it before
217
- if(! wfConfig::get('alertEmailMsgCount')){
218
- wfConfig::set('alertEmailMsgCount', 0);
219
- }
220
-
221
  global $wpdb;
222
  $prefix = $wpdb->base_prefix;
223
  $db->queryIgnoreError("alter table $prefix"."wfConfig modify column val longblob");
@@ -230,6 +225,11 @@ class wordfence {
230
  $db->queryIgnoreError("drop table if exists $prefix"."wfFileQueue");
231
  $db->queryIgnoreError("drop table if exists $prefix"."wfFileChanges");
232
 
 
 
 
 
 
233
  //Must be the final line
234
  }
235
  public static function install_actions(){
@@ -299,6 +299,7 @@ class wordfence {
299
 
300
  } //END doScan
301
  public static function ajax_logHuman_callback(){
 
302
  $hid = $_GET['hid'];
303
  $hid = wfUtils::decrypt($hid);
304
  if(! preg_match('/^\d+$/', $hid)){ exit(); }
@@ -922,8 +923,55 @@ class wordfence {
922
  }
923
  return array('ok' => 1, 'results' => $results);
924
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
925
  public static function ajax_blockIP_callback(){
926
  $IP = trim($_POST['IP']);
 
927
  if(! preg_match('/^\d+\.\d+\.\d+\.\d+$/', $IP)){
928
  return array('err' => 1, 'errorMsg' => "Please enter a valid IP address to block.");
929
  }
@@ -938,7 +986,7 @@ class wordfence {
938
  return array('err' => 1, 'errorMsg' => "The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google.");
939
  }
940
  }
941
- self::getLog()->blockIP($IP, $_POST['reason']);
942
  return array('ok' => 1);
943
  }
944
  public static function ajax_reverseLookup_callback(){
@@ -1331,7 +1379,7 @@ class wordfence {
1331
  }
1332
  public static function admin_init(){
1333
  if(! wfUtils::isAdmin()){ return; }
1334
- foreach(array('activate', 'scan', 'sendActivityLog', 'restoreFile', 'deleteFile', 'removeExclusion', 'activityLogUpdate', 'ticker', 'loadIssues', 'updateIssueStatus', 'deleteIssue', 'updateAllIssues', 'reverseLookup', 'unlockOutIP', 'unblockIP', 'blockIP', 'permBlockIP', 'loadStaticPanel', 'saveConfig', 'clearAllBlocked', 'killScan', 'saveCountryBlocking', 'saveScanSchedule', 'tourClosed', 'startTourAgain') as $func){
1335
  add_action('wp_ajax_wordfence_' . $func, 'wordfence::ajaxReceiver');
1336
  }
1337
 
@@ -1366,10 +1414,6 @@ class wordfence {
1366
  'tourClosed' => wfConfig::get('tourClosed', 0)
1367
  ));
1368
  }
1369
- public static function noHowGetIPWarning(){
1370
- echo '<div id="wordfenceConfigWarning" class="updated fade"><p><strong>Please go to the <a href="admin.php?page=WordfenceSecOpt">Wordfence Options Page</a> and set the option that tells Wordfence how your site gets visitor IP addresses.</strong> This is important to avoid IP spoofing attacks.</p></div>';
1371
- }
1372
-
1373
  public static function activation_warning(){
1374
  $activationError = get_option('wf_plugin_act_error', '');
1375
  if(strlen($activationError) > 400){
@@ -1402,16 +1446,23 @@ class wordfence {
1402
  }
1403
  $warningAdded = true;
1404
  }
1405
- if( (! $warningAdded) && (! wfConfig::get('howGetIPs', false)) ){
1406
- if(! preg_match('/WordfenceSecOpt/', $_SERVER['REQUEST_URI'])){
1407
- if(wfUtils::isAdminPageMU()){
1408
- add_action('network_admin_notices', 'wordfence::noHowGetIPWarning');
1409
- } else {
1410
- add_action('admin_notices', 'wordfence::noHowGetIPWarning');
1411
- }
1412
- $warningAdded = true;
1413
  }
1414
- }
 
 
 
 
 
 
 
 
 
1415
  add_submenu_page("Wordfence", "Scan", "Scan", "activate_plugins", "Wordfence", 'wordfence::menu_scan');
1416
  add_menu_page('Wordfence', 'Wordfence', 'activate_plugins', 'Wordfence', 'wordfence::menu_scan', wfUtils::getBaseURL() . 'images/wordfence-logo-16x16.png');
1417
  if(wfConfig::get('liveTrafficEnabled')){
@@ -1420,6 +1471,8 @@ class wordfence {
1420
  add_submenu_page('Wordfence', 'Blocked IPs', 'Blocked IPs', 'activate_plugins', 'WordfenceBlockedIPs', 'wordfence::menu_blockedIPs');
1421
  add_submenu_page("Wordfence", "Country Blocking", "Country Blocking", "activate_plugins", "WordfenceCountryBlocking", 'wordfence::menu_countryBlocking');
1422
  add_submenu_page("Wordfence", "Scan Schedule", "Scan Schedule", "activate_plugins", "WordfenceScanSchedule", 'wordfence::menu_scanSchedule');
 
 
1423
  add_submenu_page("Wordfence", "Options", "Options", "activate_plugins", "WordfenceSecOpt", 'wordfence::menu_options');
1424
  }
1425
  public static function menu_options(){
@@ -1434,6 +1487,22 @@ class wordfence {
1434
  public static function menu_countryBlocking(){
1435
  require 'menu_countryBlocking.php';
1436
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1437
  public static function menu_activity(){
1438
  require 'menu_activity.php';
1439
  }
213
  }
214
  //End upgrade from 1.5.6
215
 
 
 
 
 
 
216
  global $wpdb;
217
  $prefix = $wpdb->base_prefix;
218
  $db->queryIgnoreError("alter table $prefix"."wfConfig modify column val longblob");
225
  $db->queryIgnoreError("drop table if exists $prefix"."wfFileQueue");
226
  $db->queryIgnoreError("drop table if exists $prefix"."wfFileChanges");
227
 
228
+ $optScanEnabled = $db->querySingle("select val from $prefix"."wfConfig where name='scansEnabled_options'");
229
+ if($optScanEnabled != '0' && $optScanEnabled != '1'){
230
+ $db->query("update $prefix"."wfConfig set val='1' where name='scansEnabled_options'");
231
+ }
232
+
233
  //Must be the final line
234
  }
235
  public static function install_actions(){
299
 
300
  } //END doScan
301
  public static function ajax_logHuman_callback(){
302
+ wfUtils::doNotCache();
303
  $hid = $_GET['hid'];
304
  $hid = wfUtils::decrypt($hid);
305
  if(! preg_match('/^\d+$/', $hid)){ exit(); }
923
  }
924
  return array('ok' => 1, 'results' => $results);
925
  }
926
+ public static function ajax_loadBlockRanges_callback(){
927
+ $results = self::getLog()->getRanges();
928
+ return array('ok' => 1, 'results' => $results);
929
+ }
930
+ public static function ajax_unblockRange_callback(){
931
+ $id = trim($_POST['id']);
932
+ self::getLog()->unblockRange($id);
933
+ return array('ok' => 1);
934
+ }
935
+ public static function ajax_blockIPUARange_callback(){
936
+ $ipRange = trim($_POST['ipRange']);
937
+ $uaRange = trim($_POST['uaRange']);
938
+ $reason = trim($_POST['reason']);
939
+ if(preg_match('/\|+/', $ipRange . $uaRange)){
940
+ return array('err' => 1, 'errorMsg' => "You are not allowed to include a pipe character \"|\" in your IP range or browser pattern");
941
+ }
942
+ if( (! $ipRange) && wfUtils::isUABlocked($uaRange)){
943
+ return array('err' => 1, 'errorMsg' => "The browser pattern you specified will block you from your own website. We have not accepted this pattern to protect you from being blocked.");
944
+ }
945
+ if($ipRange && (! preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\-\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ipRange ))){
946
+ return array('err' => 1, 'errorMsg' => "The IP range you specified is not valid. Please specify an IP range like the following example: \"1.2.3.4 - 1.2.3.8\" without quotes.");
947
+ }
948
+ if($ipRange){
949
+ $ips = explode('-', $ipRange);
950
+ $ip1 = wfUtils::inet_aton($ips[0]);
951
+ $ip2 = wfUtils::inet_aton($ips[1]);
952
+ if($ip1 >= $ip2){
953
+ return array('err' => 1, 'errorMsg' => "The first IP address in your range must be less than the second IP address in your range.");
954
+ }
955
+ $clientIP = wfUtils::inet_aton(wfUtils::getIP());
956
+ if($ip1 <= $clientIP && $ip2 >= $clientIP){
957
+ return array('err' => 1, 'errorMsg' => "You are trying to block yourself. Your IP address is " . wfUtils::getIP() . " which falls into the range $ipRange. This blocking action has been cancelled so that you don't block yourself from your website.");
958
+ }
959
+ $ipRange = $ip1 . '-' . $ip2;
960
+ }
961
+ $range = $ipRange . '|' . $uaRange;
962
+ self::getLog()->blockRange('IU', $range, $reason);
963
+ return array('ok' => 1);
964
+ }
965
+ public static function ajax_whois_callback(){
966
+ require_once('whois/whois.main.php');
967
+ $val = trim($_POST['val']);
968
+ $whois = new Whois();
969
+ $result = $whois->Lookup($val);
970
+ return array('ok' => 1, 'result' => $result);
971
+ }
972
  public static function ajax_blockIP_callback(){
973
  $IP = trim($_POST['IP']);
974
+ $perm = $_POST['perm'] == '1' ? true : false;
975
  if(! preg_match('/^\d+\.\d+\.\d+\.\d+$/', $IP)){
976
  return array('err' => 1, 'errorMsg' => "Please enter a valid IP address to block.");
977
  }
986
  return array('err' => 1, 'errorMsg' => "The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google.");
987
  }
988
  }
989
+ self::getLog()->blockIP($IP, $_POST['reason'], false, $perm);
990
  return array('ok' => 1);
991
  }
992
  public static function ajax_reverseLookup_callback(){
1379
  }
1380
  public static function admin_init(){
1381
  if(! wfUtils::isAdmin()){ return; }
1382
+ foreach(array('activate', 'scan', 'sendActivityLog', 'restoreFile', 'deleteFile', 'removeExclusion', 'activityLogUpdate', 'ticker', 'loadIssues', 'updateIssueStatus', 'deleteIssue', 'updateAllIssues', 'reverseLookup', 'unlockOutIP', 'loadBlockRanges', 'unblockRange', 'blockIPUARange', 'whois', 'unblockIP', 'blockIP', 'permBlockIP', 'loadStaticPanel', 'saveConfig', 'clearAllBlocked', 'killScan', 'saveCountryBlocking', 'saveScanSchedule', 'tourClosed', 'startTourAgain') as $func){
1383
  add_action('wp_ajax_wordfence_' . $func, 'wordfence::ajaxReceiver');
1384
  }
1385
 
1414
  'tourClosed' => wfConfig::get('tourClosed', 0)
1415
  ));
1416
  }
 
 
 
 
1417
  public static function activation_warning(){
1418
  $activationError = get_option('wf_plugin_act_error', '');
1419
  if(strlen($activationError) > 400){
1446
  }
1447
  $warningAdded = true;
1448
  }
1449
+ if(is_plugin_active('w3-total-cache/w3-total-cache.php') && wfConfig::get('liveTrafficEnabled')){
1450
+ wfConfig::set('liveTrafficEnabled', 0);
1451
+ if(wfUtils::isAdminPageMU()){
1452
+ add_action('network_admin_notices', 'wordfence::liveTrafficW3TCWarning');
1453
+ } else {
1454
+ add_action('admin_notices', 'wordfence::liveTrafficW3TCWarning');
 
 
1455
  }
1456
+ }
1457
+ if(is_plugin_active('wp-super-cache/wp-cache.php') && wfConfig::get('liveTrafficEnabled')){
1458
+ wfConfig::set('liveTrafficEnabled', 0);
1459
+ if(wfUtils::isAdminPageMU()){
1460
+ add_action('network_admin_notices', 'wordfence::liveTrafficSuperCacheWarning');
1461
+ } else {
1462
+ add_action('admin_notices', 'wordfence::liveTrafficSuperCacheWarning');
1463
+ }
1464
+ }
1465
+
1466
  add_submenu_page("Wordfence", "Scan", "Scan", "activate_plugins", "Wordfence", 'wordfence::menu_scan');
1467
  add_menu_page('Wordfence', 'Wordfence', 'activate_plugins', 'Wordfence', 'wordfence::menu_scan', wfUtils::getBaseURL() . 'images/wordfence-logo-16x16.png');
1468
  if(wfConfig::get('liveTrafficEnabled')){
1471
  add_submenu_page('Wordfence', 'Blocked IPs', 'Blocked IPs', 'activate_plugins', 'WordfenceBlockedIPs', 'wordfence::menu_blockedIPs');
1472
  add_submenu_page("Wordfence", "Country Blocking", "Country Blocking", "activate_plugins", "WordfenceCountryBlocking", 'wordfence::menu_countryBlocking');
1473
  add_submenu_page("Wordfence", "Scan Schedule", "Scan Schedule", "activate_plugins", "WordfenceScanSchedule", 'wordfence::menu_scanSchedule');
1474
+ add_submenu_page("Wordfence", "Whois Lookup", "Whois Lookup", "activate_plugins", "WordfenceWhois", 'wordfence::menu_whois');
1475
+ add_submenu_page("Wordfence", "Advanced Blocking", "Advanced Blocking", "activate_plugins", "WordfenceRangeBlocking", 'wordfence::menu_rangeBlocking');
1476
  add_submenu_page("Wordfence", "Options", "Options", "activate_plugins", "WordfenceSecOpt", 'wordfence::menu_options');
1477
  }
1478
  public static function menu_options(){
1487
  public static function menu_countryBlocking(){
1488
  require 'menu_countryBlocking.php';
1489
  }
1490
+ public static function menu_whois(){
1491
+ require 'menu_whois.php';
1492
+ }
1493
+
1494
+ public static function menu_rangeBlocking(){
1495
+ require 'menu_rangeBlocking.php';
1496
+ }
1497
+ public static function liveTrafficW3TCWarning(){
1498
+ echo self::cachingWarning("W3 Total Cache");
1499
+ }
1500
+ public static function liveTrafficSuperCacheWarning(){
1501
+ echo self::cachingWarning("WP Super Cache");
1502
+ }
1503
+ public static function cachingWarning($plugin){
1504
+ return '<div id="wordfenceConfigWarning" class="error fade"><p><strong>The Wordfence Live Traffic feature has been disabled because you have ' . $plugin . ' active which is not compatible with Wordfence Live Traffic.</strong> If you want to reenable Wordfence Live Traffic, you need to deactivate ' . $plugin . ' and then go to the Wordfence options page and reenable Live Traffic there. Wordfence does work with ' . $plugin . ', however Live Traffic will be disabled and the Wordfence firewall will also count less hits per visitor because of the ' . $plugin . ' caching function. All other functions should work correctly.</p></div>';
1505
+ }
1506
  public static function menu_activity(){
1507
  require 'menu_activity.php';
1508
  }
lib/wordfenceConstants.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- define('WORDFENCE_API_VERSION', '2.5');
3
  define('WORDFENCE_API_URL_SEC', 'https://noc1.wordfence.com/');
4
  define('WORDFENCE_API_URL_NONSEC', 'http://noc1.wordfence.com/');
5
  define('WORDFENCE_MAX_SCAN_TIME', 86400); //Increased this from 10 mins to 1 day because very big scans run for a long time. Users can use kill.
1
  <?php
2
+ define('WORDFENCE_API_VERSION', '2.6');
3
  define('WORDFENCE_API_URL_SEC', 'https://noc1.wordfence.com/');
4
  define('WORDFENCE_API_URL_NONSEC', 'http://noc1.wordfence.com/');
5
  define('WORDFENCE_MAX_SCAN_TIME', 86400); //Increased this from 10 mins to 1 day because very big scans run for a long time. Users can use kill.
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: mmaunder
3
  Tags: wordpress, security, wordpress security, security plugin, secure, anti-virus, malware, firewall, antivirus, virus, google safe browsing, phishing, scrapers, hacking, wordfence, securty, secrity, secure
4
  Requires at least: 3.3.1
5
- Tested up to: 3.5
6
- Stable tag: 3.5.2
7
 
8
  Wordfence Security is a free enterprise class security plugin that includes a firewall, virus scanning, real-time traffic with geolocation and more.
9
 
@@ -20,9 +20,8 @@ Wordfence is 100% free. We also offer a Premium API key that lets you block coun
20
  Wordfence:
21
 
22
  * Scans core files, themes and plugins against WordPress.org repository versions to check their integrity.
23
- * WordPress Multi-Site (or WordPress MU in the older parlance) compatible.
24
- * Wordfence Security for multi-site also scans all posts and comments across all blogs from one admin panel.
25
- * Premium users can also block countries and schedule scans for specific times and a higher frequency.
26
  * See how files have changed. Optionally repair changed files that are security threats.
27
  * Scans for signatures of over 44,000 known malware variants that are known security threats.
28
  * Scans for many known backdoors including C99, R57, RootShell, Crystal Shell, Matamu, Cybershell, W4cking, Sniper, Predator, Jackal, Phantasma, GFS, Dive, Dx and many many more.
@@ -30,7 +29,6 @@ Wordfence:
30
  * Scans for heuristics of backdoors, trojans, suspicious code and other security issues.
31
  * Checks the strength of all user and admin passwords to enhance login security.
32
  * Monitor your DNS security for unauthorized DNS changes.
33
- * Includes a firewall to block common security threats like fake Googlebots, malicious scans from hackers and botnets.
34
  * Rate limit or block security threats like aggressive crawlers, scrapers and bots doing security scans for vulnerabilities in your site.
35
  * Choose whether you want to block or throttle users and robots who break your security rules.
36
  * Includes login security to lock out brute force hacks and to stop WordPress from revealing info that will compromise security.
@@ -38,6 +36,9 @@ Wordfence:
38
  * A real-time view of all traffic including automated bots that often constitute security threats that Javascript analytics packages never show you.
39
  * Real-time traffic includes reverse DNS and city-level geolocation. Know which geographic area security threats originate from.
40
  * Monitors disk space which is related to security because many DDoS attacks attempt to consume all disk space to create denial of service.
 
 
 
41
  * Our online forums are available 24/7 to answer your WordPress security questions.
42
 
43
  Wordfence Security is full-featured and constantly updated by our team to incorporate the latest security features and to hunt for the
@@ -154,6 +155,30 @@ or a theme, because often these have been updated to fix a security hole.
154
 
155
  == Changelog ==
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  = 3.5.2 =
158
  * IP detection is now much more robust. Admins must specify how their site gets IP addresses.
159
  * Fixed issue that would throw Ajax ticker into a hard loop and put load on a server if user is on "options" page and WF can't detect IPs.
2
  Contributors: mmaunder
3
  Tags: wordpress, security, wordpress security, security plugin, secure, anti-virus, malware, firewall, antivirus, virus, google safe browsing, phishing, scrapers, hacking, wordfence, securty, secrity, secure
4
  Requires at least: 3.3.1
5
+ Tested up to: 3.5.1
6
+ Stable tag: 3.6.1
7
 
8
  Wordfence Security is a free enterprise class security plugin that includes a firewall, virus scanning, real-time traffic with geolocation and more.
9
 
20
  Wordfence:
21
 
22
  * Scans core files, themes and plugins against WordPress.org repository versions to check their integrity.
23
+ * Includes a firewall to block common security threats like fake Googlebots, malicious scans from hackers and botnets.
24
+ * Includes advanced IP and Domain WHOIS to report malicious IP's or networks and block entire networks using the firewall.
 
25
  * See how files have changed. Optionally repair changed files that are security threats.
26
  * Scans for signatures of over 44,000 known malware variants that are known security threats.
27
  * Scans for many known backdoors including C99, R57, RootShell, Crystal Shell, Matamu, Cybershell, W4cking, Sniper, Predator, Jackal, Phantasma, GFS, Dive, Dx and many many more.
29
  * Scans for heuristics of backdoors, trojans, suspicious code and other security issues.
30
  * Checks the strength of all user and admin passwords to enhance login security.
31
  * Monitor your DNS security for unauthorized DNS changes.
 
32
  * Rate limit or block security threats like aggressive crawlers, scrapers and bots doing security scans for vulnerabilities in your site.
33
  * Choose whether you want to block or throttle users and robots who break your security rules.
34
  * Includes login security to lock out brute force hacks and to stop WordPress from revealing info that will compromise security.
36
  * A real-time view of all traffic including automated bots that often constitute security threats that Javascript analytics packages never show you.
37
  * Real-time traffic includes reverse DNS and city-level geolocation. Know which geographic area security threats originate from.
38
  * Monitors disk space which is related to security because many DDoS attacks attempt to consume all disk space to create denial of service.
39
+ * Wordfence Security for multi-site also scans all posts and comments across all blogs from one admin panel.
40
+ * WordPress Multi-Site (or WordPress MU in the older parlance) compatible.
41
+ * Premium users can also block countries and schedule scans for specific times and a higher frequency.
42
  * Our online forums are available 24/7 to answer your WordPress security questions.
43
 
44
  Wordfence Security is full-featured and constantly updated by our team to incorporate the latest security features and to hunt for the
155
 
156
  == Changelog ==
157
 
158
+ = 3.6.1 =
159
+ * Major new release that includes the much asked for IP Range blocking with ISP blocking ability and browser blocking.
160
+ * Added feature: WHOIS for IP's and Domains. Supports all registries and local rWhois
161
+ * Added feature: Advanced Blocking to block IP ranges and browser patterns.
162
+ * Added feature: WHOIS on live traffic pages.
163
+ * Added feature: network blocking links on live traffic pages.
164
+ * Fixed bug where W3 Total Cache and WP Super Cache cache blocked pages.
165
+ * Added explanation of how caching affects live traffic logging if we detect a caching plugin.
166
+ * Fixed AJAX loading to deal with multiple parallel ajax requests.
167
+ * Updated tour to include info on new WHOIS and Advanced Blocking features.
168
+ * Changed manual IP blocks to be permanent by default.
169
+ * Fixed issue that caused live traffic page not to reload when IP is unblocked.
170
+ * Modified "How does your site get IP's" config to avoid confusing new users.
171
+ * Changed 503 block message to be more helpful with link to FAQ on how to unblock.
172
+ * Removed redundant code in wfAPI.php
173
+ * Optimized code by moving firewall specific code to execute only if firewall is enabled.
174
+ * Fixed issue that caused "last attempted access" to show over 500 months ago.
175
+ * Fixed issue that was causing warning in getIP() code.
176
+ * Upgraded to Wordfence API version 2.6.
177
+
178
+ = 3.5.3 =
179
+ * This is the dev version. Stable is 3.5.2.
180
+ * Added detection for "hacked by badi" hack. Check if wp_options has been changed to UTF-7.
181
+
182
  = 3.5.2 =
183
  * IP detection is now much more robust. Admins must specify how their site gets IP addresses.
184
  * Fixed issue that would throw Ajax ticker into a hard loop and put load on a server if user is on "options" page and WF can't detect IPs.
wordfence.php CHANGED
@@ -1,13 +1,13 @@
1
  <?php
2
  /*
3
  Plugin Name: Wordfence Security
4
- Plugin URI: http://wordfence.com/
5
  Description: Wordfence Security - Anti-virus and Firewall security plugin for WordPress
6
  Author: Mark Maunder
7
- Version: 3.5.2
8
- Author URI: http://wordfence.com/
9
  */
10
- define('WORDFENCE_VERSION', '3.5.2');
11
  if(get_option('wordfenceActivated') != 1){
12
  add_action('activated_plugin','wordfence_save_activation_error'); function wordfence_save_activation_error(){ update_option('wf_plugin_act_error', ob_get_contents()); }
13
  }
1
  <?php
2
  /*
3
  Plugin Name: Wordfence Security
4
+ Plugin URI: http://www.wordfence.com/
5
  Description: Wordfence Security - Anti-virus and Firewall security plugin for WordPress
6
  Author: Mark Maunder
7
+ Version: 3.6.1
8
+ Author URI: http://www.wordfence.com/
9
  */
10
+ define('WORDFENCE_VERSION', '3.6.1');
11
  if(get_option('wordfenceActivated') != 1){
12
  add_action('activated_plugin','wordfence_save_activation_error'); function wordfence_save_activation_error(){ update_option('wf_plugin_act_error', ob_get_contents()); }
13
  }