Subnetting math trips up even experienced network engineers occasionally — converting a messy IP range into clean CIDR blocks, or double-checking a subnet mask by hand at 2 a.m. during an incident, is exactly the kind of tedious arithmetic I’d rather hand off to a tool. Netmask does exactly that, and it’s stuck around in Linux distributions for decades because it’s genuinely useful for both networking and security work.
What Is Netmask?
Netmask is a small command-line utility that takes IP address specifications — single addresses, ranges, or CIDR blocks — and converts them between different subnet representations: standard address/netmask pairs, CIDR notation, Cisco-style wildcard masks, ranges, and even hex, octal, or binary formats. It’s part of the standard toolset in Kali Linux and most Debian-based distributions.
How Netmask Works Internally
- Address range decomposition: When given an arbitrary IP range (e.g.,
192.168.1.10-192.168.1.50), Netmask doesn’t just report a rough mask — it decomposes the range into the minimal set of properly aligned CIDR blocks that exactly cover it, since a range that doesn’t fall on a power-of-two boundary can’t be expressed as a single CIDR block. - Bitwise operations: Under the hood, it’s doing straightforward bitwise AND/OR/NOT operations on 32-bit integers representing the addresses, which is why it can trivially emit the same subnet in binary, hex, or octal.
- DNS resolution support: Netmask can accept hostnames as input and resolve them before performing the calculation (this can be disabled with
-nfor speed or privacy).
Installation
# Debian/Ubuntu/Kali
sudo apt update && sudo apt install netmask -y
Verify:
$ netmask --help
This is netmask, an address netmask generation utility
Usage: netmask spec [spec ...]
-h, --help Print a summary of the options
-v, --version Print the version number
-d, --debug Print status/progress information
-s, --standard Output address/netmask pairs
-c, --cidr Output CIDR format address lists
-i, --cisco Output Cisco style address lists
-r, --range Output ip address ranges
-x, --hex Output address/netmask pairs in hex
-o, --octal Output address/netmask pairs in octal
-b, --binary Output address/netmask pairs in binary
-n, --nodns Disable DNS lookups for addresses
-f, --files Treat arguments as input files
Basic Syntax
netmask [options] spec [spec ...]
A spec can be:
- a single address (
192.168.1.1) - a CIDR block (
192.168.1.0/24) - a range using a colon (
192.168.1.10:192.168.1.50) - a mask pair (
192.168.1.0:255.255.255.0)
Core Usage Examples
Default CIDR-to-standard output
$ netmask 192.168.1.0/24
192.168.1.0/24
Standard address/netmask pair format
$ netmask -s 192.168.1.0/24
192.168.1.0/255.255.255.0
Converting a range into minimal CIDR blocks
$ netmask -c 192.168.1.10:192.168.1.50
192.168.1.10/31
192.168.1.12/30
192.168.1.16/28
192.168.1.32/28
192.168.1.48/31
192.168.1.50/32
This is exactly the kind of decomposition that’s tedious to do by hand — the range doesn’t align to a single power-of-two boundary, so Netmask breaks it into the six smallest CIDR blocks that together cover it precisely.
Range output from a CIDR block
$ netmask -r 192.168.1.10:192.168.1.50
192.168.1.10-192.168.1.11 (2)
192.168.1.12-192.168.1.15 (4)
192.168.1.16-192.168.1.31 (16)
192.168.1.32-192.168.1.47 (16)
192.168.1.48-192.168.1.49 (2)
192.168.1.50-192.168.1.50 (1)
Each line also shows the host count for that block in parentheses — useful for quickly sanity-checking subnet sizes.
Cisco-style wildcard mask (for ACLs)
$ netmask -i 192.168.1.0/24
192.168.1.0 0.0.0.255
This wildcard-mask format is exactly what you’d paste into a Cisco IOS access-list line.
Binary representation
$ netmask -b 192.168.1.0/24
11000000 10101000 00000001 00000000 / 11111111 11111111 11111111 00000000
Great for teaching or double-checking subnet boundaries bit by bit.
Disabling DNS resolution for speed
netmask -n 192.168.1.0/24
Batch processing from a file
netmask -f subnet_list.txt
Real-World Use Cases (Authorized Lab Environments Only)
1. Firewall and ACL rule preparation. Before writing Cisco IOS or iptables rules, converting an arbitrary IP range into clean CIDR blocks with netmask -c avoids manual subnetting errors that lead to overly broad (or accidentally too narrow) firewall rules.
2. Preparing scan target lists. When scoping a penetration test or vulnerability scan across an oddly-shaped IP range provided by a client, Netmask cleanly breaks it into CIDR blocks that Nmap or Masscan can consume directly.
3. Network documentation and IPAM cleanup. During network audits, Netmask helps normalize inconsistent subnet documentation (some engineers write ranges, others write masks, others write CIDR) into one consistent format for reporting.
4. Wildcard mask generation for legacy Cisco gear. Anyone who’s had to write an access-list by hand knows wildcard masks are the inverse of what you’d expect — Netmask’s -i flag removes that mental math entirely.
Workflow and Tool Integration
# Convert a client-provided scope range into CIDR blocks, then feed straight into Nmap
netmask -c 10.20.30.5:10.20.30.90 | awk '{print $1}' > scope_cidrs.txt
nmap -iL scope_cidrs.txt -sn
# Generate a Cisco wildcard mask for an ACL from a subnet definition
netmask -i 172.16.4.0/22
Performance Optimization
- Use
-nto skip DNS resolution when you’re only working with numeric IPs — this avoids unnecessary lookup latency, especially in scripts processing large batch files. - For very large batch conversions, process files (
-f) rather than passing hundreds of arguments on the command line, which avoids shell argument-length limits.
Troubleshooting Common Issues
| Symptom | Likely Cause | Fix |
|---|---|---|
| Unexpected number of CIDR blocks from a range | The range doesn’t align to power-of-two boundaries | This is expected behavior — Netmask always emits the minimal exact-covering set, not a single approximate block |
| Slow processing on many hostnames | DNS resolution per entry | Add -n if you’re already using numeric IPs, or resolve in bulk beforehand |
| Wrong wildcard mask expected in Cisco config | Confusing standard netmask with wildcard (inverse) mask | Always use -i specifically for Cisco ACL wildcard masks, not -s |
Best Practices and Common Mistakes
- Don’t confuse netmask and wildcard mask formats — Cisco ACLs need the inverse mask (
-i), while most other configs want the standard mask (-s). - Always double-check host counts printed alongside
-routput before applying to firewall rules — an off-by-one in scope can either miss hosts or expose unintended ones. - Batch process from files rather than typing dozens of ranges manually, to avoid transcription errors in security-relevant configurations.
- Combine with authorized scope documents — Netmask is a normalization tool, not a scoping tool; the actual IP ranges should always come from a signed authorization document during a security engagement.
Practical Lab Example
# Lab scenario: client provided you the range 10.10.10.5 to 10.10.10.130 as in-scope
netmask -c 10.10.10.5:10.10.10.130
# Output gives you the minimal CIDR blocks covering exactly that range
# Feed the result directly into a scan
netmask -c 10.10.10.5:10.10.10.130 | awk '{print $1}' > lab_scope.txt
nmap -iL lab_scope.txt -sn
FAQ
What’s the difference between a standard netmask and a Cisco wildcard mask? A standard netmask marks network bits with 1s and host bits with 0s (e.g., 255.255.255.0); a Cisco wildcard mask is the bitwise inverse (0.0.0.255), used in access-list and OSPF configuration.
Why does Netmask sometimes output multiple CIDR blocks for what looks like one range? CIDR notation can only express ranges that start on a proper power-of-two-aligned boundary. Arbitrary ranges get decomposed into the smallest set of valid CIDR blocks that exactly cover them.
Does Netmask modify my system’s network configuration? No — it’s purely a calculation/conversion utility. It doesn’t touch interfaces, routes, or firewall rules itself; you take its output and apply it wherever needed.
Can I use Netmask on IPv6 addresses? No — Netmask is IPv4-only. For IPv6 subnet math, tools like ipcalc (with IPv6 support) or Python’s ipaddress module are better suited.
Is Netmask useful outside of security work? Absolutely — it’s just as commonly used by network engineers for day-to-day subnetting, documentation, and ACL preparation, security context aside.
Summary
Netmask solves a small but persistently annoying problem: converting between the different ways humans and network devices express IP ranges. Whether you’re preparing a clean scan target list, writing a Cisco ACL, or just double-checking your own subnetting math before applying a firewall rule, it removes an entire category of manual arithmetic errors from the process.
References
- Man page:
man netmask - Package source (Debian): https://packages.debian.org/source/sid/netmask