⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getdip.tcl

📁 用TCL写的
💻 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 + -