python - 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 地址
解决方案
您的“中继器”不像大多数 WiFi 中继器那样扩展现有网络,而是一个 WiFi 路由器,它创建一个具有不同地址空间的新网络。您的主 WiFi 路由器(“主 SSID”)只是这个新网络中的一个设备,这意味着它将使用 NAT 提供从“主 SSID”内的任何设备到“中继器 SSID”的访问。
但由于这种 NAT 动态地将多个 IP 映射到单个 IP,它只能在一个方向上设计:从“主网络”(192.168.1/24) 内部连接到“中继器网络”(10.24.1/ 24) 可以创建,但没有从中继器网络到主网络的连接。这实际上与家庭网络中的设备无法从互联网直接访问的原因相同。
如果您的“主 SSID”路由器可以执行此操作,您需要创建显式端口转发。或者,您可以使用不创建新网络但仅扩展现有网络的中继器。不知道您现有的设备是否可以做到这一点,因为它被明确记录为“WiFi NAT路由器”。
推荐阅读
- arduino - 如何在 Arduino nano IoT 上在 Wifi 和 BLE 之间切换?
- amazon-sqs - 通过 asin 从 AnyOfferChangedNotification 获取产品 sku
- javascript - 如何更改 C3Chart 工具提示背景颜色?
- vue.js - Vue js表格动作按钮不显示
- angular - 如何在这样的自定义场景中以角度调用http post?
- mysql - 无法将 OKE Kubernetes 集群连接到集群外部的 Oracle MySQL 数据库实例
- html - bootstrap 4.6 按钮是否应该在活动时具有嵌入阴影?
- python - 输入数据有问题?Tensorflow:UnimplementedError:不支持将字符串转换为浮点数
- amazon-web-services - Can AWS email errors logged to CloudWatch by multiple Lambda functions?
- javascript - 电报机器人付款 - 成功付款后显示收据