def FindProxies(): """Tries to find proxies by interrogating all the user's settings. This function is a modified urillib.getproxies_registry() from the standard library. We just store the proxy value in the environment for urllib to find it. TODO(user): Iterate through all the possible values if one proxy fails, in case more than one proxy is specified in different users profiles. Returns: A list of proxies. """ proxies = [] for i in range(0, 100): try: sid = winreg.EnumKey(winreg.HKEY_USERS, i) except OSError: break try: subkey = ( sid + "\\Software\\Microsoft\\Windows" "\\CurrentVersion\\Internet Settings") internet_settings = winreg.OpenKey(winreg.HKEY_USERS, subkey) proxy_enable = winreg.QueryValueEx(internet_settings, "ProxyEnable")[0] if proxy_enable: # Returned as Unicode but problems if not converted to ASCII proxy_server = str( winreg.QueryValueEx(internet_settings, "ProxyServer")[0]) if "=" in proxy_server: # Per-protocol settings for p in proxy_server.split(";"): protocol, address = p.split("=", 1) # See if address has a type:// prefix if not re.match("^([^/:]+)://", address): address = "%s://%s" % (protocol, address) proxies.append(address) else: # Use one setting for all protocols if proxy_server[:5] == "http:": proxies.append(proxy_server) else: proxies.append("http://%s" % proxy_server) internet_settings.Close() except (OSError, ValueError, TypeError): continue logging.debug("Found proxy servers: %s", proxies) return proxies
def Run(self, unused_args): """Estimate the install date of this system.""" # Don't use winreg.KEY_WOW64_64KEY since it breaks on Windows 2000 subkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion", 0, winreg.KEY_READ) install_date = winreg.QueryValueEx(subkey, "InstallDate") self.SendReply(rdfvalue.RDFDatetime.FromSecondsSinceEpoch(install_date[0]))