2011-11-15 5 views
6

응용 프로그램에 java.net.NetworkInterfacejava.net.InetAddress 이상의 네트워크 구성 정보가 필요합니다. 서브넷, 게이트웨이 및 DNS 서버와 같은 정보를 포함하고 싶지만 Windows 및 Linux 플랫폼 모두에 코드를 포팅 할 수 있어야합니다.Windows 및 Linux 플랫폼에서 Java로 네트워크 정보 얻기

Windows 용으로는 Runtime.getRuntime().exec("ipconfig")을, Linux 용으로는 Runtime.getRuntime().exec("ifconfig")을 수행하여 결과를 파싱하는 것으로 조사했습니다. 어쩌면 이것을 할 수있는 더 좋은 방법이나 내가 사용할 수있는 오픈 소스 프로젝트가 있을지도 모른다. 올바른 방향

+0

ifconfig 및 ipconfig를 호출하면 이식성이 깨집니다. 현재 가지고있는 코드를 게시 할 수 있습니까? – Woot4Moo

+0

각 OS마다 별도의 구현을 호출하는 팩토리 메서드를 만들었습니다. Windows의 경우 'ipconfig/all'을 호출하고 결과를 파싱합니다. 리눅스의 경우 'ifconfig', 'route -n', 'cat /etc/resolv.conf'를 호출합니다. –

+1

또한 일부 Linux 배포판의 기본 설치에는/sbin이 경로에 포함되어 있지 않으므로 사용자에 따라 호출이 실패 할 수 있습니다. –

답변

0

당신은 네이티브 코드에서 할 수있는 나를 조종하고, JNI를 사용할 수있는 아이디어를 사전에

감사합니다. 그런 다음 Windows 용 .dll과 리눅스 용 .so (또는 소스 코드) 을 제공하십시오.이 방법은 'exec'솔루션보다 훨씬 좋을 수 있습니다.

1

당신이 더 튼튼한 해결책을 생각하고 있다면, 당신은 아마도 SNMP (Simple Network Management Protocol)에 대한 생각을 사용할 수있을 것입니다. 사용 가능한 여러 가지 API가 있습니다. SNMP4J가 가장 유명하고 오픈 소스입니다 .SNMP 이후 여러 운영 체제와 심지어 스위치와 라우터에서 지원되는 경우 심층 네트워크 수준의 통계를 원한다면 사용하는 것이 좋습니다. 그러나보다 간단한 솔루션을 원할 경우 Windows를 비롯한 많은 OS를 지원하는 Sigar API를 사용하십시오 그리고 리눅스. 시거 (Sigar)에 관한 하나의 문제는 그것이 상용 프로젝트에 배포 할 수없는 GPL 하에서 라이센스된다는 것입니다.

+0

SNMP 사용자가 소프트웨어를 설치하고 구성 할 필요가 없다면 SNMP를 사용할 수 있습니다. SIGAR는 좋아 보이며 OS 고유의 저수준 API를 다루는 것보다 작업하기가 쉽습니다. 예 : 리눅스 netlink api는 대부분의 정보를 제공 할 수 있지만 매우 끔찍합니다. – bew

+0

@Madhu Sudhan Sigar 패키지에는 Apache 2.0 라이센스가 있습니다. GPL에 대해 확신합니까? – tuxSlayer

+0

라이센싱에 대해서는 잘 모르겠지만 상용 프로젝트에서는 배포 할 수 없다고 생각합니다. 라이선스에 관해 sigar 영업 팀에 메일을 보내주십시오.이 사례가 도움이된다고 확신합니다. – Madusudanan