File: tcp_block.tcl proc ClearMsgs { } { .fr_one.txt_log_msgs delete 1.0 end } proc block {port sock_hand client_ip client_port} { set cmd_data "" set line "Access on port $port from IP $client_ip" if {$port == 80} { set cmd_data " - [gets $sock_hand]" } close $sock_hand .fr_one.txt_log_msgs insert end "$line$cmd_data\n" .fr_one.txt_log_msgs see end } # main ;-) wm title . {TCP Blocker} wm resizable . 0 0 wm deiconify . frame .fr_one -borderwidth 0 -height 75 -relief groove -width 340 text .fr_one.txt_log_msgs -height 10 -state normal grid .fr_one -in . -column 0 -row 1 -columnspan 1 -rowspan 1 grid .fr_one.txt_log_msgs -in .fr_one -column 0 -row 2 -columnspan 1 -rowspan 1 frame .fr_two -borderwidth 0 -height 75 -relief groove -width 340 button .fr_two.b_clear -text "Clear" -command "ClearMsgs" -width 8 -state normal button .fr_two.b_quit -text "Quit" -command "set eot 1" -width 8 -state normal grid .fr_two -in . -column 0 -row 2 -columnspan 1 -rowspan 1 grid .fr_two.b_clear -in .fr_two -column 0 -row 1 -columnspan 1 -rowspan 1 grid .fr_two.b_quit -in .fr_two -column 1 -row 1 -columnspan 1 -rowspan 1 set port 1 set eot 0 # Get ports to Block. source portstoblock foreach port [split $ports " "] { set sock_handles($port) [socket -server [list block $port] $port] .fr_one.txt_log_msgs insert end "Binding to $port\n" } vwait eot foreach port $ports { puts $port close $sock_handles($port) } exit 0 # end main ;-) File: portstoblock set ports {21 22 23 25 42 43 53 80 109 110 111 119 143 443}