2011-02-28 4 views
0

ping 명령 옆에 할 수있는 방법 :, IP 주소와 자바의 왕복 시간을 계산 나는 다음과 같은 코드로 유닉스 시스템에서 자바의 RTT를 얻을 수있는 방법 구현했습니다

String command[] = {"ping", "-c4", theIPAddress}; 
ProcessBuilder pb = new ProcessBuilder(command); 
pb.redirectErrorStream(true); 
Process p = pb.start(); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line; 
while((line = in.readLine()) != null) 
    //the terminal output with the ping results... 
etc... 

이를 잘 작동하고 출력과 함께 ms 단위로 RTT (지연)를 계산할 수 있습니다. 그러나 호스트가 ICMP를 차단하면 ping이 시간 초과됩니다. (Mac OS X 터미널이나 Windows CMD에서도 마찬가지입니다.)

이제 어떻게 든 IP 주소에 대한 RTT/지연을 얻는 다른 방법을 찾고 싶습니다. (나는 호스트 측에 소프트웨어를 설치하고 싶지 않다.) Java 예제를 제공 할 수 없다면, 다른 입력을 해주시기 바랍니다. 여러 언어로 번역 할 수 있으며 실제로 Google을 사용할 수 있습니다.

+0

'InetAddress.isReachable'은 (는 ICMP에 대한 리눅스에 뿌리를해야 할 수도 있지만 TCP 대신에 사용하고있다). 가장 좋은 방법은 정상적인 TCP 소켓을 여는 것이다. – bestsss

+0

이미 isReachable을 시도했지만 비참하게 실패합니다. 핑보다 훨씬 더. 소켓을 열면 해결책이 될 수도 있지만 특정 포트를 연결해야합니다. – Gianni

답변

1

Tracert은 treaceroute (그리고 내가 마지막으로 확인한 윈도우 명령)의 약자로, 그냥 경로 ping이고 ICMP도 사용합니다. 해당하는 명령을 리눅스에

tracepath이며, 유닉스 운영 체제에서 기본적으로 traceroute 유틸리티는 사용자를 사용하여 데이터 그램 프로토콜 추적 루트 (traceroute) 유틸리티는 일반적으로 option을 가지고 33534.하기 33434에서 목적지 포트 번호가 (UDP) 데이터 그램 대신 ICMP 에코 요청 (유형 8)을 지정하고 Windows tracert 유틸리티에서 사용합니다.

tcptraceroute 또는 layer four traceroute과 같이 TCP 패킷을 사용하는 traceroute 구현도 있습니다.

출처 : traceroute

+0

고마워, 전 tcptraceroute를 시도했지만 아무 소용이 없습니다. 그러나, LFT와 나는 목표에 도달! 이것은 내가'lft -E -V -m 4 ip_here' 명령을 사용하는 것입니다. – Gianni

1

호스트가 ICMP를 차단 한 경우이 작업을 수행하지 않아도됩니다. 대신 tracert를 시도해보십시오.

+0

ICMP는 많은 라우터, ISP에서도 기본적으로 차단됩니다. ping을 시도하는 호스트는 '답변'을 기꺼이 원하지만 ICMP를 사용하려면 IT와 Google에 대한 지식이 부족합니다. 이 소프트웨어는 Linux 배포판에서 실행되며 tracert는 Windows 전용이며 ICMP도 사용합니다. 그러나 당신의 대답에 감사드립니다! – Gianni