안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 초보 개발자 입니다.
ia = InetAddress.getByName("127.0.0.1");
if (ia.isReachable(3000) == true) {
Log.d("PING", "ping ok");
} else {
Log.d("PING", "ping no");
}
루프빽 주소를 이용할 경우 ping test 가 잘 되는데
DNS(168.126.63.1) 혹은 기타 핑 서버로 날릴 경우 timeout 이 나더라고여.
도저히 원인을 모르겠습니다.
dos mode 에서 ping시 문제는 없었습니다.
2010.07.06 17:40:40
안드로이드에서의 상황은 잘 모르겠지만요.
원래 자바의 isReachable() 은 윈도우를 제외한 리눅스나 유닉스에서는 ping 프로세스를 실행해서 ICMP ECHO 패킷이 돌아오는지를 먼저 검사합니다.
하지만, 이것은 프로세스가 root 권한일 때에만 가능하죠.
root 가 아니라면 echo 포트로 접근을 시도하는데요. 이것은 TCP 7번 포트입니다.
그러니까 root 권한으로 돌지 않는 앱이라면 ICMP ECHO 패킷을 쏘지 못할 것이고요.
7번 포트로 접속을 시도할텐데 상대방 서버에 echo 서비스가 떠있지 않다면 접속여부를 알 수 없게 됩니다.
이건 자바의 문제인데 현재로서는 직접 raw socket 을 사용하는 JNI 코드를 만드는게 가장 확실한 해결방법인데요.
이게 root 권한으로 돌아야 하기 때문에 안드로이드에서는 뾰족한 해결책이 없을 듯 싶네요.



