2026-02-24 19:28:01 +00:00
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
"name": "Network Address from Host IP",
|
|
|
|
|
"description": r"""Calculates the network address from a host IP/MASK notation.
|
|
|
|
|
|
|
|
|
|
Given a host IP address and subnet mask in CIDR notation (e.g., 192.168.1.100/24),
|
|
|
|
|
this formula extracts the network address (e.g., 192.168.1.0/24).
|
|
|
|
|
|
|
|
|
|
Where:
|
|
|
|
|
- Host IP/MASK: IP address with CIDR subnet mask (e.g., 192.168.1.100/24)
|
|
|
|
|
- Network: The resulting network address in IP/MASK format (e.g., 192.168.1.0/24)
|
|
|
|
|
|
|
|
|
|
The network address is calculated by applying the subnet mask to zero out the host bits.""",
|
|
|
|
|
"input": [
|
|
|
|
|
{"name": "hostIP", "unit": "string"}
|
|
|
|
|
],
|
|
|
|
|
"output": {"name": "network", "unit": "string"},
|
2026-03-08 20:20:31 +00:00
|
|
|
"d4rtCode": r"""
|
2026-03-09 10:00:35 +00:00
|
|
|
hostIP = hostIP.toString();
|
2026-03-08 20:20:31 +00:00
|
|
|
var parts = hostIP.split('/');
|
2026-03-09 10:00:35 +00:00
|
|
|
if( parts.length != 2 ) {
|
|
|
|
|
signal('Invalid input format. Expected format: IP/MASK');
|
|
|
|
|
}
|
2026-03-08 20:20:31 +00:00
|
|
|
var ip = parts[0];
|
2026-03-09 10:00:35 +00:00
|
|
|
var mask = int.tryParse(parts[1]);
|
|
|
|
|
if( mask == null || mask < 0 || mask > 32 ) {
|
|
|
|
|
signal('Invalid subnet mask. Must be an integer between 0 and 32.');
|
|
|
|
|
}
|
|
|
|
|
var octets = ip.split('.').map((e) => int.tryParse(e)).toList();
|
|
|
|
|
if( octets.length != 4 ) {
|
|
|
|
|
signal('Invalid IP address format. Expected 4 octets separated by dots.');
|
|
|
|
|
}
|
2026-03-08 20:20:31 +00:00
|
|
|
var hostBits = 32 - mask;
|
|
|
|
|
var shiftAmount = hostBits;
|
|
|
|
|
var networkValue = 0;
|
|
|
|
|
for (var i = 0; i < 4; i++) {
|
2026-03-09 10:00:35 +00:00
|
|
|
if (octets[i] == null || octets[i] < 0 || octets[i] > 255) {
|
|
|
|
|
signal('Invalid IP address. Each octet must be between 0 and 255.');
|
|
|
|
|
}
|
2026-03-08 20:20:31 +00:00
|
|
|
networkValue = (networkValue << 8) | octets[i];
|
|
|
|
|
}
|
|
|
|
|
networkValue = (networkValue >> shiftAmount) << shiftAmount;
|
|
|
|
|
var networkOctets = [];
|
|
|
|
|
for (var i = 0; i < 4; i++) {
|
|
|
|
|
networkOctets.insert(0, networkValue & 0xFF);
|
|
|
|
|
networkValue = networkValue >> 8;
|
|
|
|
|
}
|
|
|
|
|
network = networkOctets.join('.') + '/' + mask.toString();
|
|
|
|
|
""",
|
2026-02-24 19:28:01 +00:00
|
|
|
"tags": ["networking", "ip", "subnetting", "cidr", "network"]
|
|
|
|
|
}
|
|
|
|
|
]
|