Add some comments

This commit is contained in:
maride 2017-09-28 12:11:54 +02:00
parent 90adc72781
commit 2e17c3616f

View File

@ -20,16 +20,19 @@ var whitelist = make(map[string]int64)
var arguments *knockArguments var arguments *knockArguments
func main() { func main() {
// Parse command line arguments
cli.Run(new(knockArguments), func(ctx *cli.Context) error { cli.Run(new(knockArguments), func(ctx *cli.Context) error {
arguments = ctx.Argv() . (*knockArguments) arguments = ctx.Argv() . (*knockArguments)
return nil return nil
}) })
// Launch listeners
go listener(arguments.WhitelistPort, whitelist_handler) go listener(arguments.WhitelistPort, whitelist_handler)
listener(arguments.GatewayPort, gateway_handler) listener(arguments.GatewayPort, gateway_handler)
} }
func listener(port int, listen_func func(c net.Conn)) { func listener(port int, listen_func func(c net.Conn)) {
// Set up listening sockets on specified port and hand over to specified listen_func
ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port)) ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil { if err != nil {
@ -49,6 +52,7 @@ func listener(port int, listen_func func(c net.Conn)) {
} }
func whitelist_handler(c net.Conn) { func whitelist_handler(c net.Conn) {
// Handler function for whitelist socket connections, whitelisting the connecting host
host, _, _ := net.SplitHostPort(c.RemoteAddr().String()) host, _, _ := net.SplitHostPort(c.RemoteAddr().String())
io.WriteString(c, fmt.Sprintf("Knock Knock, %s.", host)) io.WriteString(c, fmt.Sprintf("Knock Knock, %s.", host))
@ -57,6 +61,7 @@ func whitelist_handler(c net.Conn) {
} }
func gateway_handler(c net.Conn) { func gateway_handler(c net.Conn) {
// Filter connections whether or not the connecting host is whitelisted
host, _, _ := net.SplitHostPort(c.RemoteAddr().String()) host, _, _ := net.SplitHostPort(c.RemoteAddr().String())
if is_whitelisted(host) { if is_whitelisted(host) {
@ -70,16 +75,19 @@ func gateway_handler(c net.Conn) {
} }
func add_to_whitelist(addr string) { func add_to_whitelist(addr string) {
// Add the specified address to the whitelist
if ! is_whitelisted(addr) { if ! is_whitelisted(addr) {
update_whitelist_time(addr) update_whitelist_time(addr)
} }
} }
func remove_from_whitelist(addr string) { func remove_from_whitelist(addr string) {
// Remove specified address from whitelist
delete(whitelist, addr) delete(whitelist, addr)
} }
func is_whitelisted(addr string) bool { func is_whitelisted(addr string) bool {
// Check whether or not the specified address is whitelisted and inside the timing window
if _, present := whitelist[addr]; present { if _, present := whitelist[addr]; present {
// Key is present in whitelist map // Key is present in whitelist map
if (whitelist[addr] + arguments.Timeout) >= time.Now().Unix() { if (whitelist[addr] + arguments.Timeout) >= time.Now().Unix() {
@ -97,10 +105,12 @@ func is_whitelisted(addr string) bool {
} }
func update_whitelist_time(addr string) { func update_whitelist_time(addr string) {
// Update whitelist - prevent timeout of connection
whitelist[addr] = time.Now().Unix() whitelist[addr] = time.Now().Unix()
} }
func proxy(c net.Conn) { func proxy(c net.Conn) {
// Proxy connection between the destination server and our connecting client
ln, err := net.Dial("tcp", arguments.Destination) ln, err := net.Dial("tcp", arguments.Destination)
if err != nil { if err != nil {
fmt.Println("[ERR] Proxy connection to server failed") fmt.Println("[ERR] Proxy connection to server failed")