这就是我目前正在尝试的方法,将内部 LAN IPv4/IPv6 地址获取到每个双 IP 堆栈变量中:
# This is a one liner(-ish) to get my LAN_IPv4 and IPv6 addresses:
# Begin
$ipv4 = Get-NetIPAddress -AddressFamily IPv4 -InterfaceIndex $(Get-NetConnectionProfile |
Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
$ipv6 = Get-NetIPAddress -AddressFamily IPv6 -InterfaceIndex $(Get-NetConnectionProfile |
Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
echo IPv4: $ipv4
echo IPv6: $ipv6
# Will be using this for external WAN IP (Below)
# [System.Net.Dns]::GetHostEntry('my.ddnshost.tld')
我想获取 WAN IPv4 和 IPv6 地址的唯一方法是使用 DNS 主机记录“A”和“AAAA”
Working Local IPv4 and IPv6 address
#BEGIN
$ipv4 = Get-NetIPAddress -AddressFamily IPv4 -InterfaceIndex $(Get-NetConnectionProfile |
Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
$ipv6 = Get-NetIPAddress -AddressFamily IPv6 -InterfaceIndex $(Get-NetConnectionProfile |
Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
#Use DNS to Resolve WAN_IPv4 and WAN_IPv6 via [Systems.Net.Dns]
$ddns_ipv4 = ([System.Net.DNS]::GetHostAddresses('ipv4.ddns.tld') |
Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString
$ddns_ipv6 = ([System.Net.DNS]::GetHostAddresses('ipv6zone.ddns.tld') |
Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString
#$ddns_ipv4 = [System.Net.Dns]::GetHostEntry('my.ipv4zone.ddns.tld')
echo LAN-IPv4:" "$ipv4
echo WAN-IPv4:" "$ddns_ipv4
echo LAN-IPv6:" "$ipv6
echo WAN-IPv6:" "$ddns_ipv6
输出为:
LAN-IPv4: 172.16.12.10
WAN-IPv4: 151.14.98.172
LAN-IPv6: fe80::325:be11:5aaa:2faa%7 2a00:22c3:113e:31aa:ffff:::31b3
WAN-IPv6: 2a00:22c3:113e:31aa:ffff:::31b3
如果有更好的方法可以在 Powershell 中使用变量内部获取此信息,那将非常有帮助,这样会更简单,并且不依赖于我的脚本从动态 DNS 提供商进行 ping / DNS 递归查找。
旁注:我一直在玩 cURL(对于 WAN 端查找,在我的 DynDNS A 和 AAAA 记录上使用相同的方法),但到目前为止,还没有完全设法将curl 的输出传输回 PowerShell $IP_Var 解决方案还没有让我陶醉。
-- 必须有一种简单的方法来实现 LAN/WAN 端 IPv4/6 查找,所有这些查找都在 Powershell 内完成,不必依赖 DDNS,而是直接从网络接口/路由表,例如查询 nbtstat -an 或达到这个效果的东西...... 欢迎任何建议。谢谢!
```lang-powershell-5.1
Working Local IPv4 and IPv6 address
#BEGIN
$ipv4 = Get-NetIPAddress -AddressFamily IPv4 -InterfaceIndex $(Get-NetConnectionProfile |
Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
$ipv6 = Get-NetIPAddress -AddressFamily IPv6 -InterfaceIndex $(Get-NetConnectionProfile |
Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
#Use DNS to Resolve WAN_IPv4 and WAN_IPv6 via [Systems.Net.Dns]
$ddns_ipv4 = ([System.Net.DNS]::GetHostAddresses('ipv4.ddns.tld') |
Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString
$ddns_ipv6 = ([System.Net.DNS]::GetHostAddresses('ipv6zone.ddns.tld') |
Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString
#$ddns_ipv4 = [System.Net.Dns]::GetHostEntry('my.ipv4zone.ddns.tld')
echo LAN-IPv4:" "$ipv4
echo WAN-IPv4:" "$ddns_ipv4
echo LAN-IPv6:" "$ipv6
echo WAN-IPv6:" "$ddns_ipv6
输出为:
LAN-IPv4: 172.16.12.10
WAN-IPv4: 151.14.98.172
LAN-IPv6: fe80::325:be11:5aaa:2faa%7 2a00:22c3:113e:31aa:ffff:::31b3
WAN-IPv6: 2a00:22c3:113e:31aa:ffff:::31b3
没有办法。为什么?因为只有路由器知道 WAN IP 地址,并且路由器实际上是您的 DNS 服务器,所以它永远不需要通知您的计算机 WAN IP 地址是什么。 WAN IP 地址超出了您的本地计算机“本地”需要了解的范围。
现在这是一个奇怪的脚本来获取你需要的东西。只是疯狂地使用它。
Add-Type -AssemblyName System.Windows.Forms
# Retrieve WAN IP addresses
$wanIPv4 = Invoke-RestMethod -Uri 'http://api.ipify.org'
$wanIPv6 = Invoke-RestMethod -Uri 'http://api64.ipify.org'
# Create the form
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "WAN IP Addresses"
$Form.Size = New-Object System.Drawing.Size(300,200)
$Form.StartPosition = "CenterScreen"
# Create the label for IPv4
$LabelIPv4 = New-Object System.Windows.Forms.Label
$LabelIPv4.Location = New-Object System.Drawing.Point(10,10)
$LabelIPv4.Size = New-Object System.Drawing.Size(280,20)
$LabelIPv4.Text = "WAN IPv4: $wanIPv4"
# Create the label for IPv6
$LabelIPv6 = New-Object System.Windows.Forms.Label
$LabelIPv6.Location = New-Object System.Drawing.Point(10,40)
$LabelIPv6.Size = New-Object System.Drawing.Size(280,20)
$LabelIPv6.Text = "WAN IPv6: $wanIPv6"
# Add the labels to the form
$Form.Controls.Add($LabelIPv4)
$Form.Controls.Add($LabelIPv6)
# Show the form
$Form.ShowDialog()
# RUN: powershell -ExecutionPolicy ByPass -File hello.ps1