Subnet Calculator

Subnet Calculator

Subnet-Calculator im Command Line Interface

Einfach die IP-Adresse in CIDR Notation per curl an die API schicken.

curl https://networkcalc.com/api/ip/10.0.1.15/27

Das Ergebnis ist eine Antwort in JSON:

{"status":"OK","meta":{"permalink":"https://networkcalc.com/subnet-calculator/10.0.1.15/27","next_address":"https://networkcalc.com/api/ip/10.0.1.16/27"},"address":{"cidr_notation":"10.0.1.15/27","subnet_bits":27,"subnet_mask":"255.255.255.224","wildcard_mask":"0.0.0.31","network_address":"10.0.1.0","broadcast_address":"10.0.1.31","assignable_hosts":30,"first_assignable_host":"10.0.1.1","last_assignable_host":"10.0.1.30"}}

Um damit jetzt etwas anfangen zu können, benötigen wir es in einer Datei:

curl https://networkcalc.com/api/ip/10.0.1.15/27 > ip.txt

Jetzt können wir mit jq die JSON Datei abfragen. Vorher natürlich noch jq per Homebrew installieren:

brew install jq

Danach können wir den JSON File parsen. Vorher können wir aber auch erstmal mit einem Online Parser spielen.

cat ip.txt | jq '.address.cidr_notation'

Um das zu verstehen benötigen wir die JSON Ausgabe “formatiert”.

Übrigens im Visual Studio geht das Formatieren von JSON mit alt+ cmd+ m bzw. alt + m.

{
    "status":"OK",
    "meta":{
        "permalink":"https://networkcalc.com/subnet-calculator/10.0.1.15/27",
        "next_address":"https://networkcalc.com/api/ip/10.0.1.16/27"
        },
    "address":{
        "cidr_notation":"10.0.1.15/27",
        "subnet_bits":27,
        "subnet_mask":"255.255.255.224",
        "wildcard_mask":"0.0.0.31",
        "network_address":"10.0.1.0",
        "broadcast_address":"10.0.1.31",
        "assignable_hosts":30,
        "first_assignable_host":"10.0.1.1",
        "last_assignable_host":"10.0.1.30"
        }
}

Da JSON wie XML hierarchisch auf gebaut ist gehen wir mit .address in den dritten Abschnitt (1. = .status, 2. = .meta, 3. = .address) und holen uns dort das Objekt .cidr_notation. Da wir das ja bereits kennen, weil wir das ja beim curl erfasst haben, wäre zum Beispiel die Subnetmaske interessant (die Bit kennen wir ja):

curl https://networkcalc.com/api/ip/10.1.101.0/28 > ip.txt 

cat ip.txt | jq '.address.cidr_notation'  
"10.1.101.0/28"
cat ip.txt | jq '.address.subnet_mask'                     
"255.255.255.240"
cat ip.txt | jq '.address.first_assignable_host'
"10.1.101.1"
cat ip.txt | jq '.address.last_assignable_host'
"10.1.101.14"

Das ganze geht auch mit Powershell etwas komfortabler.

(Invoke-RestMethod https://networkcalc.com/api/ip/10.0.1.15/27).address

Ausgabe der API:

PS /Users/thomas> (Invoke-RestMethod https://networkcalc.com/api/ip/10.0.1.15/27).address

cidr_notation         : 10.0.1.15/27
subnet_bits           : 27
subnet_mask           : 255.255.255.224
wildcard_mask         : 0.0.0.31
network_address       : 10.0.1.0
broadcast_address     : 10.0.1.31
assignable_hosts      : 30
first_assignable_host : 10.0.1.1
last_assignable_host  : 10.0.1.30