package main import ( "encoding/hex" "fmt" "github.com/inszva/tap0901" "net" "net/http" //"net/url" "os" "sync" "time" ) //Create a new virtual network interface var tun, _ = tap0901.OpenTun(net.IP([]byte{0, 0, 0, 0}), net.IP([]byte{0, 0, 0, 0}), net.IP([]byte{0, 0, 0, 0})) func main() { //tun, err := tap0901.OpenTun(net.IP([]byte{0, 0, 0, 0}), net.IP([]byte{0, 0, 0, 0}), net.IP([]byte{0, 0, 0, 0})) /* if err != nil { panic(err) } */ fmt.Println("Virtual Network Interface Created") time.Sleep(2 * time.Second) // type IP IPAddress := net.ParseIP(os.Args[2]) //create fucking DHCP IP err := tun.SetDHCPMasq(IPAddress, net.IP([]byte{255, 255, 255, 0}), net.IP([]byte{0, 0, 0, 0}), net.IP([]byte{0, 0, 0, 0})) if err != nil { fmt.Println(err) } //create http server http.HandleFunc("/rcv", rcv) go func() { http.ListenAndServe(":8181", nil) }() tun.Connect() time.Sleep(2 * time.Second) szName := tun.GetNetworkName(false) fmt.Println("Interface name: ", szName) fmt.Println("Dest IP:" + os.Args[1]) tun.SetReadHandler(func(tun *tap0901.Tun, data []byte) { a := hex.EncodeToString(data) //bs, _ := hex.DecodeString(a) //fmt.Println(string(bs)) //fmt.Println(a) resp, err := http.Get("http://" + os.Args[1] + "/rcv?packet=" + a) if err != nil { fmt.Println(err) } else { defer resp.Body.Close() } }) wp := sync.WaitGroup{} wp.Add(1) go func() { tun.Listen(1) wp.Done() }() fmt.Println(tun.GetMTU(false)) //fmt.Println() for { time.Sleep(3 * time.Second) tun.Write([]byte("Hello World")) fmt.Println("Waiting") } time.Sleep(10 * time.Second) tun.SignalStop() wp.Wait() } func rcv(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "hello\n") x, ok := req.URL.Query()["packet"] if !ok || len(x[0]) < 1 { fmt.Println("Url Param 'packet' is missing") return } else { fmt.Println("Reciving data!!!") } data, err := hex.DecodeString(x[0]) if err != nil { panic(err) } //fmt.Printf("% x", data) tun.Write(data) }