En Java, me gustaría encontrar que java.net.NetworkInterface correspondiente a la interfaz utilizada llegue a la puerta de enlace predeterminada. Los nombres de las interfaces, etc., no se conocen con anticipación.Interfaz de red de búsqueda de Java para la puerta de enlace predeterminada
En otras palabras-, si el siguiente fue mi tabla de enrutamiento, me gustaría que la interfaz correspondiente con "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
Después de hacer algunas búsquedas Google, todavía no he encontrado ninguna respuesta.
edición:
El tiempo de ejecución de Java debe "saber" cómo obtener esta información (por no decir que es expuesta). Al unir un java.net.MulticastSocket a un grupo de multidifusión usando la llamada join (InetAddress grpAddr) (que no especifica una interfaz), el comportamiento aparente parece ser unirse a la interfaz "predeterminada" (como se define arriba). Esto funciona incluso cuando el intf predeterminado no es la primera interfaz enumerada en la tabla de enrutamiento. Sin embargo, la llamada POSIX subyacente que se une a un grupo mcast requiere esta información !:
struct ip_mreqn group;
group.imr_multiaddr = ...
group.imr_address = **address of the interface!**
setsockopty(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group));
El punto: proporcionando un método para unirse a un grupo de multidifusión que no requiere la intf, la plataforma Java, implícitamente , debe saber cómo determinar el intf apropiado en cada plataforma.
ver la edición anterior ... – Josh
Bien, veo tu punto. Sin embargo, parece que esa llamada aún requiere una dirección, ¿sí? java.net.NetworkInterface puede obtener las interfaces (y sus direcciones), y un poco de astucia puede decidir cuál posee la dirección dada. Creo que su problema es más complejo, porque primero busca información de enrutamiento de nivel inferior y luego hacia atrás para encontrar una interfaz asociada a la ruta (predeterminada). – Carl
Requiere la dirección de multidifusión (es decir, dirección especial en 224.xxx-239.xxx), no la dirección de la interfaz. No se proporciona tal información en los argumentos. Entonces, el problema que debe resolver la llamada "unirse" es el mismo. Escoge mágicamente el que tiene la ruta predeterminada (comportamiento aparente). Del mismo modo, quiero saber qué interfaz tiene la ruta predeterminada. – Josh