【红队武器开发1】Java 设置代理将所有网络请求通过指定的代理服务器进行转发

一、简介

ProxySelector是一个强大的工具,允许你在Java中根据特定的规则或策略选择代理服务器。通过实现ProxySelector接口并设置默认的选择器,你可以灵活地控制网络请求的代理行为。请注意,在使用代理服务器时,要确保代理服务器可用并符合你的网络需求。

二、使用方法

  1. 创建自定义的ProxySelector实现类
    创建一个实现类来实现ProxySelector接口,并重写其中的方法。
    ProxySelector接口中有两个主要方法需要实现:
  • List<Proxy> select(URL url):该方法根据传入的URL对象返回一个代理服务器的列表。可根据URL的信息来判断是否需要使用代理,然后返回相应的代理 服务器列表。如果没有适用的代理,可以返回一个空的列表或者包含Proxy.NO_PROXY的列表表示直接链接
  • void connectFailed(URL url,SocketAddress sa,IOException ioe):在连接代理服务器或目标服务器发生错误时会调用该方法。可处理连接失败的情况:如记录日志,打印错误信息等。
package poc;

import java.io.IOException;
import java.net.*;
import java.util.Collections;
import java.util.List;

public class MyProxySelector extends ProxySelector {
    private String proxyHost;
    private int proxyPort;

    public String getProxyHost() {
        return proxyHost;
    }

    public void setProxyHost(String proxyHost) {
        this.proxyHost = proxyHost;
    }

    public int getProxyPort() {
        return proxyPort;
    }

    public void setProxyPort(int proxyPort) {
        this.proxyPort = proxyPort;
    }

    public MyProxySelector(String proxyHost, int proxyPort) {
        this.proxyHost = proxyHost;
        this.proxyPort = proxyPort;
    }

    @Override
    public List<Proxy> select(URI uri) {
        //创建代理服务器地址对象
        InetSocketAddress proxyAddr = new InetSocketAddress(this.proxyHost,this.proxyPort);
        //创建代理对象代理对象
        Proxy proxy = new Proxy(Proxy.Type.HTTP,proxyAddr);
        //返回包含一个代理服务器的列表
        return Collections.singletonList(proxy);
    }

    @Override
    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
        System.err.println("Failed to connect proxy"+sa);
        ioe.printStackTrace();
    }
}

  1. 设置默认的ProxySelector
    一旦创建了自定义的ProxySelector实现类后,可以将其设置为默认的ProxySelector,使其在全局范围内生效,通过调用ProxySelector.setDefault()方法来实现:
ProxySelector.setDefault(new MyProxySelector());
  1. 使用URLConnection或HttpClient进行网络请求
    当你设置了默认的ProxySelector后,在进行网络请求时,Java的标准网络API(如HttpURLConnection或HttpClient)会自动使用设置的ProxySelector来选择代理服务器。你无需做额外的工作,网络请求将会按照你在select()方法中定义的规则进行代理服务器的选择。
  2. 取消默认的ProxySelector设置
    可以通过ProxySelector.getDefault()方法获取默认的ProxySelector实例,然后将其设置为null:
ProxySelector.setDefault(null);

三、示例

  1. 创建实现类MyProxySelector.java实现ProxySelector,
package util;

import java.io.IOException;
import java.net.*;
import java.util.Collections;
import java.util.List;

public class MyProxySelector extends ProxySelector {
    private String proxyHost;
    private String proxyPort;

    public String getProxyHost() {
        return proxyHost;
    }

    public void setProxyHost(String proxyHost) {
        this.proxyHost = proxyHost;
    }

    public String getProxyPort() {
        return proxyPort;
    }

    public void setProxyPort(String proxyPort) {
        this.proxyPort = proxyPort;
    }

    public MyProxySelector(String proxyHost, String proxyPort) {
        this.proxyHost = proxyHost;
        this.proxyPort = proxyPort;
    }

    @Override
    public List<Proxy> select(URI uri) {
        //创建代理服务器地址对象
        InetSocketAddress proxyAddr = new InetSocketAddress(this.proxyHost, Integer.parseInt(this.proxyPort));
        //创建代理对象代理对象
        Proxy proxy = new Proxy(Proxy.Type.HTTP,proxyAddr);
        //返回包含一个代理服务器的列表
        return Collections.singletonList(proxy);
    }

    @Override
    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
        System.err.println("Failed to connect proxy"+sa);
        ioe.printStackTrace();
    }
}
  1. 使用
    在这里插入图片描述3. 测试
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaokp7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值