Javaソケットを使用してクライアントのIPアドレスを取得する方法


  1. クライアントの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();
        }
    }
}
  1. もう一つの方法は、クライアントから送信されたデータのヘッダーから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アドレスを取得する方法を示しています。必要に応じて、これらのコードをカスタマイズして使用することができます。