1:通过java运行cmd命令,来通过arp命令获取同一网络下设备信息,对于支持linux 和windows的设备有效,像一些非智能设备,就无力回天了
2:使用android手机通过向子网内所有设备先发送一遍udp包,实现与在线的设备都进行通信一遍,这样对应的路由信息就自动存储在本地手机中,然后在通过读取android 本机的arp缓存表,来获取设备信息
好,下面详细进行第二种方式的描述:
Step1:首先,获取本机所处的子网段,方法详细代码如下:
/**
* 获取ip地址
*
* @return
*/
private static String getHostIP() {
String hostIp = null;
try {
//这里以eth0为例
hostIp = getIpAddress("eth0");
} catch (SocketException e) {
e.printStackTrace();
}
return hostIp;
}
/**
* Get Ip address 自动获取IP地址
* 可以传入eth1,eth0,wlan0,等
*
* @throws SocketException
*/
public static String getIpAddress(String ipType) throws SocketException {
String hostIp = null;
try {
Enumeration nis = NetworkInterface.getNetworkInterfaces();
InetAddress ia = null;
while (nis.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) nis.nextElement();
if (ni.getName().equals(ipType)) {
Enumeration<InetAddress> ias = ni.getInetAddresses();
while (ias.hasMoreElements()) {
ia = ias.nextElement();
if (ia instanceof Inet6Address) {
continue;// skip ipv6
}
String ip = ia.getHostAddress();
// 过滤掉127段的ip地址
if (!"127.0.0.1".equals(ip)) {
hostIp = ia.getHostAddress();
break;
}
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
Log.d(ipType, "get the IpAddress--> " + hostIp + "");
return hostIp;
}
Step2:new出一个线程&#x