手动保留常用端口,解决 Windows 端口被 Hyper-V / WinNAT 占用的问题

对于 Windows 10 及 Windows 11,当启用 Hyper-V 或者虚拟机平台后,Windows NAT 服务会随机保留一些端口以便于提供 NAT (网络地址转换) 服务,以实现虚拟机的上网。这些端口范围是随机确定的,因此很容易导致开发时遇到端口占用问题。比如会遇到以下错误:

  • Error: listen EADDRINUSE: address already in use :::3000
  • 以一种访问权限不允许的方式做了一个访问套接字的尝试。
  • An attempt was made to access a socket in a way forbidden by its access permissions

除此以外,还可能会遇到明明服务启动成功但是却访问不了的问题,这也很有可能是因为端口被 WinNAT 给占了。

解决方案

网络上普遍建议重新设置一下「TCP 动态端口范围」(如文章 解决 Windows 10 端口被 Hyper-V 随机保留(占用)的问题 ),但是这种方法并不总是有效,因为你并不知道自己未来会即兴用到哪些端口,如果端口分的少了,又会导致其他问题,比如因为可用端口不够用而妨碍上网。

好在,Windows有一个很有趣的特性,就是用户可以 自行保留端口 给用户态程序使用。被用户保留的端口只能被用户态程序分配使用,却不能被内核驱动程序和服务使用。比如我设置保留 1080 端口后,Clash 这类普通用户态程序可以直接申请到这个端口,但是 IIS、WinNAT 等内核驱动程序和服务试图申请时却会被系统拒绝。这样一来,就可以避免端口被 WinNAT 占用的问题。

点击阅读全文 →

利用Windows卷影副本(Volume Shadow)找回被覆盖和删除的数据

Windows默认启用的系统恢复机制会定期创建卷影副本,创建的时机通常为安装或卸载软件以及系统更新。卷影副本 (Volume Shadow) 实际上就是我们在 Linux 上经常提到的 “快照(Snapshot)”,它利用写时复制 (CoW) 机制为我们提供了文件系统在某个时间点的一个状态的视图。通过利用这个视图,我们可以找回近期不慎删除或被覆盖的数据,也可以用于某些电子取证场景。实际上,系统恢复就是利用快照机制还原文件到先前某个状态实现的。

注意: 由于卷影副本存在一个严重的bug, 该方法并不可靠!找回的文件数据可能不完整,或需要手动拼接。该方法仅供紧急情况或取证场景使用,切勿以此代替备份软件。

前提条件: 系统恢复未被禁用、文件系统为NTFS、存在可用的系统恢复还原点

利用软链接将卷影副本链接到常规磁盘分区下面,就可以访问这些过去时间点的文件系统视图了。

点击阅读全文 →

在Windows下实现WireGuard动态DNS解析(DDNS)的正确方法:避免无意义的开销

WireGuard 隧道一旦建立后,域名就不再重新解析了,一旦服务端的 IP 发生改变,这隧道就断了。

截止文章最后修订,WireGuard 官方始终没有提供 Windows 下的动态 DNS 解析(DDNS)客户端脚本,所以说你想实现,如果你想在 Windows 下使用 WireGuard 配合经常改变 IP 的域名,你就必须要自己写一个动态 DNS 解析脚本。

我基于网上的脚本进行了一番魔改,增加了以下特性:

  • 只处理已启用的 WireGuard 隧道,没开的隧道不会处理
  • 可以作为服务安装,自带延迟功能
  • 增加各类判断条件和错误处理,以便纠错

点击阅读全文 →

在 Windows 上设置 NAT 或网络共享的正确方法——避免Wi-Fi热点无法使用

最近在我的笔记本上用 WireGuardServerForWindows 项目搭了一个 WireGuard 服务端,但是发现一个问题,我一给 WireGuard 开网络共享,我就没法开 Wi-Fi 热点了

罪魁祸首:SharedAccess

目前的NAT的普遍做法是用 SharedAccess 服务,也就是你在控制面板看到的那个 “Internet 连接共享”

但是这个服务是针对热点的设计的,只能支持一个 NAT 实例,这意味着,由于SharedAccess服务已经被wireguard服务器的NAT占用掉了,你就没办法建立一个有 Internet 的 Wi-Fi热点

但是,如果,使用New-NetNat命令,就能够设置许多NAT实例,同时可以用热点。

方法

点击阅读全文 →

Windows 选择指定的网卡来开承载网络型热点

