【问题标题】:Python: connecting to the IP of a device connected on a wifi repeater (WiFi NAT Router)Python:连接到连接在 wifi 中继器(WiFi NAT 路由器)上的设备的 IP
【发布时间】:2020-04-16 14:04:19
【问题描述】:

我有一个工作 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 中继器接入点。

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

所以我的问题是:如何从连接到 wifi 中继器的设备中检索 data.json,而我的计算机仍使用主 SSID?

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

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


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

【问题讨论】:

    标签: python sockets python-requests wifi router


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。我可以将我的 wifi 中继器设置为automesh。然后“不需要配置“软 AP 设置”,因为在 automesh 模式下,这些设置与“STA 设置”相同。所有连接的 ESP 中继器都将提供相同的 ssid。”但仍然使用此配置,我无法访问我的设备 URL。
    • 关于端口转发,我的主SSID可以转发端口。我已经设置了这个WifiRepeater TCP Port 7777 192.168.1.39 999 [7777 是我在 Putty 中用来向我的 wifi 中继器发送命令的端口,192.168.1.39 是我的主 SSID 上的 wifi 中继器,999 只是一个随机数]。我试图连接到设备 IP (http://10.24.1.2:999/) 但它不起作用。这些是我应该使用的设置吗?
    • @MagTun:如果您使用 http://192.168.1.12/data.json 从主 SSID 中访问您的传感器,您需要在 AP 上将主 SSID 的端口转发从 999 到 192.168.1.12 端口 80,以便使用http://10.24.1.2:999/data.json 访问您的传感器。
    【解决方案2】:

    只是为了完成 Steffen Ullrich 的回答:

    从连接到主 SSID/网络的计算机中检索http://10.24.1.2/data.json 上 wifi 中继器网络上可用的 json 的步骤:

    1) 在 wifi 中继器中创建一个端口转发(我使用的 wifi 中继器可以通过 TCP/telnet 控制,因此如果我的计算机连接到主 SSID,则此命令通过 putty 发送;如果我的计算机连接到 arduino 串行监视器,则此命令发送已连接到wifi中继器)

    portmap add TCP 999 10.24.1.2 80   
    

    999 : 随机选择的数字 10.24.1.2 :连接到 wifi 中继器网络的设备的 IP 地址(通过命令“show dhcp”检索) 80 : HTTP 请求的默认端口

    2) 连接到主 SSID 后,转到http://192.168.1.39:999/data.json(根据您在步骤 1 中选择的号码更改 999)


    如果您想从任何互联网连接(从任何地方)访问您的设备,您还需要在主 SSID/网络上创建一个端口转发(我必须转到 192.168.1.1,然后是 v4 网络 > NAT):

    WifiRepeater   TCP  Port    8432 192.168.1.39   999 
    
    • wifiRepeater : 端口转发的自定义名称

    • TCP:这是使用的协议

    • 端口:使用的类型

    • 8432:一个随机数参见howtogeek.com的解释:

    您可以在此处使用 1 到 65353 之间的任何数字,但是 实际上,大多数较低的数字都被标准占用 服务(如电子邮件和网络服务器)和许多更高的数字 分配给相当常见的应用程序。考虑到这一点,我们会 建议选择 5,000 以上的数字,并且为了更加安全,使用 Ctrl+F 搜索此long list of TCP/UDP port numbers 以确保 您没有选择与现有服务冲突的端口 你已经在使用了。

    • 192.168.1.39:livebox上wifi中继器的IP地址

    • 999 : 在步骤 1 中随机选择的数字

    【讨论】:

      猜你喜欢
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多