Поскольку у машины может быть несколько адресов, сложно определить, какой из них вам подходит. Обычно вы хотите, чтобы система назначала IP на основе своей таблицы маршрутизации. Поскольку результат зависит от IP-адреса, к которому вы хотите подключиться, есть простой трюк: просто создайте соединение и посмотрите, какой адрес вы получили от ОС:
// output on my machine: "192.168.1.102"
Socket s = new Socket("192.168.1.1", 80);
System.out.println(s.getLocalAddress().getHostAddress());
s.close();
// output on my machine: "127.0.1.1"
System.out.println(InetAddress.getLocalHost().getHostAddress());
Я не уверен, возможно ли это сделать без установления соединения. Я думаю, что однажды мне удалось сделать это с Perl (или C?), Но не спрашивайте меня о Java. Я думаю, что возможно создать UDP-сокет (DatagramSocket) без его фактического подключения.
Если на пути есть NAT-маршрутизатор, вы не сможете получить IP, который будут видеть удаленные хосты. Однако, как вы привели 192. * в качестве примера, я думаю, что вам все равно.