Получить IP с точки доступа Wi-Fi в Android - PullRequest
4 голосов
/ 03 июля 2011

Я хочу получить IP-адрес точки доступа Wi-Fi (с другого компьютера), к которому устройство Android подключается через Wi-Fi, , а не локальный IP-адрес Android . Я запускаю приложение на реальном устройстве . Я могу сканировать все Wi-Fi и получить их имя.

public class WifiConnectorActivity extends Activity {
    TextView mainText;
      WifiManager mainWifi;
      WifiReceiver receiverWifi;
      List<ScanResult> wifiList;
      StringBuilder sb = new StringBuilder();
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mainWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);

        mainText = (TextView) findViewById(R.id.text);
        mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        receiverWifi = new WifiReceiver();
        if(!mainWifi.isWifiEnabled()){
            mainWifi.setWifiEnabled(true);
        }
        registerReceiver(receiverWifi, new IntentFilter(
           WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        mainWifi.startScan();
        mainText.setText("\nStarting Scan...\n");
    }



    class WifiReceiver extends BroadcastReceiver {
        public void onReceive(Context c, Intent intent) {
        StringBuilder sb = new StringBuilder();
        wifiList = mainWifi.getScanResults();
        for(int i = 0; i < wifiList.size(); i++){
          sb.append(new Integer(i+1).toString() + ".");
          sb.append((wifiList.get(i)).toString());
          sb.append("\n");
        }      

        mainText.setText(sb);
        }
      }


}

Конечно, я могу получить локальный IP-адрес, используя этот код:

public static String getLocalIpAddressString() {
          try {
              for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                  NetworkInterface intf = en.nextElement();
                  for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                      InetAddress inetAddress = enumIpAddr.nextElement();
                      if (!inetAddress.isLoopbackAddress()) {
                          return inetAddress.getHostAddress().toString();
                      }
                  }
              }
          } catch (Exception ex) {
              Log.e("IPADDRESS", ex.toString());
          }
          return null;
         }

Например, я вижу, что локальный IP-адрес устройства Android - 192.168.2.101, но как получить IP-адрес точки доступа Wi-Fi - 192.168.2.1 в коде. Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Если вы используете подсети по умолчанию, то IP-адрес хоста 192.168.2.101 напрямую подразумевает адрес точки доступа 192.168.2.1. Ваш IP-адрес относится к группе C. Таким образом, для любого адреса x.x.x.y в этой группе сама подсеть имеет значение x.x.x.0, а первый адрес хоста x.x.x.1 назначен точке доступа. Все остальные адреса: от x.x.x.2 до x.x.x.254 назначаются подключенным хостам, а x.x.x.255 - это локальный широковещательный адрес.

0 голосов
/ 05 июля 2011

Не все точки доступа WiFi даже имеют IP-адреса!Это не требование.Он работает на другом уровне.

При этом вы можете использовать обратный ARP на беспроводном MAC-адресе точки доступа, чтобы получить его IP-адрес, если таковой имеется.Также обратите внимание, что этот IP-адрес иногда отличается от проводного интерфейса.

Для домашних беспроводных маршрутизаторов «все в одном» вы также можете проверить любой DHCP, назначенный в качестве адреса шлюза, но, опять же, у него нетпрямая корреляция с точкой доступа.

...