在wifi直连P2P连接中获取对等设备的IP地址

8
我的应用程序需要在我的设备作为Wi-Fi Direct P2P连接中的群主(GO)时知道对等设备的IP地址(通常GO充当DHCP服务器,而对等站从服务器接收IP)。我发现DHCP客户端列表存储在/data/misc/dhcp/dnsmasq.leases文件中,但是应用程序必须是“dhcp”组的一部分才能读取该文件,而我在尝试读取时遇到了EACCES(权限被拒绝)。

是否有权限可以添加到清单中以读取该文件?或者是否有其他方法可以在没有root的情况下从Java/本机Android框架获取此DHCP客户端列表?

4个回答

2

在onConnectionInfoAvailable中,我获取了GO的IP地址,这是从BroadcastReceiver.WIFI_P2P_CONNECTION_CHANGED_ACTION事件中获取的,该事件在连接后触发。
因此,在连接后调用requestConnectionInfo(mChannel, mMyWiFiActivity),然后挂钩到回调函数onConnectionInfoAvailable(WifiP2pInfo info)。

这将给您群组所有者的地址。info.groupOwnerAddress.getHostAddress();

希望这可以帮助您。


2
好的,这将给你GO的IP地址。如果你的代码已经在GO上运行,并且想要知道对等方的IP地址,这将无法帮助。 - SS.
1
我不知道这是否有帮助,但在我的项目中,我在GO上运行了一个ServerSocket(一旦我从onConnectionInfoAvailable回调中知道设备是GO,就会启动它)。然后,在我的客户端设备上获取对等列表时,连接到GO上的serverSocket,并请求刚刚连接到它的设备的IP。然后我将其发送回客户端。 - Bluemoon10

2
我通过将对等方的本地IP地址(以192.168.x.x开头)发送给组所有者来解决了这个问题。在此“握手”之后,一切都很顺利,而且时间不会太长。 没有找到其他获取对等方IP地址的方法,GroupListener/PeerListener/...提供的唯一信息是MAC地址。

但问题是您如何获取同行的本地IP地址..? 我的意思是,您能否提供一些代码片段..? - unrealsoul007
是的,我也有同样的问题。有解决方案吗? - user1850484
服务器只需获取已建立连接的套接字的IP,无需通过连接发送IP地址本身。 - xuiqzy

0

如果您拥有adb root访问权限,则可以访问存储在./data/misc/dhcp/dnsmasq.leases中的DHCP客户端列表。

编程方式:

在服务器端或GO端:

1)打开端口(例如端口:9999)上的套接字

2)调用Accept()并等待客户端或GC连接(Socket clientSocket = Socket.accept();)

3)一旦客户端/GC连接,可以使用“clientSocket.getInetAddress().toString()”找到GC IP地址

在客户端或GC端:

1)从客户端(GC)触发与组所有者的连接

2)打开并连接到组所有者的IP地址的套接字

3)P2P GO IP地址可通过“info.groupOwnerAddress.getHostAddress()”(WifiP2pInfo info;)获得

4)连接到相同的端口,例如9999


-2

没有。您需要使用服务发现协议。


ICS是否支持服务发现? - SS.
不,它在JB中作为平台的一部分得到支持。你可以尝试将JmDNS作为应用的一部分来使用。 - Irfan
3
为什么做这件事这么困难?为什么会制作一个DHCP服务器却没有访问它所提供的内容的权限?这太过复杂了... - Mgamerz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接