IP address of device using phone as access point

前端 未结 3 916
长发绾君心
长发绾君心 2020-12-05 22:23

Can anyone explain or show how to get the IP address of a computer (or other device) that\'s connected through the phone\'s portable WI-FI hotspot?

I tried the foll

相关标签:
3条回答
  • Check your arp table for the wlan interface. cat /proc/net/arp at the command line.

    0 讨论(0)
  • 2020-12-05 22:42

    Though the answer if given, but in case anyone is interested in direct answer:

    private static ArrayList<String> readArpCache()
       {
          ArrayList<String> ipList = new ArrayList<String>();
          BufferedReader br = null;
          try {
             br = new BufferedReader(new FileReader("/proc/net/arp"), 1024);
             String line;
             while ((line = br.readLine()) != null) {
                Log.d(TAG  ,line);
    
                String[] tokens = line.split(" +");
                if (tokens != null && tokens.length >= 4) {
                   // verify format of MAC address
                   String macAddress = tokens[3];
                   if (macAddress.matches("..:..:..:..:..:..")) {
                      //Log.i(TAG, "MAC=" + macAddress + " IP=" + tokens[0] + " HW=" + tokens[1]);
    
                      // Ignore the entries with MAC-address "00:00:00:00:00:00"
                      if (!macAddress.equals("00:00:00:00:00:00")) {
    
                         String ipAddress = tokens[0];
                         ipList.add(ipAddress);
    
                         Log.i(TAG, macAddress + "; " + ipAddress);
                      }
                   }
                }
             }
          } catch (Exception e) {
             e.printStackTrace();
          } finally {
             try {
                br.close();
             } catch (IOException e) {
                e.printStackTrace();
             }
          }
    
          return ipList;
       }
    

    Also as per my understanding (didn't try by myself), if you are using aysntask and need to do on worker thread(won't work on main thread), this process can also be used. Either use method to find hotspotinterface or directly use _hotspotInterface as "wlan0"

    try {
             InetAddress[] arr = InetAddress.getAllByName(_hotspotInterface);
    
          } catch (UnknownHostException e) {
             e.printStackTrace();
          } catch (Exception e) {
             e.printStackTrace();
          }
    

    To find hotspot I used this method(though not very good example)

    String _hotspotInterface = "";
         for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); )
                 {
                    NetworkInterface anInterface = en.nextElement();
    
                    //look for 192.168.xx.xx first
                    for (Enumeration<InetAddress> enumIpAddr = anInterface.getInetAddresses(); enumIpAddr.hasMoreElements(); )
                    {
                       InetAddress inetAddress = enumIpAddr.nextElement();
                       String       hostAddress = inetAddress.getHostAddress();
    
                       if (hostAddress.startsWith("192.168."))
                       {
                          _hotspotInterface = anInterface.getName();
                       }
                    }
    }
    
    0 讨论(0)
  • 2020-12-05 22:45

    The following code will give you the ip adrress & other details of the wifi enabled devices connected to the the android hotspot device

    Main.java

    import java.util.ArrayList;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    import com.whitebyte.hotspotclients.R;
    import com.whitebyte.wifihotspotutils.ClientScanResult;
    import com.whitebyte.wifihotspotutils.WifiApManager;
    
    public class Main extends Activity {
          TextView textView1;
          WifiApManager wifiApManager;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        textView1 = (TextView) findViewById(R.id.textView1);
        wifiApManager = new WifiApManager(this);
    
        scan();
    }
    
    private void scan() {
        ArrayList<ClientScanResult> clients = wifiApManager.getClientList(false);
    
        textView1.append("Clients: \n");
        for (ClientScanResult clientScanResult : clients) {
            textView1.append("####################\n");
            textView1.append("IpAddr: " + clientScanResult.getIpAddr() + "\n");
            textView1.append("Device: " + clientScanResult.getDevice() + "\n");
            textView1.append("HWAddr: " + clientScanResult.getHWAddr() + "\n");
            textView1.append("isReachable: " + clientScanResult.isReachable() + "\n");
        }
    }
    

    ClientScanResult.java

    public class ClientScanResult {
    
    private String IpAddr;
    
    private String HWAddr;
    
    private String Device;
    
    private boolean isReachable;
    
    public ClientScanResult(String ipAddr, String hWAddr, String device, boolean isReachable) {
        super();
        IpAddr = ipAddr;
        HWAddr = hWAddr;
        Device = device;
        this.setReachable(isReachable);
    }
    
    public String getIpAddr() {
        return IpAddr;
    }
    
    public void setIpAddr(String ipAddr) {
        IpAddr = ipAddr;
    }
    
    public String getHWAddr() {
        return HWAddr;
    }
    
    public void setHWAddr(String hWAddr) {
        HWAddr = hWAddr;
    }
    
    public String getDevice() {
        return Device;
    }
    
    public void setDevice(String device) {
        Device = device;
    }
    
    public void setReachable(boolean isReachable) {
        this.isReachable = isReachable;
    }
    
    public boolean isReachable() {
        return isReachable;
    }
    

    }

    WIFI_AP_STATE.java

         public enum WIFI_AP_STATE 
         {
            WIFI_AP_STATE_DISABLING, WIFI_AP_STATE_DISABLED, WIFI_AP_STATE_ENABLING, WIFI_AP_STATE_ENABLED, WIFI_AP_STATE_FAILED
         }
    

    WifiApManager.java

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.net.InetAddress;
    import java.util.ArrayList;
    import android.content.Context;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiManager;
    import android.util.Log;
    
    public class WifiApManager {
    private final WifiManager mWifiManager;
    
    public WifiApManager(Context context) {
        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    }
    
    
    
    /**
     * Gets a list of the clients connected to the Hotspot, reachable timeout is 300
     * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
     * @return ArrayList of {@link ClientScanResult}
     */
    public ArrayList<ClientScanResult> getClientList(boolean onlyReachables) {
        return getClientList(onlyReachables, 300);
    }
    
    /**
     * Gets a list of the clients connected to the Hotspot 
     * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
     * @param reachableTimeout Reachable Timout in miliseconds
     * @return ArrayList of {@link ClientScanResult}
     */
    public ArrayList<ClientScanResult> getClientList(boolean onlyReachables, int reachableTimeout) {
        BufferedReader br = null;
        ArrayList<ClientScanResult> result = null;
    
        try {
            result = new ArrayList<ClientScanResult>();
            br = new BufferedReader(new FileReader("/proc/net/arp"));
            String line;
            while ((line = br.readLine()) != null) {
                String[] splitted = line.split(" +");
    
                if ((splitted != null) && (splitted.length >= 4)) {
                    // Basic sanity check
                    String mac = splitted[3];
    
                    if (mac.matches("..:..:..:..:..:..")) {
                        boolean isReachable = InetAddress.getByName(splitted[0]).isReachable(reachableTimeout);
    
                        if (!onlyReachables || isReachable) {
                            result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5], isReachable));
                        }
                    }
                }
            }
        } catch (Exception e) {
            Log.e(this.getClass().toString(), e.getMessage());
        } finally {
            try {
                br.close();
            } catch (IOException e) {
                Log.e(this.getClass().toString(), e.getMessage());
            }
        }
    
        return result;
    }
    }
    
    0 讨论(0)
提交回复
热议问题