You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Jetty(9.2.13) HTTP客户端搭配Socks4Proxy请求失败求助

解决Jetty HttpClient连接Burp代理时的SOCKS4 tunnel failed code 84错误

首先得点出核心问题:你把Burp当成SOCKS4代理来用了,但Burp本质是HTTP/HTTPS正向代理,它根本不支持SOCKS4协议,所以才会返回错误码84(SOCKS4里这个码表示请求被拒绝或执行失败)。

下面是具体的修复步骤:

1. 把SOCKS4代理换成HTTP代理配置

直接替换掉代码里的Socks4Proxy部分,改用Jetty的HttpProxy类,适配Burp的代理类型:

SslContextFactory sslContextFactory = new SslContextFactory();
HttpClient httpClient = new HttpClient(sslContextFactory);

// 配置Burp的HTTP代理地址和端口(你这里用的是8082)
Address proxyAddress = new Address("127.0.0.1", 8082);
HttpProxy httpProxy = new HttpProxy(proxyAddress);
proxyConfiguration.getProxies().add(httpProxy);

httpClient.start();

Request request = httpClient.newRequest(new URI("https://google.com"));
request.method(HttpMethod.GET);
ContentResponse contentResponse = request.send();
System.out.println(contentResponse.getContentAsString());

2. 检查Burp的代理基础设置

  • 确认Burp的「Proxy」->「Options」里的监听地址是127.0.0.1:8082,和代码里的端口完全一致
  • 如果你的Burp设置了代理认证,记得在代码里加上认证信息:
// 替换成你的Burp代理用户名和密码
httpProxy.getAuthentication().addBasicAuthentication("your-proxy-username", "your-proxy-password");

3. 确保SSL证书配置生效

你已经把Burp的cacert.der导入Java信任库了,但有时候Jetty的SslContextFactory可能不会自动加载这个修改后的信任库,可以显式指定来避免SSL证书错误:

SslContextFactory sslContextFactory = new SslContextFactory.Client();
// 替换为你的Java信任库路径,默认路径一般是 $JAVA_HOME/jre/lib/security/cacerts
sslContextFactory.setTrustStorePath("/path/to/your/java/cacerts");
// 信任库默认密码是 changeit,如果修改过就换成你的密码
sslContextFactory.setTrustStorePassword("changeit");

补充:错误码84的含义

SOCKS4协议里的错误码84对应的是REQUEST_REJECTED_OR_FAILED,出现这个错误大多是因为代理服务器不支持SOCKS4请求,或者目标地址无法被代理访问——你这里的情况就是前者,用错了代理类型导致的。

内容的提问来源于stack exchange,提问作者Dipankar Dey

火山引擎 最新活动