Java находит сетевой интерфейс для шлюза по умолчанию

В Java я хотел бы найти java.net.NetworkInterface, соответствующий используемому интерфейсу, для доступа к шлюзу по умолчанию. Названия интерфейсов и т.п. заранее не известны.

Другими словами -, если бы следующая таблица маршрутизации была моей, я бы хотел, чтобы интерфейс соответствовал «bond0»:

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.10.10.0     *               255.255.255.0   U         0 0          0 bond0
10.10.11.0     *               255.255.255.0   U         0 0          0 eth2
10.10.11.0     *               255.255.255.0   U         0 0          0 eth3
10.10.12.0     *               255.255.255.0   U         0 0          0 eth4
10.10.13.0     *               255.255.255.0   U         0 0          0 eth5
default         mygateway      0.0.0.0         UG        0 0          0 bond0

После некоторого поиска в Google я до сих пор не нашел ответа.

редактировать:
Среда выполнения Java должна «знать», как получить эту информацию (, чтобы не сказать, что она открыта ). При присоединении java.net.MulticastSocket к группе многоадресной рассылки с использованием вызова join (InetAddress grpAddr )(, который не указывает интерфейс ), очевидное поведение, по-видимому, заключается в присоединении к «по умолчанию» интерфейс (как определено выше ). Это работает, даже если intf по умолчанию не является первым интерфейсом, указанным в таблице маршрутизации. Однако базовый вызов POSIX, который присоединяется к группе mcast, требует этой информации!:

struct ip_mreqn group;
group.imr_multiaddr =...
group.imr_address = **address of the interface!**
setsockopty(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group));

Точка:предоставляя метод для присоединения к группе многоадресной рассылки, который не требует intf, платформа java неявно должна знать, как определить соответствующий intf на каждой платформе.

7
задан Adam Lear 9 September 2012 в 15:56
поделиться