从 Windows 通过主机名 Ping WSL2

ZEE*_*ZEE 7 windows linux dns windows-subsystem-for-linux

启动 WSL Kali 实例后,我可以从 Windows 控制台通过 IP\n对其进行 ping 操作,如下所示:

\n
ping 172.31.37.123\n
Run Code Online (Sandbox Code Playgroud)\n

但是...我怎样才能通过名字 ping 通呢?

\n

我已经更改了 中的 WSL 主机名/etc/hostname,\n但我仍然可以\xc2\xb4t 从 Windows 控制台 ping 这个名称:

\n
ping kali1\nping kali1.local\nping kali1.localdomain\n
Run Code Online (Sandbox Code Playgroud)\n

这些都不起作用。有任何想法吗?

\n

Not*_*1ds 7

如果您确实想通过名称从 Windows ping WSL2 虚拟网络接口的地址,则需要将其添加到Windows主机文件,而不是 Linux 主机文件。

可以在 找到C:\Windows\System32\drivers\etc\hosts。您需要以管理员身份对其进行编辑。

然而,有几个问题需要注意(无论如何,比 ping WSL2 接口更好的事情要做)。

首先,WSL2 地址每次重新启动时都会发生变化(无论是重新启动还是wsl --shutdown)。因此,您需要编写对 Windows 主机文件的编辑脚本,以便在每次启动 Kali 时更新它,或者手动更新它。这是一种痛苦(而且不需要)。

其次,请注意,您安装的每个 WSL2 发行版都共享相同的虚拟 NIC,因此当您执行此操作时,您实际上是在寻址任何/所有已安装的发行版。这可能(或可能不会)达到您期望的结果。

推荐

正如我上面提到的,确实没有理由使用pingWSL2。您想要访问其中的任何服务都可以通过 Windows 主机访问localhostForwarding。例如。在 Kali 中(假设您安装了 Python),运行:

python3 -m http.server
Run Code Online (Sandbox Code Playgroud)

在 Windows 浏览器中,您只需打开localhost:8000.

这是有效的,因为默认情况下,WSL2 会将任何localhost端口转发到 WSL2(假设该端口尚未在 Windows 中绑定)。

因此,大多数服务(ping例外,因为它不使用 TCP 端口,即 ICMP)都可以通过localhost无论如何访问。

您还可以在 PowerShell 中使用某种“服务/端口 ping”来验证这一点,以检查 Python3 简单服务器:

Test-NetConnection -ComputerName 127.0.0.1 -Port 8000
Run Code Online (Sandbox Code Playgroud)

请注意,这不适用于网络上的其他设备(例如您的手机)。如果您需要解决方案,我可以在超级用户上为您指出其他答案。

  • @ZEE 我有一种感觉,该端口已经在使用中。是的,必须使用不同的端口。重要的是要认识到 WSL2 下的 Kali“不是”虚拟机。每个发行版/实例实际上都是一个在 WSL2 VM“内部”运行的独立容器(PID 命名空间)。鉴于该架构,它们将始终共享相同的虚拟 NIC(网络命名空间)等,这意味着您始终需要在每个实例中使用不同的端口。 (2认同)