Posted to tcl by kbk at Mon Dec 02 13:50:45 GMT 2013view raw

  1. set spec 192.168.1.0/28
  2. regexp {(\d+)[.](\d+)[.](\d+)[.](\d+)/(\d+)} $spec -> b0 b1 b2 b3 size
  3. set quad [expr {($b0 << 24) | ($b1 << 16) | ($b2 << 8) | $b3}]
  4. for {set i 0} {$i < (1<<(32-$size))} {incr i} {
  5. set q2 [expr {$quad + $i}]
  6. set result [expr {$q2 & 0xff}]
  7. for {set j 0} {$j < 3} {incr j} {
  8. set q2 [expr {$q2 >> 8}]
  9. set result [expr {$q2 & 0xff}].$result
  10. }
  11. puts $result
  12. }
  13.