2011-11-15 10 views
6

Necesito información de configuración de red en mi aplicación que es más de lo que proporcionan java.net.NetworkInterface y java.net.InetAddress. Me gustaría incluir información como subredes, puertas de enlace y servidores DNS, pero el código debe ser portátil tanto para plataformas Windows como para Linux.Obtener información de red en Java en plataformas Windows y Linux

He investigado para hacerlo haciendo Runtime.getRuntime().exec("ipconfig") para Windows y Runtime.getRuntime().exec("ifconfig") para Linux y analizando los resultados. Tal vez haya una mejor manera de hacer esto o un proyecto de código abierto que pueda usar.

Gracias de antemano por cualquier idea que me puede orientar en la dirección correcta

+0

al invocar ifconfig e ipconfig se rompe el uso de la portabilidad. ¿Podría publicar qué código tiene actualmente? – Woot4Moo

+0

Hice un método de fábrica para llamar a las implementaciones separadas para cada sistema operativo. Para Windows, estoy llamando a 'ipconfig/all' y analizando los resultados. Para Linux, estoy llamando a 'ifconfig', 'ruta -n', y 'cat /etc/resolv.conf'. –

+1

Además, las instalaciones predeterminadas de algunas distribuciones de Linux no incluyen/sbin en la ruta, por lo que las llamadas pueden fallar dependiendo del usuario –

Respuesta

0

Se podría hacer en código nativo, y usar JNI. Luego envíe un archivo .dll para Windows, y un .so (o código fuente) para Linux, aunque esto probablemente no sea mucho mejor que la solución 'ejecutiva'.

1

Si está pensando en una solución mejor y más robusta, probablemente podría utilizar la idea de SNMP (Protocolo simple de administración de redes). Hay varias API disponibles para su uso, SNMP4J es la fuente más famosa y abierta. Desde SNMP es compatible con varios sistemas operativos e incluso conmutadores y enrutadores, probablemente sea una buena idea usarlo si desea estadísticas de nivel de red detalladas. Pero si desea una solución más simple, utilice la API Sigar, que admite muchos sistemas operativos, incluyendo Windows y Linux. Uno de los problemas con Sigar es que tiene licencia bajo licencia GPL, que le prohíbe implementarlo en un proyecto comercial.

+0

SNMP es agradable siempre y cuando el usuario del software no tenga que instalarlo ni configurarlo .. SIGAR se ve bien y es definitivamente más fácil de trabajar que tener que lidiar con API de nivel bajo altamente específicas del sistema operativo. P.ej. la API de Linux netlink puede proporcionar la mayor parte de la información, pero es bastante horrible. – bew

+0

@Madhu Sudhan Sigar paquete tiene una licencia Apache 2.0 dentro. ¿Estás seguro de GPL? – tuxSlayer

+0

No estoy seguro acerca de la licencia, pero creo que no se puede implementar en un proyecto comercial. Solo envíe un correo al equipo de ventas de sigar sobre la licencia. Estoy seguro de que pueden ayudarlo mejor en este caso. – Madusudanan

Cuestiones relacionadas