Skip to main content

LanCalc

CI PyPI Python

LanCalc is a desktop application built with PyQt5, designed to calculate network configurations for Windows, macOS, and Linux systems.

image

Download

It provides a user-friendly interface to compute essential network parameters such as network address, broadcast address, the minimum and maximum host addresses, and the number of hosts within a given subnet.

Support IPv4 address formats, subnet masks and prefixes. This tool is particularly useful for network administrators and IT professionals who require quick calculations of network parameters.

Quick Start

Installation

Python 3.9+ is required.

  • Default (with GUI):
pip3 install lancalc
  • CLI-only / headless (avoid installing PyQt5):
# Install package without dependencies, then only required CLI deps
pip3 install --no-deps lancalc
pip3 install -r requirements.txt
  • Install without GUI dependencies:
# Install with nogui extras (excludes PyQt5)
pip3 install 'lancalc[nogui]'
  • Install from GitHub:
# With GUI (default)
pip3 install 'git+https://github.com/wachawo/lancalc.git'

# CLI-only / headless
pip3 install --no-deps 'git+https://github.com/wachawo/lancalc.git'
pip3 install -r requirements.txt

# Without GUI dependencies
pip3 install 'git+https://github.com/wachawo/lancalc.git#egg=lancalc[nogui]'

If pip is missing:

curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
python3 /tmp/get-pip.py

If the lancalc command is not found after installation, add the local packages path to PATH:

export PATH="$HOME/.local/bin:$PATH"

To permanently add to PATH, add this line to your ~/.bashrc or ~/.zshrc:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Notes:

  • On Linux, PyQt5 may require system Qt libraries (xcb plugin). If GUI fails to start, ensure a desktop environment is available and try installing system packages (e.g. Debian/Ubuntu: sudo apt install python3-pyqt5), or use the CLI-only steps above.
  • In CI/headless environments, prefer the CLI-only steps above to skip GUI dependencies.

Running the Application

GUI Mode

After installation (default with GUI), launch the application with the command:

lancalc

LanCalc auto-detects the environment. If GUI dependencies are unavailable or you are in a headless session, the launcher falls back to CLI help. In such cases, use the CLI examples below.

CLI Mode

LanCalc also supports command-line interface for automation and scripting:

# Basic usage
lancalc 192.168.1.1/24

# JSON output for parsing
lancalc 192.168.1.1/24 --json

# Examples
lancalc 10.0.0.1/8
lancalc 172.16.0.1/16
lancalc 192.168.1.100/31  # Point-to-point network
lancalc 192.168.1.1/32    # Single host

You can also run via module:

python3 -m lancalc 192.168.1.1/24 --json

Output Format

Text mode (default):

Network: 192.168.1.0
Prefix: /24
Netmask: 255.255.255.0
Broadcast: 192.168.1.255
Hostmin: 192.168.1.1
Hostmax: 192.168.1.254
Hosts: 254

JSON mode (--json):

{
  "network": "192.168.1.0",
  "prefix": "/24",
  "netmask": "255.255.255.0",
  "broadcast": "192.168.1.255",
  "hostmin": "192.168.1.1",
  "hostmax": "192.168.1.254",
  "hosts": "254",
  "comment": ""
}

Uninstall

pip3 uninstall -y lancalc

That's it! The application will start and automatically detect your current network settings.

For Developers

Prerequisites

Python 3.9+ is required. GUI development requires PyQt5 (installed by default).

  • Production (CLI only):
pip3 install -r requirements.txt
  • Editable install with GUI (default):
pip3 install -e .
  • Editable install without GUI:
pip3 install --no-deps -e .
pip3 install -r requirements.txt
  • Full dev setup (with GUI):
pip3 install -e '.[dev]'
  • Dev without GUI:
pip3 install --no-deps -e .
pip3 install -r requirements.txt
pip3 install pytest pytest-qt pre-commit flake8
  • Reinstall
pip3 install -e . --force-reinstall

Installation for Development

Clone the repository and install in development mode:

git clone https://github.com/wachawo/lancalc.git

Running from Source

# GUI (requires PyQt5)
python3 lancalc/main.py

# CLI
python3 -m lancalc 192.168.1.1/24

Development Tools

pip3 install pre-commit flake8 pytest pytest-qt
pre-commit install
pre-commit run --all-files
pre-commit autoupdate

Running Tests

pytest -v

Test Build

pip3 install -e .
~/.local/bin/lancalc

Test Build Linux

pip3 install git+file://$(pwd) 
export PATH="$HOME/.local/bin:$PATH" 
lancalc

Test Build Windows

pip3 install "git+file://$(Get-Location)"
lancalc

License

Distributed under the MIT License. See LICENSE for more information.

Contact

GitHub Telegram

Notes

A /31 mask allows the use of 2 addresses. The first will be the network address, the last the broadcast address, and for connecting hosts we use these same addresses. Limitations when using a /31 prefix: Protocols that use L3 broadcast stop working. In fact, at present there are almost no protocols left that rely on L3 broadcast in their operation. The main currently relevant protocols, such as OSPF, IS-IS, EIGRP, and BGP, use multicast or unicast addresses instead. This limitation can even be seen as an advantage, because it increases resistance to DoS attacks based on broadcast traffic distribution. But not all devices support /31 prefixes. On Juniper and Cisco devices, you can safely use a /31 mask, although Cisco will issue a warning (% Warning: use /31 mask on non point-to-point interface cautiously). ZyXEL, however, does not allow you to select a /31 mask at all. As a result, there are additional limitations in network operation — from using equipment of different manufacturers to even using equipment from the same vendor but with different firmware versions. If you are not concerned by the above limitations, you can confidently save addresses by using the /31 prefix.

