Android7.1 关闭路由器DHCP后还能获取到ip地址

frameworks\base\services\net\java\android\net\dhcp\DhcpClient.java   确定 mIsIpRecoverEnabled=false;解决此问题。 原因:    private boolean doIpRecover() {         if (mIsIpRecoverEnabled == false) {             Log.d(TAG, "IP recover: it was disabled");             return false;         }         if (mPastDhcpLease == null) {             Log.d(TAG, "IP recover: mPastDhcpLease is empty");             return false;         }         Log.d(TAG, "IP recover: mPastDhcpLease = " + mPastDhcpLease);

 

        long reCaculatedLeaseMillis =             mPastDhcpLease.systemExpiredTime - SystemClock.elapsedRealtime();         Log.d(TAG, "IP recover: reCaculatedLeaseMillis = " + reCaculatedLeaseMillis);

 

        if (reCaculatedLeaseMillis < 0) {             // configure infinite lease             mDhcpLeaseExpiry = 0;             Log.e(TAG, "IP recover: lease had been expired! configure to infinite lease");         } else {             mDhcpLeaseExpiry = SystemClock.elapsedRealtime() + reCaculatedLeaseMillis;             Log.d(TAG, "IP recover: mDhcpLeaseExpiry = " + mDhcpLeaseExpiry);         }

 

        byte arpResult[] = null;         ArpPeer ap = null;         boolean retVal = false;         try {             InetAddress ipAddress = mPastDhcpLease.ipAddress.getAddress();             Log.d(TAG, "IP recover: arp address = " +                 "#$%K" +                 logDumpIpv4(3, ipAddress.getHostAddress()));             ap = new ArpPeer(mIfaceName, Inet4Address.ANY, ipAddress);             // doArp will blocking several seconds, to create thread if needed             arpResult = ap.doArp(5000);             if (arpResult == null) {                 int leaseDuration = (int)reCaculatedLeaseMillis/1000;                 mPastDhcpLease.setLeaseDuration(leaseDuration);                 acceptDhcpResults(mPastDhcpLease, "Confirmed");                 Log.d(TAG, "doIpRecover no arp response, IP can be reused");                 retVal = true;             } else {                 Log.d(TAG, "doIpRecover DAD detected!!");             }         } catch (ErrnoException ee) {             Log.d(TAG, "err :" + ee);         } catch (IllegalArgumentException ie) {             Log.d(TAG, "err :" + ie);         } catch (SocketException se) {             Log.d(TAG, "err :" + se);         } finally {             if (ap != null)    ap.close();         }         return retVal;     }     /// @}
上一篇:2021.12.16 输入一个字符串,内有数字和非数字字符,统计其*有多少个整数


下一篇:git系列之-git clone