在android中从wifi热点获取IP

问题描述 投票:0回答:2

我想获取Android设备通过WiFi连接的WiFi热点(从另一台计算机)的IP地址,不是Android的本地IP地址。我在真实设备中运行应用程序。 我可以扫描所有 WiFi 并获取它们的名称。

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;
         }

例如,我可以看到Android设备的本地IP地址是192.168.2.101,但是如何在代码中获取WiFi热点的IP地址是192.168.2.1?

android ip wifi
2个回答
0
投票

并非所有 WiFi 接入点都有 IP 地址!这不是一个要求。它运行在不同的层上。

话虽如此,您可以在 AP 的无线 MAC 上使用反向 ARP 来获取其 IP 地址(如果有的话)。另请注意,此 IP 有时与有线接口不同。

对于家庭一体式无线路由器,您还可以检查 DHCP 分配为网关地址的任何内容,但同样,这与接入点没有直接关联。


0
投票

如果您使用默认子网,则主机 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
是本地广播地址。

© www.soinside.com 2019 - 2024. All rights reserved.