如何检测连接到同一网络的设备的IP

时间:2015-08-20 14:18:42

标签: android networking

我正在尝试检测设备的IP(ESP8266),它充当服务器并连接到同一网络。所以我可以向它发送一些GET请求,但每次我的路由器重新启动设备时都会分配一个不同的地址,因此每次我必须从路由器查找其IP并将其放入应用程序以让它再次开始工作

我找到了一些可以完成我的工作的rorist/android-network-discovery,但我很难在我的应用程序中实现它(缺少文档),其次我的防病毒软件会将其检测为病毒。

我正在尝试像Belking WeMo应用程序那样做。

我现在有什么选择?

3 个答案:

答案 0 :(得分:1)

除非你有root访问权限,否则在android中没有直接的方法,但是你可以用经典的方式来做,例如我们确定第二部分范围的范围总是在0- 255首先我们需要做的是,通过使用此方法获取public static String getMyIPAddress() {//P.S there might be better way to get your IP address (NetworkInfo) could do it. String myIP = null; try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { List<InetAddress> addrs = Collections.list(intf.getInetAddresses()); for (InetAddress addr : addrs) { if (!addr.isLoopbackAddress()) { String sAddr = addr.getHostAddress().toUpperCase(); boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); if (isIPv4) myIP = sAddr; } } } } catch (SocketException e) { e.printStackTrace(); } return myIP; }

IP
上面的

方法会返回分配给我们手机的当前PING,我们可以开始PING指示连接到同一网络的其他人String ipAddress = getMyIPAddress(); String subnet = ipAddress.substring(0, ipAddress.lastIndexOf(".")); String currentHost; for (int i = 0; i < 255; i++) { currentHost = subnet + "." + i; Process p1 = Runtime.getRuntime().exec("ping -c 1 " + currentHost); int returnVal = p1.waitFor(); boolean reachable = (returnVal == 0); if (reachable) { //currentHost (the IP Address) actually exists in the network } } 返回响应然后肯定IP存在于同一网络中,遵循以下代码在后台线程中:

Pining

正如您在上面的代码中看到的那样,我们在0-255和IP Address之间循环,reachable凡属于network的人实际上都在var MouseFetcher; MouseFetcher = cc.EventListener.create({ event: cc.EventListener.MOUSE, TP: cc.Point, initial:function(){ this.TP = new cc.p(cc.winSize.width/2, cc.winSize.height/2); }, onMouseDown: function (event) { this.TP = event.getLocation(); return true; }, onMouseMove: function (event) { }, onMouseUp:function(event){ this.TP = event.getLocation(); var i; for(i = 0; i < clickables.length; i++){ if(clickables[i].containsPoint(this.TP)){ clickables[i].touchEvent(); } } } }); 内。< / p>

答案 1 :(得分:0)

IP ToolsFing都可以进行网络发现。它们是免费的应用程序。

我相信他们只需ping设备子网中的每个IP地址并等待响应。您可以自己制作代码。

您可能需要查看此文章以获取更多信息:

java code to ping an IP address

提示:在等待超时时使用ThreadPoolExecutor进行良好的并行化。

答案 2 :(得分:0)

为什么不使用静态IP地址分配?如果您对路由器配置有一些访问限制,那么您可以尝试其他一些选项:

  1. 请记住您设备的MAC地址。使您的应用程序在ESP8266上从服务器请求内容并使用arp -a命令查找IP-MAC映射。
  2. 编写服务,响应广播/多播查询并定期刷新您的IP地址信息。
  3. 开发一个从路由器获取有关IP地址范围的数据的应用程序,并在那里寻找MAC。