2009-11-12 3 views
1

멀티 캐스트 데이터를 수신하는 Java 프로그램이있는 경우 수신 데이터 그램의 나머지 TTL을 어떻게 알 수 있습니까?Java에서 멀티 캐스트 패킷의 나머지 TTL을 확인하십시오.

보내는 멀티 캐스트 소켓에서 TTL을 설정하는 방법을 알고 있지만 도착한 패킷의 나머지 TTL을 알고 싶습니다.

+0

약간의 추가 조사가 끝나면 순수 Java로는 불가능하다고 생각합니다. JNI를 사용하고자한다면 rocksaw 라이브러리를 사용하여 수행 할 수 있다고 생각합니다. http://www.savarese.com/software/rocksaw/ –

답변

1

원시 소켓으로 UDP 데이터 그램을 수신 한 경우 TTL (또는 IP 또는 UDP 헤더의 다른 것)을 검사 할 수 있습니다. 개는 많이하지만,이 있습니다

  • 원시 소켓은 자바에 비 네이티브 (적어도 하나의 멀티 플랫폼 타사 부가 볼 수 있지만 : http://www.savarese.org/software/rocksaw/index.html).
  • 원시 소켓을 사용하려면 대부분의 운영 체제에서 루트 액세스 또는 관리 권한이 있어야합니다.
  • UDP 데이터도 사용하려면 조각화 된 데이터 그램의 체크섬 및 리 어셈블리를 수행해야합니다. 아마도 조각들 사이에서 다른 TTL을 만나게 될 것입니다 (jambjo가 말했듯이).
0

나는 (당신도 상상했던 것처럼) 보았지만 이것을 수행하는 데 훌륭한 Java API를 찾을 수 없었다.

TTL은 IPv4 데이터 그램의 9 번째 전체 바이트입니다. 들어오는 데이터 그램에서 DatagramPacket의 9 번째 바이트를 출력하면 어떻게됩니까? TTL 값과 비슷합니까? 또는 IP 데이터 그램의 헤더가 DatagramPacket에서 사용할 수 없으며 IPv4 데이터 그램의 데이터 부분 만 사용할 수 있습니까?

1

도착 패킷은 무엇입니까? 데이터 그램 또는 UDP 패킷은 실제로 여러 개의 IP 패킷으로 분할 될 수 있습니다. 여러 개의 IP 패킷은 다르게 라우팅되는 경우 다른 TTL과 함께 도착합니다. 두 경우 (분할 여부) Java는 IP 헤더에 대한 액세스를 제공하지 않습니다.