Сначала: нет единого адреса. У вашей машины есть как минимум два адреса (127.0.0.1 на «lo» и, возможно, 192.168.1.1 на «eth1»).
Вы хотите это: Список сетевых интерфейсов
Как и следовало ожидать, вы не можете автоматически определить, какой из них подключен к любому из ваших маршрутизаторов, так как это требует потенциально сложного анализа ваших таблиц маршрутизации. Но если вам нужен какой-либо нелокальный адрес, этого должно быть достаточно. Чтобы быть уверенным, попробуйте использовать это по крайней мере один раз на Vista или Windows 7, так как они добавляют адреса IPv6.
import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;
public class ListNets
{
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets))
displayInterfaceInformation(netint);
}
static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
out.printf("Display name: %s\n", netint.getDisplayName());
out.printf("Name: %s\n", netint.getName());
Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
out.printf("InetAddress: %s\n", inetAddress);
}
out.printf("\n");
}
}
Ниже приведен пример вывода из примера программы:
Display name: bge0
Name: bge0
InetAddress: /fe80:0:0:0:203:baff:fef2:e99d%2
InetAddress: /121.153.225.59
Display name: lo0
Name: lo0
InetAddress: /0:0:0:0:0:0:0:1%1
InetAddress: /127.0.0.1