#!/bin/sh # the next line restarts using tclsh \ exec tclsh "$0" "$@" proc getIp {s} { set l [split $s .] set n1 [expr {[lindex $l 0] << 24}] set n2 [expr {[lindex $l 1] << 16}] set n3 [expr {[lindex $l 2] << 8}] set n4 [lindex $l 3] return [expr {$n1 | $n2 | $n3 | $n4}] } proc getDottedIp {ip} { set n1 [expr {($ip >> 24) & 0xff}] set n2 [expr {($ip >> 16) & 0xff}] set n3 [expr {($ip >> 8) & 0xff}] set n4 [expr {$ip & 0xff}] return "$n1.$n2.$n3.$n4" } if {$argc < 2} { puts "usage: getsubnet " exit 0 } if {! [regexp {^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$} [lindex $argv 0]]} { puts "error: invalid host format" exit 1 } if {! [regexp {^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$} [lindex $argv 1]]} { puts "error: invalid mask format" exit 1 } set ip [getIp [lindex $argv 0]] set mask [getIp [lindex $argv 1]] puts [getDottedIp [expr {$ip & $mask}]] .