|
|
|
|
@ -5,20 +5,55 @@ import ( |
|
|
|
|
"net" |
|
|
|
|
"log" |
|
|
|
|
"bufio" |
|
|
|
|
"flag" |
|
|
|
|
"os/exec" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type Options struct { |
|
|
|
|
Addr string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func ParseOptions() Options { |
|
|
|
|
var opts Options |
|
|
|
|
|
|
|
|
|
flag.StringVar(&opts.Addr, "addr", "127.0.0.1:9001", "address to bind to recv blocks") |
|
|
|
|
flag.Parse() |
|
|
|
|
|
|
|
|
|
return opts |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func handleConnection(conn net.Conn) { |
|
|
|
|
defer conn.Close() |
|
|
|
|
|
|
|
|
|
scan := bufio.NewScanner(conn) |
|
|
|
|
|
|
|
|
|
for scan.Scan() { |
|
|
|
|
addr := scan.Text() |
|
|
|
|
addr, _, err := net.SplitHostPort(scan.Text()) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Println("Invalid host:port") |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if addr == "127.0.0.1" { |
|
|
|
|
fmt.Println("IGNORE", addr) |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fmt.Println("BLOCK: ", addr) |
|
|
|
|
|
|
|
|
|
cmd := exec.Command("nft", |
|
|
|
|
"add", "rule", "inet", |
|
|
|
|
"dentata", "input", |
|
|
|
|
"ip", "saddr", |
|
|
|
|
addr, "drop") |
|
|
|
|
|
|
|
|
|
err = cmd.Run() |
|
|
|
|
if err != nil { |
|
|
|
|
panic(err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func listener(addr string) { |
|
|
|
|
server, err := net.Listen("tcp", addr) |
|
|
|
|
|
|
|
|
|
@ -36,5 +71,7 @@ func listener(addr string) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
|
listener("127.0.0.1:9001") |
|
|
|
|
opts := ParseOptions() |
|
|
|
|
|
|
|
|
|
listener(opts.Addr) |
|
|
|
|
} |
|
|
|
|
|