首页 > 解决方案 > Python:连接到连接在 wifi 中继器(WiFi NAT 路由器)上的设备的 IP

问题描述

我有一个工作 python 脚本,它通过连接到其 IP 地址从 wifi 设备(NodeMCU *)检索数据:

import requests
response = requests.get('http://192.168.1.12/data.json')
data = response.json()
print(data)

该脚本有效,因为我的计算机和我的设备都连接到同一个 wifi SSID(我们称之为主 SSID)。

但是我的 wifi 信号对于我的设备来说不够强(因为它在室外),所以我设置了一个 wifi 中继器**,它连接到主 SSID 并创建了一个接入点。然后我将我的设备连接到这个 wifi 中继器接入点。

10.24.1.2在上面的脚本中使用了设备的新 IP 地址 ( *** ),但这仅在我将计算机与主 SSID 断开连接并将其连接到 wifi 中继器接入点时才有效。但我不想这样做:我的计算机应该保留在主 SSID 上,而我的设备应该在 wifi 中继器接入点上。

所以我的问题是:当我的计算机保持在主 SSID 上时,如何从连接到 wifi 中继器的设备中检索 data.json?

我查看了 wifi 中继器可以执行的端口转发,但我的设备似乎没有端口:如果我连接到http://10.24.1.2/data.json我看到一堆数据但如果我连接到http://10.24.1.2/data.json:3(或任何数字)我得到“未找到” .

但是我可以在我的设备上设置一个具有特定服务器、路径和端口的 API(尽管需要做一些研究才能知道如何使用它)

在此处输入图像描述


*)该设备是一个lufdaten 传感器,由 nodemcu 构建 )我的 wifi 中继器是另一个使用此https://github.com/martin-ger/esp_wifi_repeater
编程的 nodemcu *
)我通过 TCP/检索设备的新 IP使用PuTTY远程登录到我的 wifi 中继器 IP 地址

标签: pythonsocketspython-requestswifirouter

解决方案


您的“中继器”不像大多数 WiFi 中继器那样扩展现有网络,而是一个 WiFi 路由器,它创建一个具有不同地址空间的新网络。您的主 WiFi 路由器(“主 SSID”)只是这个新网络中的一个设备,这意味着它将使用 NAT 提供从“主 SSID”内的任何设备到“中继器 SSID”的访问。

但由于这种 NAT 动态地将多个 IP 映射到单个 IP,它只能在一个方向上设计:从“主网络”(192.168.1/24) 内部连接到“中继器网络”(10.24.1/ 24) 可以创建,但没有从中继器网络到主网络的连接。这实际上与家庭网络中的设备无法从互联网直接访问的原因相同。

如果您的“主 SSID”路由器可以执行此操作,您需要创建显式端口转发。或者,您可以使用不创建新网络但仅扩展现有网络的中继器。不知道您现有的设备是否可以做到这一点,因为它被明确记录为“WiFi NAT路由器”。


推荐阅读