📄 getdip.tcl
字号:
set runTimes 0
set ErrInput 0
set FIP ""
#FIP is the first IP address
set SIP ""
#SIP is the second IP address
wm title . DecomposeIP
label .tip -text "IP Address:"
entry .ip -width 20 -textvariable IP
label .tmask -text "Mask Length:"
entry .mask -width 4 -textvariable MASK
button .run -text Run -command {Run}
button .exit -text Exit -command exit
pack .tip .ip .tmask .mask -side top -padx 55 -pady 3
pack .exit .run -side right -padx 5 -pady 5
#puts stdout $runTimes
proc Run {} {
global runTimes
global IP
global MASK
global FIP
global SIP
incr runTimes
if {$runTimes==1} {
GetIP $IP $MASK
} else {
destroy .fip
destroy .sip
GetIP $IP $MASK
}
}
proc GetIP {IP MASK} {
global ErrInput
set list [ split $IP .]
set a [lindex $list 0]
set b [lindex $list 1]
set c [lindex $list 2]
set d [lindex $list 3]
set e [lindex $list 4]
if {$a>0 && $a <224 && $b>=0 && $b<256 && $c>=0 && $c<256 && $d>0 && $d<256 && $e=="" && $MASK>=8 && $MASK<32} {
if {$MASK>=24} {
Mask24 $a $b $c $d $MASK
} elseif {$MASK<24 && $MASK>=16} {
if {$a<192} {
Mask16 $a $b $c $d $MASK
} else {
incr ErrInput
label .fip -text "Error Input,try again!"
pack .fip -side top -padx 5 -pady 5
#掩码错误的提示信息
}
} else {
if {$a<127} {
Mask8 $a $b $c $d $MASK
} else {
incr ErrInput
label .fip -text "Error Input,try again!"
pack .fip -side top -padx 5 -pady 5
#mask is error
}
}
} else {
incr ErrInput
label .fip -text "Error Input,try again!"
pack .fip -side top -padx 5 -pady 5
#输入错误的提示信息
}
}
proc Mask24 {a b c d MASK} {
global ErrInput
if {$ErrInput!=0} {
destroy .fip
}
if {$MASK==24} {
set A $a
set B $b
set C $c
set D $d
set D1 0
set D2 255
set result1 [format "Subnet address: %s.%s.%s.%s" $A $B $C $D1]
set result2 [format "Broadcast address:%s.%s.%s.%s" $A $B $C $D2]
label .fip -text "$result1"
label .sip -text "$result2"
pack .fip .sip -side top -padx 5 -pady 5
} else {
# puts stdout "test"
set A $a
set B $b
set C $c
set D $d
set D1 0
set D2 255
set MASK [expr 32-$MASK]
set MidSUM [expr pow(2,$MASK)]
set MidSUM [split $MidSUM .]
set MidSUM [lindex $MidSUM 0]
#算出中间值,用来比较数据
# for {set i 0} {$i<[expr [expr pow(2,[expr $MASK+8])]-$MASK]} {incr i}
for {set i 0} {$i<[expr pow(2,[expr 8-$MASK])]} {incr i} {
if {$D>=[expr $i*$MidSUM] && $D<=[expr $i*$MidSUM+$MidSUM]} {
# puts stdout $i*$MidSUM
set D1 [expr $i*$MidSUM]
set D2 [expr $i*$MidSUM+$MidSUM-1]
}
}
set result1 [format "Subnet address: %s.%s.%s.%s" $A $B $C $D1]
set result2 [format "Broadcast address:%s.%s.%s.%s" $A $B $C $D2]
label .fip -text "$result1"
label .sip -text "$result2"
pack .fip .sip -side top -padx 5 -pady 5
}
}
proc Mask16 {a b c d MASK} {
global ErrInput
if {$ErrInput!=0} {
destroy .fip
}
if {$MASK==16} {
set A $a
set B $b
set C $c
set D $d
set C1 0
set C2 255
set D1 0
set D2 255
set result1 [format "Subnet address: %s.%s.%s.%s" $A $B $C1 $D1]
set result2 [format "Broadcast address:%s.%s.%s.%s" $A $B $C2 $D2]
label .fip -text "$result1"
label .sip -text "$result2"
pack .fip .sip -side top -padx 5 -pady 5
} else {
set A $a
set B $b
set C $c
set D $d
set C1 0
set C2 255
set D1 0
set D2 255
set MASK [expr 24-$MASK]
set MidSUM [expr pow(2,$MASK)]
set MidSUM [split $MidSUM .]
set MidSUM [lindex $MidSUM 0]
#算出中间值,用来比较数据
for {set i 0} {$i<[expr pow(2,[expr 8-$MASK])]} {incr i} {
if {$C>=[expr $i*$MidSUM] && $C<=[expr $i*$MidSUM+$MidSUM]} {
set C1 [expr $i*$MidSUM]
set C2 [expr $i*$MidSUM+$MidSUM-1]
}
}
set result1 [format "Subnet address: %s.%s.%s.%s" $A $B $C1 $D1]
set result2 [format "Broadcast address:%s.%s.%s.%s" $A $B $C2 $D2]
label .fip -text "$result1"
label .sip -text "$result2"
pack .fip .sip -side top -padx 5 -pady 5
}
}
proc Mask8 {a b c d MASK} {
global ErrInput
if {$ErrInput!=0} {
destroy .fip
}
if {$MASK<16 && $MASK>=8} {
if {$MASK==8} {
set A $a
set B $b
set B1 0
set B2 255
set C $c
set C1 0
set C2 255
set D $d
set D1 0
set D2 255
set result1 [format "Subnet address: %s.%s.%s.%s" $A $B1 $C1 $D1]
set result2 [format "Broadcast address:%s.%s.%s.%s" $A $B2 $C2 $D2]
label .fip -text "$result1"
label .sip -text "$result2"
pack .fip .sip -side top -padx 5 -pady 5
} else {
set A $a
set B $b
set C $c
set D $d
set B1 0
set B2 255
set C1 0
set C2 255
set D1 0
set D2 255
set MASK [expr 16-$MASK]
set MidSUM [expr pow(2,$MASK)]
set MidSUM [split $MidSUM .]
set MidSUM [lindex $MidSUM 0]
#算出中间值,用来比较数据
for {set i 0} {$i<[expr pow(2,[expr 8-$MASK])]} {incr i} {
if {$B>=[expr $i*$MidSUM] && $B<=[expr $i*$MidSUM+$MidSUM]} {
set B1 [expr $i*$MidSUM]
# puts stdout $B1
set B2 [expr $i*$MidSUM+$MidSUM-1]
}
}
set result1 [format "Subnet address: %s.%s.%s.%s" $A $B1 $C1 $D1]
set result2 [format "Broadcast address:%s.%s.%s.%s" $A $B2 $C2 $D2]
label .fip -text "$result1"
label .sip -text "$result2"
pack .fip .sip -side top -padx 5 -pady 5
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -