First little setup, there's a dentata server that receives block notices, and a landmine server/client that receives socket connects and reports them.
parent
cc3944eff2
commit
bddc747c8b
@ -0,0 +1,15 @@ |
||||
build: |
||||
go build ./cmd/dentata
|
||||
go build ./cmd/landmine
|
||||
|
||||
clean: |
||||
rm dentata landmine
|
||||
|
||||
run_server: |
||||
./dentata
|
||||
|
||||
run_mine: |
||||
./landmine
|
||||
|
||||
docs: |
||||
pkgsite -open
|
||||
@ -0,0 +1,40 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"net" |
||||
"log" |
||||
"bufio" |
||||
) |
||||
|
||||
func handleConnection(conn net.Conn) { |
||||
defer conn.Close() |
||||
|
||||
scan := bufio.NewScanner(conn) |
||||
|
||||
for scan.Scan() { |
||||
addr := scan.Text() |
||||
fmt.Println("BLOCK: ", addr) |
||||
} |
||||
} |
||||
|
||||
|
||||
func listener(addr string) { |
||||
server, err := net.Listen("tcp", addr) |
||||
|
||||
if err != nil { panic(err) } |
||||
|
||||
for { |
||||
conn, err := server.Accept() |
||||
|
||||
if err != nil {
|
||||
log.Println("ACCEPT ERROR", err) |
||||
} else { |
||||
go handleConnection(conn) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func main() { |
||||
listener("127.0.0.1:9001") |
||||
} |
||||
@ -0,0 +1,50 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"net" |
||||
"log" |
||||
"sync" |
||||
) |
||||
|
||||
func handleConnection(conn net.Conn) { |
||||
defer conn.Close() |
||||
addr := conn.RemoteAddr() |
||||
fmt.Println("Connect from", addr.Network(), addr.String()) |
||||
|
||||
// send explosion notice to dentata
|
||||
report, err := net.Dial("tcp","127.0.0.1:9001") |
||||
if err != nil { panic(err) } |
||||
defer report.Close() |
||||
|
||||
report.Write([]byte(addr.String())) |
||||
} |
||||
|
||||
|
||||
func listener(addr string) { |
||||
server, err := net.Listen("tcp", addr) |
||||
|
||||
if err != nil { panic(err) } |
||||
|
||||
for { |
||||
conn, err := server.Accept() |
||||
|
||||
if err != nil {
|
||||
log.Println("ACCEPT ERROR", err) |
||||
} else { |
||||
go handleConnection(conn) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func main() { |
||||
var wg sync.WaitGroup |
||||
|
||||
for i := 0; i < 10; i++ { |
||||
wg.Go(func () { |
||||
listener(fmt.Sprintf("0.0.0.0:%d", 8000 + i)) |
||||
}) |
||||
} |
||||
|
||||
wg.Wait() |
||||
} |
||||
Loading…
Reference in new issue