123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package main
- import (
- "encoding/hex"
- "fmt"
- "github.com/inszva/tap0901"
- "net"
- "net/http"
- //"net/url"
- "log"
- "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))
- log.Println("TXT>>", dde(data))
- //tun.Write(dde(data))
- 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 {
- log.Println("Reciving data!!!")
- }
- data, err := hex.DecodeString(x[0])
- if err != nil {
- panic(err)
- }
- fmt.Printf("RECV<<% x", data)
- tun.Write(dde(data))
- }
- func dde(packet []byte) []byte {
- var i = len(packet) - 1
- for packet[i] == 0 {
- //--i
- i--
- }
- //var temp = [i + 1]byte
- temp := make([]byte, i+1)
- //Array.Copy(packet, temp, i + 1)
- temp = packet[0 : i+1]
- return temp
- }
|