gpt4 book ai didi

PowerShell:将 IP 地址转换为子网

转载 作者:行者123 更新时间:2023-12-02 23:37:39 25 4
gpt4 key购买 nike

我能够使用 ff: 提取计算机的主机 IP 地址:

$IPAddr = Get-NetIPConfiguration -InterfaceAlias "Ethernet" | select IPv4Address 

如何根据子网掩码获取对应的子网地址(如/24/20/16等)?

所以,如果主机IP地址为192.168.100.45,子网掩码为/24255.255.255.0,则代码应该得到192.168.100.0的子网地址值。

最佳答案

您可以使用 IPAddress 类。示例:

[IPAddress] (([IPAddress] "192.168.100.45").Address -band ([IPAddress] "255.255.255.0").Address)

这将输出一个 IPAddress 对象,其中包含 IP 地址 192.168.100.0

要将位计数转换为等效的位掩码字符串,可以使用如下函数:

function ConvertTo-IPv4MaskString {
param(
[Parameter(Mandatory = $true)]
[ValidateRange(0, 32)]
[Int] $MaskBits
)
$mask = ([Math]::Pow(2, $MaskBits) - 1) * [Math]::Pow(2, (32 - $MaskBits))
$bytes = [BitConverter]::GetBytes([UInt32] $mask)
(($bytes.Count - 1)..0 | ForEach-Object { [String] $bytes[$_] }) -join "."
}

使用这个函数,你可以写:

[IPAddress] (([IPAddress] "192.168.100.45").Address -band ([IPAddress] (ConvertTo-IPv4MaskString 24)).Address)

这会输出一个 IPAddress 对象,其中包含 IP 地址 192.168.100.0

其他几个函数可能有用:

function Test-IPv4MaskString {
param(
[Parameter(Mandatory = $true)]
[String] $MaskString
)
$validBytes = '0|128|192|224|240|248|252|254|255'
$MaskString -match `
('^((({0})\.0\.0\.0)|' -f $validBytes) +
('(255\.({0})\.0\.0)|' -f $validBytes) +
('(255\.255\.({0})\.0)|' -f $validBytes) +
('(255\.255\.255\.({0})))$' -f $validBytes)
}

function ConvertTo-IPv4MaskBits {
param(
[parameter(Mandatory = $true)]
[ValidateScript({Test-IPv4MaskString $_})]
[String] $MaskString
)
$mask = ([IPAddress] $MaskString).Address
for ( $bitCount = 0; $mask -ne 0; $bitCount++ ) {
$mask = $mask -band ($mask - 1)
}
$bitCount
}

ConvertTo-IPv4MaskBitsConvertTo-IPv4MaskString 的倒数,并使用 Test-IPv4MaskString 来验证掩码是否为有效的 IPv4 掩码。

我不久前写的一篇文章中提供了更多详细信息:

IT Pro Today - Working with IPv4 Addresses in PowerShell

关于PowerShell:将 IP 地址转换为子网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51296568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com