2011-11-15 2 views
6

Ho bisogno di informazioni di configurazione di rete nella mia applicazione che è più di quanto forniscono java.net.NetworkInterface e java.net.InetAddress. Vorrei includere informazioni come Subnet, Gateway e server DNS, ma il codice deve essere trasferibile su piattaforme Windows e Linux.Ottenere informazioni di rete su Java su piattaforme Windows e Linux

Ho cercato di farlo eseguendo Runtime.getRuntime().exec("ipconfig") per Windows e Runtime.getRuntime().exec("ifconfig") per Linux e analizzando i risultati. Forse c'è un modo migliore per farlo o un progetto open source che potrei usare.

Grazie in anticipo per tutte le idee che mi può orientare nella giusta direzione

+0

invocando ifconfig e ipconfig interrompe l'utilizzo della portabilità. Potresti postare il codice che hai attualmente? – Woot4Moo

+0

Ho creato un metodo factory per chiamare le implementazioni separate per ciascun sistema operativo. Per Windows, sto chiamando 'ipconfig/all' e analizzando i risultati. Per Linux, chiamo 'ifconfig', 'route -n' e 'cat /etc/resolv.conf'. –

+1

Inoltre, le installazioni predefinite di alcune distribuzioni Linux non includono/sbin nel percorso, quindi la chiamata potrebbe non riuscire a seconda dell'utente –

risposta

0

Si potrebbe fare in codice nativo, e utilizzare JNI. Quindi spedisci una .dll per windows, e un .so (o codice sorgente) per linux, sebbene questo probabilmente non sia molto meglio della soluzione 'exec'.

1

Se stai pensando ad una soluzione migliore e più robusta, potresti probabilmente usare l'idea di SNMP (Simple Network Management Protocol). Ci sono diverse API disponibili per l'uso, SNMP4J è il più famoso e open source. Da SNMP è supportato su più sistemi operativi e persino switch e router, è probabilmente una buona idea utilizzarlo per le statistiche approfondite a livello di rete. Ma se si desidera una soluzione più semplice, utilizzare l'API Sigar, che supporta molti sistemi operativi, incluse le finestre e linux.Un problema con Sigar è che è concesso in licenza con licenza GPL che vieta di distribuirlo in un progetto commerciale.

+0

SNMP è bello fino a quando l'utente del software non deve installarlo e configurarlo .. SIGAR ha un bell'aspetto ed è decisamente più semplice da utilizzare rispetto al dover gestire API a basso livello altamente specifiche per OS. Per esempio. Linux netlink api può fornire la maggior parte delle informazioni, ma è piuttosto orribile. – bew

+0

@Madhu Il pacchetto Shan Sudhan ha una licenza Apache 2.0 all'interno. Sei sicuro di GPL? – tuxSlayer

+0

Non sono sicuro della licenza, ma penso che non possa essere implementato in un progetto commerciale. Devo solo inviare una mail al team di vendita di sigar sulla licenza. Sono sicuro che in questo caso possono aiutarti meglio. – Madusudanan