複数の NIC に構成されたパブリック IP アドレスのプールがあります。LINUX マシンで実行される私の Java プロジェクトでは、プールから特定の IP アドレスを選択し、その IP を使用して HttpURLConnecion を作成する必要があります。さらに、毎回異なる IP を使用して、プールを循環させます。
現段階では、java.net ライブラリを使用して解決策を見つけることができませんでした。私はむしろ、Apache の HttpClient を見てきました。次のリンクhttp://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.htmlで、そのようなライブラリは私が探していた機能をサポートできると言われています。これに関する議論は、Define source ip address using Apache HttpClientにあります。実際、投稿されたスレッドは決定的なものではないようです。ユーザーの経験は、説明されているライブラリの使用法とは非常に対照的です。
したがって、SO コミュニティがこの問題の解決に本当に成功したとは思えません。このトピックに関するいくつかのリプレイされた質問/回答がSOで見つかることは事実ですが、それらのどれも問題の徹底的な分析を提供していないようです.
さらに、(私のプロジェクトのように) java.net ライブラリを使用しても問題はまったく発生しません。
現時点で考えられるオプションは、(Java から) いくつかの LINUX システム コマンドを呼び出して、現在の接続に使用する NIC を切り替えることです。しかし、私はまだそれを理解していません。
したがって、この問題を解決する上で肯定的な経験をしたユーザーが、解決策/アイデア/方法を教えてくれれば幸いです。
前もって感謝します、
マルチェロ
アップデート:
現在、このテストコードを実装しています。正しいステータス コード (200) が表示されます。ただし、複数の IP アドレスでテストする必要があります。
public class test {
public static void main(String[] args) {
final String authUser = "admin";
final String authPassword = "password";
Authenticator.setDefault(
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
authUser, authPassword.toCharArray());
}
}
);
System.setProperty("http.proxyUser", authUser);
System.setProperty("http.proxyPassword", authPassword);
try {
Properties systemProperties = System.getProperties();
URL url = new URL("yourURL");
systemProperties.setProperty("http.proxyHost","localhost");
systemProperties.setProperty("http.proxyPort", "8080");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int status = connection.getResponseCode();
System.out.println(status);
} catch (IOException e) {
System.out.println("connection problems");
}
}
}
この時点で、各 NIC に関連するさまざまな TCP ポートを構成できるはずです。誰かがこのようなことを試しましたか?新しいアイデア/コメントを読むのを楽しみにしています。
更新 2: 正確には、必要な人のために認証設定を含めました。