废话:最近放假回家,在家里突然想玩游戏了,Steamdeck性能终归有限。部分游戏始终玩的不爽,想到之前了解到的Sunshnie+Moonlight串流的方案,远程调用家里的电脑打游戏,简直不要太爽。
一顿折腾之后配置好了所有的软件,使用IPV6连接,体验确实不错。但遇到一个问题,家里的电脑每次重新启动IPV6的地址都会变,这样每次需要使用远程桌面连接上去拿一下IPV6地址,非常麻烦。这里有两个解决方案:
- DDNS方案,使用DDNS软件将IPV6地址映射到域名,这样每次只需要访问域名就可以连接,但是也有缺点,DNS的传播是需要时间的,有时候就是无聊了想打几十分钟的Roguelike游戏,但是远程开电脑等待DNS域名修改传播要好久,对于这种短时间内的访问需求太不友好。
- 直接获取IPV6地址方案,想着创建一个任务,让Windows每次开机的时候自动发送IPV6的地址到我的邮箱,这样就方便很多,不需要等待,开机就能直接开玩。
对我来说肯定是方案二比较合适,方案定下了,开始实施。
前提工作: 第一、你需要你的被访问电脑能够获取到正确的IPV6,并且能够被外网访问。
第二、你需要一个用来接收IPV6地址的邮箱,可以是任何企业邮箱(但一定要是自己的邮箱,其他人不能接触到邮件内容,向外人泄露自己电脑的IP是非常危险的行为!!! 这点尤其注意),但是需要邮箱提供的STMP服务和一个授权码,简单来说就是你可以通过这个授权码调用邮箱的服务器给自己的邮箱发一封邮件。获取的过程可以根据不同的邮箱在网上搜索教程。我用的QQ邮箱,以下以QQ邮箱为例。
步骤一:获取正确的IPv6地址
- 重点讲以下IPV6的获取,这里有很大的坑,如果你的电脑比较高端,有多个网卡,或者有无线网卡,你可能会遇到获取到多个的IPV6的地址,我在这里就遇到了,所以我在获取IPV6时限制了两个条件:RouterAdvertisement 和 Random
$ipv6Addresses = (Get-NetIPAddress -AddressFamily IPv6 | Where-Object { $_.PrefixOrigin -eq "RouterAdvertisement" } | Where-Object { $_.SuffixOrigin -eq "Random" }).IPAddress
- 这是根据我的网卡信息决定的,下面我来说明下怎么你怎么获取正确的地址
首先打开windows的PowerShell:
在PowerShell中执行命令
Get-NetIPAddress -AddressFamily IPv6
- 这里可以看到我获取到了非常多的IPV6地址,包含一些虚拟设备的。一般来说,公网的IPV6地址是以2409开头,所以你只需要获取到2409开头的IPV6地址的那一个地址就可以。所以,对于我的电脑,对IPV6的筛选条件就是PrefixOrigin参数为RouterAdvertisement,SuffixOrigin参数为Random:
- 也就是脚本后面的内容:
| Where-Object { $_.PrefixOrigin -eq "RouterAdvertisement" } | Where-Object { $_.SuffixOrigin -eq "Random" }
-
我想表达的是你需要根据你电脑的实际情况进行修改,最终目的是为了获取到正确的IPV6地址
-
另外,你还可能遇到电脑有两个IPV6地址的情况,如果是这样,你可以使用网站:测试IPV6这个网站来查看自己对外的IPV6是哪一个,再筛选出对应的网卡就行。
步骤二:编写获取IPv6地址的脚本
- 在获取到正确的IPV6地址后就可以创建开始编写脚本了
- 打开记事本或其他文本编辑器,编写一个PowerShell脚本来获取IPv6地址并发送邮件。以下是一个示例脚本:
# 获取你的IPv6地址
$ipv6Addresses = (Get-NetIPAddress -AddressFamily IPv6 | Where-Object { $_.PrefixOrigin -eq "RouterAdvertisement" } | Where-Object { $_.SuffixOrigin -eq "Random" }).IPAddress
# QQ邮箱授权码
$accessToken = '************'
# 邮件发送参数
# 邮件的发送地址
$fromAddress = '5201314756@qq.com'
# 发送的目标邮件地址 我们发送给自己
$toAddress = '5201314756@qq.com'
# 发送邮件的主题
$subject = 'IPv6 Address on ' + $(Get-Date)
# 发送邮件的内容 “47989”是我Sunshine的端口号,可以根据自己的端口修改
$body = 'The IPv6 address of this machine is: [' + $ipv6Addresses + ']:47989'
# 邮件的发送服务器地址,根据自己的邮箱修改
$smtpServer = 'smtp.qq.com'
# 邮件的发送服务器端口,根据自己的邮箱修改
$port = 587
# 使用SSL,设置TLS保护的连接
$smtpClient = New-Object Net.Mail.SmtpClient($smtpServer, $port)
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($fromAddress, $accessToken)
# 创建邮件对象
$mail = New-Object System.Net.Mail.MailMessage
$mail.From = New-Object System.Net.Mail.MailAddress($fromAddress)
$mail.To.Add($toAddress)
$mail.Subject = $subject
$mail.Body = $body
$smtpClient.Send($mail)
- 将上述脚本保存为
SendIPv6Address.ps1
,放在一个方便管理的目录。
步骤二:创建任务计划
- 打开任务计划程序:
- 按
Win + R
键,输入taskschd.msc
,然后按回车。
- 按
- 创建一个PersonalShell文件夹
- 创建一个新的任务:
- 在任PersonalShell文件夹中,点击右侧的“创建任务”。
- 在任PersonalShell文件夹中,点击右侧的“创建任务”。
- 配置任务的一般信息:
- 在“常规”选项卡中,输入任务名称,例如“SendIPv6AddressOnStartup”。
- 选择“使用最高权限运行”。
- 配置触发器:
- 转到“触发器”选项卡,点击“新建”。
- 在“开始任务”下拉菜单中,选择“在启动时”。
- 点击“确定”。
- 配置操作:
- 转到“操作”选项卡,点击“新建”。
- 在“操作”下拉菜单中,选择“启动程序”。
- 在“程序/脚本”字段中,输入
powershell.exe
。 - 在“添加参数”字段中,输入
-File "C:\path\to\SendIPv6Address.ps1"
,将C:\path\to\SendIPv6Address.ps1
替换为实际脚本的路径。 - 点击“确定”。
- 配置条件和设置:
- 在“条件”选项卡中,取消勾选“只有在计算机使用交流电源时才启动此任务”。
- 在“设置”选项卡中,确保选中“如果任务失败,重新启动每”选项,并配置适当的重试次数和间隔。
- 保存任务:
- 点击“确定”保存任务。
步骤三:测试任务
- 在任务界面邮件点击运行,看有没有收到邮件,如果成功发送则重启测试。
- 重新启动计算机,确保任务在启动时运行,检查指定的邮箱,确认是否收到了包含IPv6地址的邮件。