-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGet-IPv4Network.ps1
40 lines (38 loc) · 1.42 KB
/
Get-IPv4Network.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Function Get-IPv4Network {
Param (
$ip = '192.168.1.1/24'
,
$mask
,
$cidr
)
if ( $ip -match '/' ) {
$ipParts = $ip -split '/'
$ip = $ipParts[0]
$cidr = $ipParts[1]
}
if ( ( [string]::IsNullOrEmpty( $mask ) ) -and ( [string]::IsNullOrEmpty( $cidr ) ) ) {
$cidr = 24
}
$ipAddr = [Net.IPAddress]::Parse($ip)
if ( $cidr ) {
$maskaddr = [Net.IPAddress]::Parse( (Convert-INT64-toIP -int ([convert]::ToInt64(("1"*$cidr+"0"*(32-$cidr)),2))))
$mask = $maskaddr.IPAddressToString
}
else {
$maskaddr = [Net.IPAddress]::Parse($mask)
$cidr = get-IPv4CIDR -subnetmask $mask
}
$NetworkAddr = new-object net.ipaddress ($maskaddr.address -band $ipaddr.address)
$BroadcastAddr = new-object net.ipaddress (([system.net.ipaddress]::parse("255.255.255.255").address -bxor $maskaddr.address -bor $networkaddr.address ) )
$StartAddr = get-IPV4CalculatedAddress -IPAddress $networkaddr.IPAddressToString -Add 1
$EndAddr = get-IPV4CalculatedAddress -IPAddress $broadcastaddr.IPAddressToString -Add -1
New-Object -TypeName PSObject -Property @{
Network = $networkaddr
BroadCast = $broadcastaddr
Start = $startaddr
End = $EndAddr
Mask = $mask
CIDR = $cidr
} | Select-Object Network, Start, End, BroadCast, Mask, CIDR
}