任何人都可以解释或说明如何获取通过手机的便携式WI-FI热点连接的计算机(或其他设备)的IP地址吗?
我尝试了here
中的以下代码public String getLocalIpAddress() {
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 (SocketException ex) {
Log.e(LOG_TAG, ex.toString());
}
return null;
}
但是只返回默认网关。
我在SO上也发现了another example,它可能只是解决方案,但我不知道如何将它应用到我的情况中。具体来说,我看不到那段代码中IP地址的位置。
答案 0 :(得分:3)
检查你的arp表是否有wlan接口。 cat /proc/net/arp
在命令行。
答案 1 :(得分:0)
虽然给出了答案,但如果有人对直接答案感兴趣:
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;
}
另外根据我的理解(没有自己尝试),如果你正在使用aysntask并且需要在工作线程上做(不能在主线程上工作),也可以使用这个过程。使用方法查找热点接口或直接使用_hotspotInterface作为“wlan0”
try {
InetAddress[] arr = InetAddress.getAllByName(_hotspotInterface);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
要找到热点,我使用了这种方法(虽然不是很好的例子)
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();
}
}
}