- クライアントのIPアドレスを取得する方法はいくつかありますが、一般的な方法は、クライアントとサーバーの間で確立されたソケット接続からIPアドレスを取得することです。以下のコードは、ServerSocketとSocketを使用してクライアントのIPアドレスを取得する例です。
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("サーバーがポート8080で起動しました。");
while (true) {
Socket clientSocket = serverSocket.accept();
String clientIP = clientSocket.getInetAddress().getHostAddress();
System.out.println("クライアントのIPアドレス: " + clientIP);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
- もう一つの方法は、クライアントから送信されたデータのヘッダーからIPアドレスを抽出することです。以下のコードは、HTTPリクエストのヘッダーからクライアントのIPアドレスを取得する例です。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class ClientIPExtractor {
public static void main(String[] args) {
try {
Socket socket = new Socket("example.com", 80);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// HTTPリクエストのヘッダーを取得
StringBuilder headerBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null && !line.isEmpty()) {
headerBuilder.append(line).append("\n");
}
// ヘッダーからクライアントのIPアドレスを抽出
String header = headerBuilder.toString();
String[] lines = header.split("\n");
for (String headerLine : lines) {
if (headerLine.startsWith("X-Forwarded-For:")) {
String[] parts = headerLine.split(": ");
if (parts.length > 1) {
String clientIP = parts[1].trim();
System.out.println("クライアントのIPアドレス: " + clientIP);
}
}
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
これらの例では、Javaのソケットを使用してクライアントのIPアドレスを取得する方法を示しています。必要に応じて、これらのコードをカスタマイズして使用することができます。