Windows 10 自带的移动热点比较废,只允许带8个设备,并且在断网后自动关闭,不能满足需求。
而通过 netsh 创建的 Microsoft 承载网络虽好,但却不支持选择用于创建热点的网卡。
本文介绍的玄学方法可以让用户做到自己选择网卡开 Microsoft 承载网络 热点。

  1. 打开 网络和 Internet 设置
  2. 更改适配器选项
  3. 选择你希望使用的网卡,重命名
  4. 起个字母排序在你不想使用的网卡的名字之前的名字,例如 !AWLAN
  5. 开!热!点!
netsh wlan set hostednetwork mode=allow ssid=namehere key=passwordhere keyUsage=persistent
netsh wlan start hostednetwork

博主真的是随便试出来的(

修复升级 Windows10 版本后所有内置应用闪退+第三方应用参数错误的问题

昨天把Windows10升级到1809后所有应用都挂了,应用商店和内置应用闪退,常用的应用参数错误,连WSL都出问题了。容我先亲切问候一下微软 :)

修复内置应用闪退、应用商店打不开

这里有 几个没啥用的方法,反正对我来说真的没啥用。

修复办法:

  1. 打开 C:\Program Files
  2. 显示隐藏的文件,找到 WindowsApps,点击上方菜单的 共享 – 高级共享
  3. 修改所有者为 Everyone
  4. 启用继承,保存

说白就是因为 ALL APPLICATION PACKAGES 没有权限。
另外还有人说是因为N卡驱动问题、LicenseManager服务被禁用等等,反正我不是这个问题。

修复第三方应用参数错误

没修好,我选择重装

使用任意磁盘或路径保存 Windows 文件历史记录

不知为何,博主的 Windows 不允许使用本机的机械硬盘保存文件历史记录,这大概又是一个秘制bug吧。

无论是 Windows7 的备份还是 Windows10 的文件历史记录,它们都允许用户选择网络位置保存数据,于是我们就可以这样操作:

\\localhost\X$\Path

该路径表示本机 X: 盘的 Path 文件夹
例如,我要将文件历史记录保存到 D:\FileHistory,只需在 “文件历史记录” – 选择驱动器 – 添加网络位置 中输入 \\localhost\D$\FileHistory

禁用使用Intel核显的Windows笔记本自动调节亮度功能

Intel 核显自带一个“节电功能”,它的工作原理:

比如你设置的100%的亮度,放着一张白的图片,那么屏幕只能100%亮度显示。但是如果是50%灰的图片呢,我只要50%亮度显示纯白就行了诶。如果整个屏幕最亮的颜色只有10%,那就干脆把亮度降到10%来省电好了,然而对于电影这种明暗变化较快的没优化好,导致体验较差。
来源: 知乎/汤雨豪

这功能有多智障呢?博主在太阳底下写代码,因为光照太强了看不见屏幕,于是把电脑屏幕亮度调到100%,切回编辑器,然后,Intel核显自动把屏幕亮度给降回来了。

关闭方法

  1. 打开控制面板
  2. 打开Intel核心显卡设置 -> 电源 -> 显示器节电技术 -> 禁用
  3. 返回控制面板
  4. 电源选项 -> 更改计划设置 -> 更改高级电源设置 -> 显示 -> 禁用“启用自适应亮度”

Win10 资源管理器为所有格式激活“编辑”按钮并修改文本文件“编辑”按钮的编辑器

默认情况下,Windows 10 资源管理器的功能区对绝大多数文本格式的不可用的,即使能够使用(例如 .js .cpp .txt 等格式),“编辑”按钮所对应的编辑器也是废物一般的记事本(用记事本写代码?),使得这个“编辑”按钮显得华而不实。为了让编辑文本更加方便、充分利用这个“编辑”按钮,本文将介绍如何通过修改注册表以为为所有格式激活“编辑”按钮并修改文本文件“编辑”按钮的编辑器

思路

Windows10 功能区的“编辑”按钮可用与否取决于注册表中HKEY_CLASSES_ROOT中对应的格式下的shell项是否存在edit子项,若edit项存在,则该按钮可用
只需增加edit子项并设置启动命令行即可激活编辑按钮或达到更改编辑器的目的

实现

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\edit]

[HKEY_CLASSES_ROOT\*\shell\edit\command]
@="\"编辑器路径\" \"%1\""

[HKEY_CLASSES_ROOT\txtfile\shell]

[HKEY_CLASSES_ROOT\txtfile\shell\edit]

[HKEY_CLASSES_ROOT\txtfile\shell\edit\command]
@="\"编辑器路径\" \"%1\""

将上述代码中的 编辑器路径 替换为你的编辑器的路径,然后将上述代码保存为 1.reg ,双击导入即可