main.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package main
  2. import (
  3. "encoding/hex"
  4. "fmt"
  5. "github.com/inszva/tap0901"
  6. "net"
  7. "net/http"
  8. //"net/url"
  9. "log"
  10. "os"
  11. "sync"
  12. "time"
  13. )
  14. //Create a new virtual network interface
  15. 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}))
  16. func main() {
  17. //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}))
  18. /*
  19. if err != nil {
  20. panic(err)
  21. }
  22. */
  23. fmt.Println("Virtual Network Interface Created")
  24. time.Sleep(2 * time.Second)
  25. // type IP
  26. IPAddress := net.ParseIP(os.Args[2])
  27. //create fucking DHCP IP
  28. err := tun.SetDHCPMasq(IPAddress, net.IP([]byte{255, 255, 255, 0}),
  29. net.IP([]byte{0, 0, 0, 0}), net.IP([]byte{0, 0, 0, 0}))
  30. if err != nil {
  31. fmt.Println(err)
  32. }
  33. //create http server
  34. http.HandleFunc("/rcv", rcv)
  35. go func() {
  36. http.ListenAndServe(":8181", nil)
  37. }()
  38. tun.Connect()
  39. time.Sleep(2 * time.Second)
  40. szName := tun.GetNetworkName(false)
  41. fmt.Println("Interface name: ", szName)
  42. fmt.Println("Dest IP:" + os.Args[1])
  43. tun.SetReadHandler(func(tun *tap0901.Tun, data []byte) {
  44. //a := hex.EncodeToString(data)
  45. //bs, _ := hex.DecodeString(a)
  46. //fmt.Println(string(bs))
  47. log.Println(dde(data))
  48. //tun.Write(dde(data))
  49. /*
  50. resp, err := http.Get("http://" + os.Args[1] + "/rcv?packet=" + a)
  51. if err != nil {
  52. fmt.Println(err)
  53. } else {
  54. defer resp.Body.Close()
  55. }
  56. */
  57. })
  58. wp := sync.WaitGroup{}
  59. wp.Add(1)
  60. go func() {
  61. tun.Listen(1)
  62. wp.Done()
  63. }()
  64. fmt.Println(tun.GetMTU(false))
  65. //fmt.Println()
  66. /*
  67. for {
  68. time.Sleep(3 * time.Second)
  69. tun.Write([]byte("Hello World"))
  70. fmt.Println("Waiting")
  71. }
  72. time.Sleep(10 * time.Second)
  73. tun.SignalStop()
  74. */
  75. wp.Wait()
  76. }
  77. func rcv(w http.ResponseWriter, req *http.Request) {
  78. fmt.Fprintf(w, "hello\n")
  79. x, ok := req.URL.Query()["packet"]
  80. if !ok || len(x[0]) < 1 {
  81. fmt.Println("Url Param 'packet' is missing")
  82. return
  83. } else {
  84. fmt.Println("Reciving data!!!")
  85. }
  86. data, err := hex.DecodeString(x[0])
  87. if err != nil {
  88. panic(err)
  89. }
  90. //fmt.Printf("% x", data)
  91. tun.Write(data)
  92. }
  93. func dde(packet []byte) []byte {
  94. var i = len(packet) - 1
  95. for packet[i] == 0 {
  96. //--i
  97. i--
  98. }
  99. //var temp = [i + 1]byte
  100. temp := make([]byte, i+1)
  101. //Array.Copy(packet, temp, i + 1)
  102. temp = packet[0 : i+1]
  103. return temp
  104. }