问题的本质:
有一台笔记本电脑,它连接到家庭 Wi-Fi 或手机的接入点。Web 服务器在笔记本电脑上启动,手机上的应用程序连接到该服务器。因此,对于应用程序,您必须指定服务器地址。在不同的 Wi-Fi 网络中,笔记本电脑的地址是不同的(192.168.0.xxx 和 192.168.43.xxx)。结果,您必须在手机上对应用程序进行不同的组装,指示笔记本电脑的一个或另一个地址,这很不方便。
问题:
原则上是否可以在家中设置路由器或手机上的接入点或笔记本电脑(win10)上的某些东西,以便笔记本电脑始终заранее определённый одинаковый在指定的Wi-Fi网络中具有IP地址?
好吧,因为我被要求将问题解释为XY 问题......假设真正的问题意味着“如何在更改 LAN 时摆脱在 Android 应用程序中更新服务器 IP 的需要” ?” , 那么已经有很多不同的选择了。
首先,任何 Linuxoid 都会想到通过 SSH 进行端口转发,因为 SSH 服务器安装在任何自尊的 Linux 上。
底线:在 localhost 的客户端上,我们开始监听端口,所有连接到的连接都会被发送到其他地址,然后视图的本地地址
http://127.0.0.1:8080将是不变的,远程地址可以随你改变喜欢根据情况。令非 Linux 用户高兴的是,SSH 服务器在 macOS 中也可用,甚至从 1809 版开始在 Windows 10 中可用,其中OpenSSH 的安装基本上归结为以管理员身份在 PowerShell 中运行的三四个命令:
首次启动时会自动生成文件夹中的设置和 SSH 密钥
C:\ProgramData\ssh(您可以根据自己的喜好编辑它们并重新启动服务)。结果,正在运行的服务通过 SSH 协议提供了对命令行的远程访问,但在问题的上下文中,我们对此并不感兴趣,而是对协议内置的端口转发能力感兴趣。
接下来,在 Android 上,我们安装任何支持端口转发的 SSH 客户端。就个人而言,我不了解 Google Play 上提供的所有客户端,所以我不会描述它们。我自己
ssh在命令行使用命令,在Android上它可以由任何提供Linux环境的应用程序提供,例如Termux(SSH客户端可以通过命令安装在其中pkg update && pkg install openssh)SSH 命令中端口转发的语法是:
本地 ip - 将启动端口监听的一个(默认为 127.0.0.1,您可以不指定);
本地端口 - 客户端将监听的端口(不必匹配远程端口);
远程地址和远程端口 - 将通过 ssh 建立连接的端口(如果您指定 127.0.0.1,则将与运行 ssh 服务器的设备建立连接,但您可以指定任何其他地址以它有权访问);
用户名必须在 Windows 中存在(我没有检查西里尔字母的性能),连接后,他们会要求该用户输入密码;
该选项
-N只是禁用命令行,端口转发仍然不需要它;如果需要,您可以删除此选项并使用命令行;-L您可以通过多次重复带有参数的选项来转发多个端口。例如,这个命令:
会将所有对本地地址的请求通过服务器重定向
127.0.0.1:8080到远程地址127.0.0.1:80(这是两个不同的 127.0.0.1!)172.16.10.12。结果,通过连接到所需的 SSH 服务器并最小化客户端,我们有机会
http://127.0.0.1:8080在所需的应用程序中注册,或者例如在浏览器中打开它。显然,除非我们自己在转发设置中指定其他本地 ip 和端口,否则此地址不会改变。服务器IP地址可能会随着网络的变化而改变,但这不会影响本地地址——你只需要稍微编辑一下这个命令。你也可以不在 Windows 上安装 SSH 服务器,而是直接安装在 Android 设备上(Google Play 和 F-Droid 上也有各种应用程序——我查过 SimpleSSHD,Termux
sshd也有命令,但你需要首先配置它)。然后连接命令可能看起来像
ssh -L 8080:172.16.10.12:80 127.0.0.1 -p 2222- 也就是说,我们连接到自己(连接到端口 2222 上的 SSH 服务器),但重定向到远程地址。尽管总的来说,如果您考虑一下,那么使用整个 SSH 仅转发一个端口就有点过头了。当然必须有更原始的应用程序,但我在这里跑题了,也许其他人会写答案:)
出于安全原因,Linux 内核不允许 SSH 客户端侦听低于 1024 的端口。如果无法指定任意端口而不是 80(应用程序未提供),或者您需要使用 UDP/ICMP 而不是 TCP,那么您将不得不使用某种 VPN 构建一个成熟的网络。我不知道 Windows 上的 VPN 服务器情况如何,也不会写详细说明,但在 Android 上,我可以说 OpenVPN 和 WireGuard 客户端运行良好。在 VPN 服务器的设置中,可以规定向 Android 客户端发布特定的 IP 地址,这将是永久性的。
您可以尝试使用域而不是 IP 地址,并即时更改与该域关联的 IP 地址。但是为此,您必须在本地网络上提升您的 DNS 服务器(沉闷)或在 android 上编辑文件
/system/etc/hosts(当然,您将需要 root 访问权限)。