현재 연결되어있는 네트워크에 연결된 장치를 검색하려고합니다. 모든 장치에 핑을 보내고 "도달 가능한"값을 확인합니다. 여기에 ping 응답을 확인하면서 IP를 통해 순환, 그에 대한 책임의 코드 조각입니다 : 어떤 이유Java에서 ping 명령을 실행하여 네트워크에서 장치 검색
for (int i = 1; i <= 254; i++) {
String addr = IPAddress;
addr = addr.substring(0, addr.lastIndexOf('.') + 1) + i;
InetAddress pingAddr = InetAddress.getByName(addr);
//skips the IP of 'this' device
if (pingAddr.getHostAddress().equals(IPAddress)) { continue; }
try {
//ping command
Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 -w 1 " + addr);
boolean reachable = (p1.waitFor() == 0);
if (reachable) {
//add to list, if reachable
addrs.add(pingAddr);
}
} catch (IOException ex) {
} catch (InterruptedException ex) {
}
}
,이 코드 조각은 일부 장치를 감지합니다. 나는 3 대의 랩톱, 2 대의 안드로이드 장치 및 1 대의 PC를 테스트했습니다. 이 중 3 대의 노트북 중 2 대가 안드로이드 장치를 성공적으로 감지하고 PC를 감지하지 못합니다. 명령에서 "-w 1"을 확인할 수 있습니다. 설정을 100으로 변경했는데 변경하기 만하면 시간이 오래 걸리고 같은 장치가 발견되었습니다.
나는 이미이 방법을 시도 :
INetAddress.isReachable(int timeout);
을하지만 이후 더 악화되어 - 내가 발견 적어도 무엇을 - 그것은 모든 장치가 (단지 내 안드로이드 장치에 응답 TCP 에코를 사용했다).
또한 핑이 실제로 느립니다. 이미 4 개의 스레드로 나누었지만 여전히 속도 향상을 사용할 수 있습니다.
마지막 질문 : 핑 명령이 모든 장치를 감지 할 수없는 이유는 무엇입니까 & 내 목표를 달성하기 위해 생각할 수있는 다른 방법이 있습니까?
유용한 답을 보내 주셔서 감사합니다. 다른 장치 (동일한 OS)가 방화벽 뒤에 있기는하지만 방화벽은 실제로 "문제"였습니다. 코드를 업데이트 해 주셔서 감사합니다. 그러나 방화벽 뒤에 이러한 장치를 찾는 방법이 있습니까? 이 코드는 일부 회사 네트워크에서 유용하게 사용하려면 해당 네트워크에서 장치를 찾을 수 있어야합니다. 그렇지 않은 경우이 질문에 동의로 표시합니다. –
라우터에 액세스하면 연결된 컴퓨터에 대한 정보를 얻을 수 있습니다. 두 번째 아이디어는 nslookup 명령을 시도하는 것입니다. – BuMcha
더 나은 성능을 위해 나를 보낸 코드를 업데이트했습니다. 그러나이 예외가 발생합니다 : I/System.out : java.io.IOException : exec() 실행하는 동안 오류가 발생했습니다. 명령 : [CMD,/c, ping -n 1 -w 1 192.168.1.245] 작업 디렉토리 : null 환경 : (너무 오래두고 ..) –