49 lines
685 B
Go
49 lines
685 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/pkg/taptun"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
type Packet struct {
|
|
Data []byte
|
|
}
|
|
|
|
func main() {
|
|
tun, err := taptun.NewTun("nc%d")
|
|
if err != nil { panic(err) }
|
|
|
|
inboundPackets := make(chan Packet, 128)
|
|
|
|
go func() {
|
|
bufferSize := 1500
|
|
buffer := make([]byte, bufferSize)
|
|
|
|
for {
|
|
read, err := tun.Read(buffer)
|
|
if err != nil { panic(err) }
|
|
|
|
if read == 0 { panic("0 bytes read!") }
|
|
|
|
p := Packet{}
|
|
p.Data = make([]byte, read)
|
|
copy(p.Data, buffer)
|
|
|
|
inboundPackets <- p
|
|
}
|
|
}()
|
|
|
|
for i := 0; i < 10; i++ {
|
|
i := i
|
|
go func() {
|
|
for {
|
|
p := <-inboundPackets
|
|
fmt.Printf("Reader %d: %v\n", i, p)
|
|
}
|
|
}()
|
|
}
|
|
}
|