Powershell 子网和IP地址与0';s

Powershell 子网和IP地址与0';s,powershell,binary,ipv4,subnet,Powershell,Binary,Ipv4,Subnet,所以我有一个脚本,它将IPv4地址和子网地址进行and运算。它没有检查它是否是有效输入(我应该添加),而是将输入转换为二进制 if ($readInput -match "y"){ $readIP = read-host "Please input an IPv4 address to be ANDed " # need to add subnet mask later. $readSub = read-host "Please input the Subnet M

所以我有一个脚本,它将IPv4地址和子网地址进行and运算。它没有检查它是否是有效输入(我应该添加),而是将输入转换为二进制

if ($readInput -match "y"){
    $readIP = read-host "Please input an IPv4 address to be ANDed " 

    # need to add subnet mask later. 
    $readSub = read-host "Please input the Subnet Mask "


    #need to delimite '.'
    #$readIP.split "."
    #$readSub.split "."

    #need to join them

    #convert IPv4 address to binary, period seperated at each octet. (input ip, base 2)
    $binIP = [convert]::ToString($readIP,2)
    write-host "$binIP" -backgroundcolor "white" -foregroundcolor "black"
    ## need to have two 32 element array that compares each 1 and 0. loop through each one with a counter and compare them with
    ## conditional if statements

    #conditional statements for /cider notion to equal a binary number (mask, base 2)
    $binSub = [convert]::ToString($readSub,2)
    write-host "$binSub" -backgroundcolor "white" -foregroundcolor "black"
}
输入为:

19216823
2552552550
输出为:

1001001010011100110110111
10011000001001001101110001100110

我是否必须在IP地址的末尾添加7个尾随的0以执行正确的ANDing

使用
[IPAddress]
类通常更容易。例如:

$ip = [IPAddress] "192.168.32.76"
$networkMask = [IPAddress] "255.255.255.0"
$networkID = [IPAddress] ($ip.Address -band $networkMask.Address)
$networkID.IPAddressToString  # outputs "192.168.32.0"
如果要计算网络掩码字符串中的位,可以使用如下函数:

function ConvertTo-IPv4MaskBits {
  param(
    [parameter(Mandatory=$true)]
    [String] $MaskString
  )
  $mask = ([IPAddress] $MaskString).Address
  for ( $bitCount = 0; $mask -ne 0; $bitCount++ ) {
    $mask = $mask -band ($mask - 1)
  }
  $bitCount
}
此函数假定格式正确的网络掩码ID

我不久前写的一篇文章提供了完整的总结和更多功能:


上周我发布了这篇关于编码和二进制的沉思。你是另一个可能和问题海报有同样误解的人。“#将IPv4地址转换为二进制;$binIP=[convert]::ToString($readIP,2)”-这就是它所做的,但在完全错误的级别上,您没有按照IP和子网的工作方式将“转换为二进制”,而是转换为“一个ascii字符字符串,用1和0表示二进制,并使用8倍的空间”这些不是
192.168.2.3
255.255.255.0
的正确十进制表示形式,除非出于某种原因有意在该级别执行此操作,否则您需要的是32位数组、4个字节、没有单独的八位字节和位操作
-band
@TessellatingHeckler-Hmm-read。我从来没有想过二进制在这个意义上。你有什么建议?@MathiasR.Jessen正确,这就是为什么定界符代码在那里那么我的计划是在最后加入他们。你让我大吃一惊。我不知道有一个IPaddress课程。我将阅读该链接,感谢您的反馈!当我读你的文章时,你让我大吃一惊。我是PowerShell的初学者,所以这是一个惊人的信息。我仍在努力掌握Powershell中函数的概念,并保持更简单的布局。你让我大开眼界,我需要学习更多关于类和函数的知识。太好了,很高兴它很有用。比尔,这太棒了!我玩得很开心!我画了一张图,正在比较网络地址,以确定两个地址是否在同一个网络中。以便于故障排除。