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. SubNet := net.ParseIP(os.Args[3])
  28. GateW := net.ParseIP(os.Args[4])
  29. //create fucking DHCP IP
  30. err := tun.SetDHCPMasq(IPAddress, SubNet, GateW, net.IP([]byte{0, 0, 0, 0}))
  31. if err != nil {
  32. fmt.Println(err)
  33. }
  34. //create http server
  35. http.HandleFunc("/rcv", rcv)
  36. go func() {
  37. http.ListenAndServe(":8181", nil)
  38. }()
  39. tun.Connect()
  40. time.Sleep(2 * time.Second)
  41. szName := tun.GetNetworkName(false)
  42. fmt.Println("Interface name: ", szName)
  43. fmt.Println("Dest IP:" + os.Args[1])
  44. tun.SetReadHandler(func(tun *tap0901.Tun, data []byte) {
  45. a := hex.EncodeToString(data)
  46. //bs, _ := hex.DecodeString(a)
  47. //fmt.Println(string(bs))
  48. log.Println("TXT>>", dde(data))
  49. //tun.Write(dde(data))
  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. wp := sync.WaitGroup{}
  58. wp.Add(1)
  59. go func() {
  60. tun.Listen(1)
  61. wp.Done()
  62. }()
  63. fmt.Println(tun.GetMTU(false))
  64. //fmt.Println()
  65. /*
  66. for {
  67. time.Sleep(3 * time.Second)
  68. tun.Write([]byte("Hello World"))
  69. fmt.Println("Waiting")
  70. }
  71. time.Sleep(10 * time.Second)
  72. tun.SignalStop()
  73. */
  74. wp.Wait()
  75. }
  76. func rcv(w http.ResponseWriter, req *http.Request) {
  77. fmt.Fprintf(w, "hello\n")
  78. x, ok := req.URL.Query()["packet"]
  79. if !ok || len(x[0]) < 1 {
  80. fmt.Println("Url Param 'packet' is missing")
  81. return
  82. } else {
  83. //log.Println("Reciving data!!!")
  84. }
  85. data, err := hex.DecodeString(x[0])
  86. if err != nil {
  87. panic(err)
  88. }
  89. log.Println("RECV<<", dde(data))
  90. tun.Write(dde(data))
  91. }
  92. func dde(packet []byte) []byte {
  93. var i = len(packet) - 1
  94. for packet[i] == 0 {
  95. //--i
  96. i--
  97. }
  98. //var temp = [i + 1]byte
  99. temp := make([]byte, i+1)
  100. //Array.Copy(packet, temp, i + 1)
  101. temp = packet[0 : i+1]
  102. return temp
  103. }