자바에서는 기본 게이트웨이에 도달하는 데 사용되는 인터페이스와 일치하는 java.net.NetworkInterface를 찾고 싶습니다. 인터페이스 이름 등은 미리 알 수 없습니다.Java 기본 게이트웨이에 대한 네트워크 인터페이스를 찾는
$ 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
일부 구글 검색을 수행 한 후, 난 아직 어떤 대답을 발견하지 않았습니다 : 다음 내 라우팅 테이블 인 경우
다른-즉는, 나는 "본드"에 해당하는 인터페이스를 원하는 것입니다.
편집 :
자바 런타임이이 정보를 얻는 방법 (이 노출 된 것으로 표시 할 수 없습니다) "알고있다"해야합니다. join (InetAddress grpAddr) 호출 (인터페이스를 지정하지 않음)을 사용하여 java.net.MulticastSocket을 멀티 캐스트 그룹에 조인 할 때 명백한 동작은 위에서 정의한대로 "기본"인터페이스에 조인하는 것처럼 보입니다. 이는 기본 intf가 라우팅 테이블에 나열된 첫 번째 인터페이스가 아닌 경우에도 작동합니다. 암시의 INTF, 자바 플랫폼을 필요로하지 않는 멀티 캐스트 그룹에 가입하는 방법을 제공함으로써 : 그러나, mcast 멀티 그룹에 합류 기본 POSIX 호출이 정보! :
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를 결정하는 방법을 알아야합니다.
위의 수정보기 ... – Josh
확인, 귀하의 요점을 참조하십시오. 그러나 그 전화는 여전히 주소가 필요합니다, 네? java.net.NetworkInterface는 인터페이스 (및 그 주소)를 얻을 수 있으며 약간의 영리가 주어진 주소를 소유하고있는지를 결정할 수 있습니다. 나는 당신의 문제가 더 복잡하다고 생각한다. 왜냐하면 먼저 하위 라우팅 정보를 찾고 그 다음으로 (기본) 라우트와 연관된 인터페이스를 찾아야하기 때문이다. – Carl
멀티 캐스트 주소 (즉, 224.xxx-239.xxx의 특수 주소)가 필요하며 인터페이스 주소는 필요하지 않습니다. 인수에는 그러한 정보가 제공되지 않습니다. 따라서 "조인"콜을 해결해야하는 문제는 같습니다. 그것은 마술처럼 기본 경로 (명백한 행동)로 하나를 선택합니다. 마찬가지로 어떤 인터페이스에 기본 경로가 있는지 알고 싶습니다. – Josh