英文:
Socket Binding at URL.openconnection()
问题
我该如何选择要发出请求的IP地址?服务器有多个IP地址绑定到它,有多个接口。我想要为这个请求使用特定的IP地址。
我使用了HttpsUrlConnection。
URL url = new URL("x");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
...
connection.setSSLSocketFactory(SSLSocketFactory);
connection.connect();
我在SSLSocketFactory中重写了所有的createSocket,将源IP绑定到我选择的IP上。问题是当我执行以下操作时:
URL url = new URL("x");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
...
connection.setSSLSocketFactory(SSLSocketFactory);
connection.connect();
我发现套接字被创建,并且我的sslsocketfactory使用了createSocket创建的套接字。我可以将其绑定到其他IP地址,但我想在openConnection时覆盖源IP地址。我应该在哪里进行覆盖?
英文:
JRE 8\
How do I select the IP address FROM which this request will be fired? Server has multiple IP addresses bind to it, multiple interfaces. I want to use a specific one for this request.
I have httpsurlconnection.
URL url = new Url("x");
HttpsUrlConnection connection = (HttpsUrlConnection) url.openConnection();
...
connection.setSSLSocketFactory(SSLSocketFactory);
connection.connect();
I overrided in SSLSocketFactory all createSocket with binding source ip to choosen by me. Problem is when I:
URL url = new Url("x");
HttpsUrlConnection connection = (HttpsUrlConnection) url.openConnection();
...
connection.setSSLSocketFactory(SSLSocketFactory);
connection.connect();
I see that socket is created and my sslsocketfactory using createSocket with created socket. I can bind then to other ip address but I want to override source IP address when openConnection. Where can I override it?
答案1
得分: 1
HttpsUrlConnection
使用
SSLSocketFactory.createSocket();
用以下方式覆盖:
Factory extends SSLSocketFactory{
private SSLSocketFactory basicFactory;
Factory(SSLSocketFactory basicFactory){
this.basicFactory = basicFactory;
}
...
@Override
public Socket createSocket() throws IOException {
Socket socket = basicFactory.createSocket();
socket.bind(sourceIpAddress);
return socket;
}
}
不要使用super.createSocket(),因为它会抛出SocketException("Unconnected sockets not implemented"),这将在HttpsClient中捕获,并使用NetworkClient创建带有随机源IP地址的java.net.Socket。
英文:
HttpsUrlConnection
using
SSLSocketFactory.createSocket();
Override this with something like
Factory extends SSLSocketFactory{
private SSLSocketFactory basicFactory;
Factory(SSLSocketFactory basicFactory){
this.basicFactory = basicFactory;
}
...
@Override
public Socket createSocket() throws IOException {
Socket socket = basicFactory.createSocket();
socket.bind(sourceIpAddress);
return socket;
}
}
Don't use super.createSocket() because it will throw SocketException("Unconnected sockets not implemented") which will be caught in HttpsClient and use NetworkClient to create socket with java.net.Socket with random source ip address
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论