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("TXT>>", dde(data))
  48. //tun.Write(dde(data))
  49. resp, err := http.Get("http://" + os.Args[1] + "/rcv?packet=" + a)
  50. if err != nil {
  51. fmt.Println(err)
  52. } else {
  53. defer resp.Body.Close()
  54. }
  55. })
  56. wp := sync.WaitGroup{}
  57. wp.Add(1)
  58. go func() {
  59. tun.Listen(1)
  60. wp.Done()
  61. }()
  62. fmt.Println(tun.GetMTU(false))
  63. //fmt.Println()
  64. /*
  65. for {
  66. time.Sleep(3 * time.Second)
  67. tun.Write([]byte("Hello World"))
  68. fmt.Println("Waiting")
  69. }
  70. time.Sleep(10 * time.Second)
  71. tun.SignalStop()
  72. */
  73. wp.Wait()
  74. }
  75. func rcv(w http.ResponseWriter, req *http.Request) {
  76. fmt.Fprintf(w, "hello\n")
  77. x, ok := req.URL.Query()["packet"]
  78. if !ok || len(x[0]) < 1 {
  79. fmt.Println("Url Param 'packet' is missing")
  80. return
  81. } else {
  82. //log.Println("Reciving data!!!")
  83. }
  84. data, err := hex.DecodeString(x[0])
  85. if err != nil {
  86. panic(err)
  87. }
  88. log.Println("RECV<<", dde(data))
  89. tun.Write(dde(data))
  90. }
  91. func dde(packet []byte) []byte {
  92. var i = len(packet) - 1
  93. for packet[i] == 0 {
  94. //--i
  95. i--
  96. }
  97. //var temp = [i + 1]byte
  98. temp := make([]byte, i+1)
  99. //Array.Copy(packet, temp, i + 1)
  100. temp = packet[0 : i+1]
  101. return temp
  102. }