2011-01-24 8 views
6

में एक पहुंच के रूप में समस्या है मुझे एक लैन पर सभी जीवित कंप्यूटर ढूंढना है। जिसके लिए मैं isReachableInetAddress कक्षा का कार्य कर रहा हूं। लेकिन समस्या यह है कि मेरे लिए कुछ भी नहीं दिखाया जा सकता है। तो मैंने Google के आईपी के साथ isReachable रखने की कोशिश की लेकिन फिर भी यह पहुंच योग्य नहीं है।InetAddress क्लास

import java.net.*; 

public class alive{ 
    public static void main(String args[]){ 
     try{ 
      InetAddress ia = InetAddress.getByAddress(new byte[]{(byte)209, (byte)85, (byte)153, (byte)104}); 
      boolean b = ia.isReachable(10000); 
      if(b){ 
       System.out.println("Reachable"); 
      } 
      else{ 
       System.out.println("Unrachable"); 
      } 

     }catch(Exception e){ 
      System.out.println("Exception: " + e.getMessage()); 
     } 
    } 
} 

आउटपुट है:

यहाँ कोड है Unreachable

+0

क्या आपने एड्रेस को पिंग करने की कोशिश की है? –

+2

क्या आपके पास रूट विशेषाधिकार हैं? यदि नहीं, तो w/... – bestsss

+0

@pangea ya ने कोशिश की है और यह – codeomnitrix

उत्तर

5

यहाँ क्यों isReachable() हमेशा आशा अनुरूप काम नहीं हो सकता है पर कुछ विवरण हैं

  1. http://bordet.blogspot.com/2006/07/icmp-and-inetaddressisreachable.html
  2. http://www.coderanch.com/t/206934/sockets/java/InetAdress-isReachable-Ping-Permissions

आपके लिए सही तरीका ICMP प्रोटोकॉल का उपयोग करना है। यह पिंग आंतरिक रूप से उपयोग करता है, मुझे विश्वास है। Here is an example जो आपको शुरू करते हैं।

+1

जवांचंच लिंक में एक त्रुटि है। isReachable() की आवश्यकता नहीं है कि गूंज डिवाइस वास्तव में चल रहा है। यह सफलता के रूप में कनेक्शन अस्वीकार की व्याख्या करता है। – EJP

+0

ठीक है धन्यवाद pangea मैं कोशिश करूँगा – codeomnitrix

+0

ब्लॉगस्पॉट पोस्ट हटा दिया गया है? – abelito

2

मुझे दिलचस्प समाधान मिला। आप रूट के रूप में आपके आवेदन नहीं चला सकते हैं, तो आप जावा पर रॉ सॉकेट क्षमता निर्धारित कर सकते हैं:

sudo setcap cap_net_raw=ep /usr/lib/jvm/jdk/bin/java 

और फिर ICMP प्रोटोकॉल 7 TCP पोर्ट पर गूंज अनुरोध के istead इस्तेमाल किया जाएगा।

0

यहां कोड है जो मंच स्वतंत्र है, लेकिन अन्य मशीन पर किसी भी खुले बंदरगाह के बारे में जानकारी की आवश्यकता है (जिसमें हमारे पास अधिकतर समय है)।

private static boolean isReachable(String addr, int openPort, int timeOutMillis) { 
    // Any Open port on other machine 
    // openPort = 22 - ssh, 80 or 443 - webserver, 25 - mailserver etc. 
    try { 
     try (Socket soc = new Socket()) { 
      soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis); 
     } 
     return true; 
    } catch (IOException ex) { 
     return false; 
    } 
} 
संबंधित मुद्दे