main.go 2.3 KB

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