{"record":{"id":"8eb9da64d17f2049","repo":"XX-net/XX-Net","slug":"d-but-server-type-s","errorCode":null,"errorMessage":"%d but server type:%s","messagePattern":"(.+?) but server type:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"code/default/gae_proxy/local/check_ip.py","lineNumber":60,"sourceCode":"from gae_proxy.local.config import config\nfrom gae_proxy.local.host_manager import HostManager\n\n\nclass CheckIp(front_base.check_ip.CheckIp):\n    def check_response(self, response):\n        server_type = response.headers.get(b'Server', b\"\")\n        if isinstance(server_type, list):\n            server_type = server_type[0]\n        self.logger.debug(\"status:%d\", response.status)\n        self.logger.debug(\"Server type:%s\", server_type)\n\n        if response.status not in self.config.check_ip_accept_status:\n            return False\n\n        if response.status in [503, 500]:\n            # out of quota\n            if b\"gws\" not in server_type and b\"Google Frontend\" not in server_type and b\"GFE\" not in server_type:\n                xlog.warn(\"%d but server type:%s\", response.status, server_type)\n                return False\n            else:\n                return True\n\n        try:\n            content = response.read()\n        except Exception as e:\n            if sys.version_info[0] == 3 and (\n                    isinstance(e, ConnectionError) or\n                    isinstance(e, ConnectionResetError) or\n                    isinstance(e, BrokenPipeError)\n            ):\n                return False\n\n            self.logger.warn(\"app check except:%r\", e)\n            return False\n\n        if self.config.check_ip_content not in content:","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/gae_proxy/local/check_ip.py#L42-L78","documentation":"IP checker received HTTP 503/500 (normally 'out of quota' codes) but the Server header is not a Google frontend (no 'gws', 'Google Frontend', or 'GFE'). A 503 from a non-Google server means the IP is not a usable GFE; check fails.","triggerScenarios":"check_ip testing an IP that answers 503/500 with a non-GFE Server header — e.g. a random server, a poisoned/blocked IP, or a middlebox responding on port 443.","commonSituations":"GFW poisoning returning fake 503 responses, IP range scans hitting non-Google hosts, or CDN servers occupying the scanned range.","solutions":["This is normal during scanning — bad IPs are discarded automatically","Keep scanning to replenish good IPs; check the IP count on the status page","Update XX-Net's check_ip rules if Google changed Server headers","If most IPs fail, your network may be heavily poisoned — try another network/ISP"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Let the scanner self-filter bad IPs; monitor good-ip count","Update XX-Net when Google changes Server headers","Test from a clean network to distinguish poisoning from real failures"],"tags":["gae-proxy","ip-check","gfe","server-header"],"backgroundTag":"ip-verification-failed","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}