RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1228589
Accepted
ЮрийСПб
ЮрийСПб
Asked:2022-01-08 19:38:27 +0000 UTC2022-01-08 19:38:27 +0000 UTC 2022-01-08 19:38:27 +0000 UTC

在连接到不同的 Wi-Fi 网络时,为客户端设置一个预先知道的 IP 地址

  • 772

问题的本质:

有一台笔记本电脑,它连接到家庭 Wi-Fi 或手机的接入点。Web 服务器在笔记本电脑上启动,手机上的应用程序连接到该服务器。因此,对于应用程序,您必须指定服务器地址。在不同的 Wi-Fi 网络中,笔记本电脑的地址是不同的(192.168.0.xxx 和 192.168.43.xxx)。结果,您必须在手机上对应用程序进行不同的组装,指示笔记本电脑的一个或另一个地址,这很不方便。

问题:

原则上是否可以在家中设置路由器或手机上的接入点或笔记本电脑(win10)上的某些东西,以便笔记本电脑始终заранее определённый одинаковый在指定的Wi-Fi网络中具有IP地址?

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    andreymal
    2022-01-08T21:59:08Z2022-01-08T21:59:08Z

    好吧,因为我被要求将问题解释为XY 问题......假设真正的问题意味着“如何在更改 LAN 时摆脱在 Android 应用程序中更新服务器 IP 的需要” ?” , 那么已经有很多不同的选择了。


    首先,任何 Linuxoid 都会想到通过 SSH 进行端口转发,因为 SSH 服务器安装在任何自尊的 Linux 上。

    底线:在 localhost 的客户端上,我们开始监听端口,所有连接到的连接都会被发送到其他地址,然后视图的本地地址http://127.0.0.1:8080将是不变的,远程地址可以随你改变喜欢根据情况。

    令非 Linux 用户高兴的是,SSH 服务器在 macOS 中也可用,甚至从 1809 版开始在 Windows 10 中可用,其中OpenSSH 的安装基本上归结为以管理员身份在 PowerShell 中运行的三四个命令:

    # Установка SSH-клиента (однократно)
    Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    
    # Установка SSH-клиента (однократно)
    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    
    # Запуск службы SSH
    Start-Service sshd
    
    # Прописывание службы SSH в автозагрузку (опционально)
    Set-Service -Name sshd -StartupType 'Automatic'
    

    首次启动时会自动生成文件夹中的设置和 SSH 密钥C:\ProgramData\ssh(您可以根据自己的喜好编辑它们并重新启动服务)。

    结果,正在运行的服务通过 SSH 协议提供了对命令行的远程访问,但在问题的上下文中,我们对此并不感兴趣,而是对协议内置的端口转发能力感兴趣。

    接下来,在 Android 上,我们安装任何支持端口转发的 SSH 客户端。就个人而言,我不了解 Google Play 上提供的所有客户端,所以我不会描述它们。我自己ssh在命令行使用命令,在Android上它可以由任何提供Linux环境的应用程序提供,例如Termux(SSH客户端可以通过命令安装在其中pkg update && pkg install openssh)

    SSH 命令中端口转发的语法是:

    ssh -N -L локальный_ip:локальный_порт:удалённый_адрес:удалённый_порт имя_пользователя@адрес_сервера
    
    • 本地 ip - 将启动端口监听的一个(默认为 127.0.0.1,您可以不指定);

    • 本地端口 - 客户端将监听的端口(不必匹配远程端口);

    • 远程地址和远程端口 - 将通过 ssh 建立连接的端口(如果您指定 127.0.0.1,则将与运行 ssh 服务器的设备建立连接,但您可以指定任何其他地址以它有权访问);

    • 用户名必须在 Windows 中存在(我没有检查西里尔字母的性能),连接后,他们会要求该用户输入密码;

    • 该选项-N只是禁用命令行,端口转发仍然不需要它;如果需要,您可以删除此选项并使用命令行;

    • -L您可以通过多次重复带有参数的选项来转发多个端口。

    例如,这个命令:

    ssh -L 8080:127.0.0.1:80 172.16.10.12
    

    会将所有对本地地址的请求通过服务器重定向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,Termuxsshd也有命令,但你需要首先配置它)。

    然后连接命令可能看起来像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 访问权限)。

    • 9

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5