Java自动化检测doxbin页面存在性遇DDoS防护拦截求解决方案
解决Doxbin页面检测中DDoS防护导致的虚假200状态码问题
我明白你的困扰——DDoS防护系统确实会给这类自动化检测添不少麻烦,它们会拦截非浏览器的请求,甚至返回虚假的200状态码来混淆判断。下面是几个可行的调整方案,你可以试试:
1. 模拟真实浏览器的请求头
大多数DDoS防护会通过检查请求头来识别非浏览器请求,你可以给请求添加常见的浏览器头信息,让请求看起来更“真实”。修改你的代码,添加这些请求属性:
URL u = new URL("https://doxbin.org/upload/afafgFsg/"); HttpURLConnection huc = (HttpURLConnection) u.openConnection(); huc.setRequestMethod("GET"); // 添加浏览器请求头,模拟Chrome浏览器 huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"); huc.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); huc.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); huc.setRequestProperty("Referer", "https://doxbin.org/"); huc.connect(); int code = huc.getResponseCode(); System.out.println(code); // 额外检查响应内容,判断是否是防护页面 if (code == 200) { // 读取响应的前几百个字符,检查是否包含防护页面的特征文本 BufferedReader in = new BufferedReader(new InputStreamReader(huc.getInputStream())); StringBuilder content = new StringBuilder(); String line; while ((line = in.readLine()) != null && content.length() < 500) { content.append(line); } in.close(); if (content.toString().contains("DDoS protection") || content.toString().contains("Please verify you are human")) { System.out.println("Blocked by DDoS protection"); } else { System.out.println("Page exists"); } } else if (code == 404) { System.out.println("Not Found"); } else { System.out.println("Error"); }
2. 使用更灵活的HTTP客户端库
原生的HttpURLConnection功能有限,试试OkHttp或者Java 11+自带的HttpClient,它们更容易处理会话、Cookie和复杂请求。以OkHttp为例:
首先添加Maven依赖(如果用Maven管理项目):
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.11.0</version> </dependency>
然后编写检测代码:
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://doxbin.org/upload/afafgFsg/") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { if (response.code() == 404) { System.out.println("Not Found"); } else { System.out.println("Error: " + response.code()); } return; } // 检查响应内容是否是防护页面 String body = response.body().string(); if (body.contains("DDoS protection") || body.contains("Verify you are human")) { System.out.println("Blocked by DDoS protection"); } else { System.out.println("Page exists"); } } catch (IOException e) { e.printStackTrace(); }
3. 处理Cookie验证
有些DDoS防护会要求先访问首页获取Cookie,再带着Cookie请求目标页面。你可以先请求doxbin的首页,保存Cookie,然后在后续请求中带上:
// 先获取首页的Cookie URL homeUrl = new URL("https://doxbin.org/"); HttpURLConnection homeConn = (HttpURLConnection) homeUrl.openConnection(); homeConn.connect(); String cookie = homeConn.getHeaderField("Set-Cookie"); // 用获取到的Cookie请求目标页面 URL targetUrl = new URL("https://doxbin.org/upload/afafgFsg/"); HttpURLConnection targetConn = (HttpURLConnection) targetUrl.openConnection(); targetConn.setRequestMethod("GET"); targetConn.setRequestProperty("Cookie", cookie); // 同时添加浏览器请求头 targetConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"); targetConn.connect(); // 后续的状态码和内容检查逻辑和之前一致...
注意事项
- 不要过于频繁地发送请求,否则你的IP可能会被永久封禁,建议添加合理的延迟(比如几秒一次)。
- 如果防护系统要求验证码,那么纯自动化的方式很难绕过,这种情况下可能需要手动辅助或者使用验证码识别服务(但这类服务可能不符合网站的使用条款)。
内容的提问来源于stack exchange,提问作者Shept
相关产品推荐
相关产品推荐