The use of the /31 prefix is described in detail in RFC 3021 — Using 31-Bit Prefixes on IPv4 Point-to-Point Links.

Special IPv4 Ranges and Cases

Special Network Types

  • /31 networks: Show 2* in Hosts field - both addresses are usable (RFC 3021)
  • /32 networks: Show 1* in Hosts field - single host network
  • The asterisk (*) indicates special network types where all addresses are usable

Special IPv4 Address Ranges

LanCalc automatically detects and handles special IPv4 address ranges according to RFC specifications. For these ranges, host-related fields show "*" and a message field indicates the range type with RFC reference.

Supported Special Ranges

Range Type RFC Description
127.0.0.0/8 Loopback RFC 3330 Loopback addresses - not routable on the Internet
169.254.0.0/16 Link-local RFC 3927 Link-local addresses - not routable
224.0.0.0/4 Multicast RFC 5771 Multicast addresses - not for host addressing
0.0.0.0/8 Unspecified RFC 1122 Unspecified addresses - not for host addressing
255.255.255.255/32 Broadcast RFC 919 Limited broadcast address - not for host addressing

Special Range Behavior

When you enter an address from a special range:

CLI Text Mode:

lancalc 127.0.0.1/8
Network: 127.0.0.0
Prefix: /8
Netmask: 255.0.0.0
Broadcast: *
Hostmin: 127.0.0.1
Hostmax: 127.255.255.254
Hosts: 16777214
Comment: RFC 3330 Loopback (https://github.com/wachawo/lancalc/blob/main/docs/RFC.md#rfc-3330---loopback-addresses)

CLI JSON Mode:

lancalc 224.0.0.1/4 --json
{
  "network": "224.0.0.0",
  "prefix": "/4",
  "netmask": "240.0.0.0",
  "broadcast": "*",
  "hostmin": "*",
  "hostmax": "*",
  "hosts": "*",
  "comment": "RFC 5771 Multicast (https://github.com/wachawo/lancalc/blob/main/docs/RFC.md#rfc-5771---multicast-addresses)"
}

GUI Mode:

  • Host fields (Hostmin, Hostmax, Broadcast, Hosts) show "*"
  • Status bar displays the special range message instead of version
  • No special styling or warnings needed

JSON Fields

The JSON output includes the following fields:

  • comment: Description and RFC reference for special ranges (empty for normal unicast addresses)
  • hosts: Number of available host addresses in the specified subnet

These fields are always present, making the JSON output format consistent regardless of address type.

Usage

Command Line Interface

# Basic subnet calculation
lancalc 192.168.1.1/24

# JSON output
lancalc 192.168.1.1/24 --json

# Show internal/private IP address
lancalc --internal
lancalc -i

# Show external/public IP address
lancalc --external
lancalc -e

# Use multiple info flags simultaneously
lancalc -i -e
lancalc -i -e --json

# Show version
lancalc --version

Examples

Basic calculation:

$ lancalc 192.168.1.1/24
Network: 192.168.1.0
Prefix: /24
Netmask: 255.255.255.0
Broadcast: 192.168.1.255
Hostmin: 192.168.1.1
Hostmax: 192.168.1.254
Hosts: 254

JSON output:

$ lancalc 192.168.1.1/24 --json
{
  "network": "192.168.1.0",
  "prefix": "/24",
  "netmask": "255.255.255.0",
  "broadcast": "192.168.1.255",
  "hostmin": "192.168.1.1",
  "hostmax": "192.168.1.254",
  "hosts": "254"
}

Interface information:

$ lancalc -i
Address: 10.16.69.146
Prefix: /24

$ lancalc -i --json
{"address": "10.16.69.146", "prefix": "/24"}

External IP detection:

$ lancalc -e
External IP: 216.66.18.3

$ lancalc -e --json
{"external_ip": "216.66.18.3"}

Multiple info flags:

$ lancalc -i -e
Address: 10.16.69.146
Prefix: /24

External IP: 216.66.18.3

$ lancalc -i -e --json
{"address": "10.16.69.146", "prefix": "/24"}

{"external_ip": "216.66.18.3"}

Metadata

Release files for lancalc 0.1.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lancalc 0.1.11
File Size Uploaded
lancalc-0.1.11.tar.gz 29.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lancalc 0.1.11
File Interpreter ABI Platform
lancalc-0.1.11-py3-none-any.whl Python 3 none any Details

Total release size: 50.8 kB

Release files / lancalc-0.1.11.tar.gz

Download URL lancalc-0.1.11.tar.gz
Size 29.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a6212cec6c92fc82a86f355455bf5bfc6463e7199268fb1dee410b36fb864c70
BLAKE2b-256 checksum
How to use checksums
8d566fe3cf65841dfd0cfd4716f214616c3ec3e7c2814f7c1a854a5130ff3622
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2025.

Transparency log

Release files / lancalc-0.1.11-py3-none-any.whl

Download URL lancalc-0.1.11-py3-none-any.whl
Size 21.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
872b57bf623b81903572758a5ed6fad88d7cfaa527a40536110e2bff29aafd2f
BLAKE2b-256 checksum
How to use checksums
04c4994b2205792eabc42cf376a1aa31bc12a02ab82110dcc3c55c94b10a180d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.11 This release

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page