当前位置: 首页 > backend >正文

为任意Java程序配置Socks5与HTTP代理的方法

在红队渗透测试的内网横向移动过程中,搭建反向代理是常见操作。frp、NPS等工具可快速构建Socks5代理,方便红队人员在内网环境中进行渗透。然而,许多渗透工具由Java编写,且部分工具未内置Socks5代理支持。使用Proxifier为java.exe进程设置全局Socks5代理时总会出现各种各样的问题。

本文将详细介绍如何通过Java命令行参数或代码方式为任意Java程序配置Socks5与HTTP代理,助力红队高效开展内网渗透。


1. 命令行配置Socks5代理

通过Java虚拟机(JVM)的系统属性,可以为Java程序快速配置Socks5代理。基本命令如下:

java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080 -jar webscan.jar
参数说明:
  • -DsocksProxyHost:Socks5代理的IP地址。
  • -DsocksProxyPort:Socks5代理的端口号。
  • -DsocksProxyVersion:代理协议版本,默认为5(即Socks5),可设置为4以使用Socks4。
关于Socks5代理认证:

网上常见文章提到通过以下参数设置Socks5代理的用户名和密码:

java -DsocksProxyHost=10.1.1.2 -DsocksProxyPort=8877 -Djava.net.socks.username=alibaba -Djava.net.socks.password=secret

注意:经测试,-Djava.net.socks.username-Djava.net.socks.password 参数在实际环境中往往无效,运行时会提示Socks认证失败。目前,命令行方式暂未找到可靠的Socks5认证配置方法,建议优先使用无需认证的Socks5代理,或通过代码方式实现认证(见后文)。

2. 命令行配置HTTP/HTTPS代理

当需要为Java程序配置HTTP代理(例如通过Burp Suite抓包)时,可使用以下命令:

java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8080 -Dhttp.nonProxyHosts="*.example.com|localhost" -jar webscan.jar
参数说明:
  • -Dhttp.proxyHost:HTTP代理的IP地址。
  • -Dhttp.proxyPort:HTTP代理的端口。
  • -Dhttps.proxyHost:HTTPS代理的IP地址。
  • -Dhttps.proxyPort:HTTPS代理的端口。
  • -Dhttp.nonProxyHosts:指定无需代理的地址,支持通配符(如 *.example.com),多个地址以 | 分隔,整体用双引号包裹。经测试,该参数同时适用于HTTP和HTTPS请求。
常见误区纠正:

许多文章错误认为仅设置 http.proxyHosthttp.proxyPort 即可同时代理HTTP和HTTPS请求。实际必须同时设置 http.proxyHosthttp.proxyPorthttps.proxyHosthttps.proxyPort 四项,否则HTTPS请求无法通过代理,导致抓包失败。

HTTP代理认证:

若HTTP代理需要认证,可尝试以下命令(未在本地验证,摘自网络):

java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts="*.example.com|localhost|10.*.*.*" -jar webscan.jar
  • -Dhttp.proxyUser:HTTP代理用户名。
  • -Dhttp.proxyPassword:HTTP代理密码。

若无需认证,可省略上述两项。

HTTPS代理认证:

对于需要认证的HTTPS代理,需额外配置SSL信任存储:

java -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8080 -Dhttps.proxyUser=username -Dhttps.proxyPassword=password -Djavax.net.ssl.trustStore=c:/cacerts -Djavax.net.ssl.trustStorePassword=changeit -jar webscan.jar
  • -Djavax.net.ssl.trustStore:指定信任存储文件路径。
  • -Djavax.net.ssl.trustStorePassword:信任存储密码,默认为 changeit

3. 使用系统代理

若希望Java程序直接使用系统代理(如IE浏览器配置的代理),可使用以下命令:

java -Djava.net.useSystemProxies=true -jar webscan.jar

运行后,程序将自动使用IE浏览器“代理服务器”选项卡中配置的代理地址。配置步骤为:

  1. 打开IE浏览器。
  2. 进入“Internet选项” → “连接” → “局域网设置”。
  3. 在“代理服务器”中输入代理IP和端口。

4. 在Java代码中设置代理

为解决命令行配置的局限性(如Socks5认证问题),可在Java代码中通过 System.setPropertyProxy 类动态设置代理。这种方式灵活且便于维护,尤其适合开发自定义渗透工具。

设置HTTP/HTTPS代理:
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8080");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8080");
System.setProperty("http.nonProxyHosts", "*.example.com|localhost");
设置Socks5代理:
System.setProperty("socksProxyHost", "127.0.0.1");
System.setProperty("socksProxyPort", "1080");
Socks5代理认证实现:

为支持Socks5代理认证,可自定义 ProxyAuth 类,代码如下:

import java.net.Authenticator;
import java.net.PasswordAuthentication;public class ProxyAuth extends Authenticator {private final String user;private final String password;public ProxyAuth(String user, String password) {this.user = user;this.password = password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(user, password.toCharArray());}public static void setAuth(String user, String password) {Authenticator.setDefault(new ProxyAuth(user, password));}
}

使用示例:

ProxyAuth.setAuth("alibaba", "secret");
System.setProperty("socksProxyHost", "127.0.0.1");
System.setProperty("socksProxyPort", "1080");

此方法通过代码实现Socks5认证,弥补了命令行配置的不足,适合需要动态调整代理的场景。

http://www.xdnf.cn/news/15798.html

相关文章:

  • 2025年水安备考:水利水电安全员C类考试题
  • 基于Scrapy-Redis的分布式爬虫系统:工业级实现与深度优化
  • nodejs值process.kill
  • CCF编程能力等级认证GESP—C++8级—20250628
  • 信息学奥赛一本通 1579:【例 5】皇宫看守 | 洛谷 P2458 [SDOI2006] 保安站岗
  • 教你如何借助AI精读文献
  • MC0463四大名著-水浒签到
  • 在Vscode中使用Kimi K2模型:实践指南,三分钟生成个小游戏
  • 网络大提速,RDMA,IB,iWrap
  • 深度学习中的模型剪枝工具Torch-Pruning的使用
  • 如何解决AttributeError: ‘NoneType‘ object has no attribute问题
  • 使用 PlanetScope 卫星图像绘制水质参数:以莫干湖为例
  • 记录我coding印象比较深刻的BUG
  • 【Docker项目实战】使用Docker部署Homeland社区系统
  • 以太坊的心脏与大脑:详解执行客户端(EL)与共识客户端(CL)
  • 网络原理——TCP
  • node.js学习笔记1
  • 云边端协同架构下的智能计算革命
  • 解惑LINQ中的SelectMany用法
  • 一站式PDF转Markdown解决方案PDF3MD
  • 数据库第四次作业
  • Flexbox vs Float vs Table:现代布局终极对比
  • kombu 运行超长时间任务导致RabbitMQ消费者断开
  • (LeetCode 面试经典 150 题) 49. 字母异位词分组 (哈希表)
  • 基于Eureka和restTemple的负载均衡
  • buildroot运行qemu进行pcie设备模拟,开发驱动的方式
  • 【RK3576】【Android14】Android平台构建
  • 爬虫逆向之JS混淆案例(全国招标公告公示搜索引擎 type__1017逆向)
  • 重学Framework Input模块:如何实现按键一键启动Activity-学员作业
  • HTML5中的自定义属性