common_inet_proxy_handle.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package common
  2. import (
  3. "context"
  4. "fmt"
  5. "ehang.io/nps/core"
  6. "net"
  7. "strconv"
  8. )
  9. type Proxy struct {
  10. core.NpsPlugin
  11. }
  12. func (proxy *Proxy) GetConfigName() *core.NpsConfigs {
  13. return core.NewNpsConfigs("socks5_proxy", "proxy to inet", core.CONFIG_LEVEL_PLUGIN)
  14. }
  15. func (proxy *Proxy) Run(ctx context.Context) (context.Context, error) {
  16. clientConn := proxy.GetClientConn(ctx)
  17. //clientId := proxy.GetClientId(ctx)
  18. //brg := proxy.GetBridge(ctx)
  19. //severConn, err := brg.GetConnByClientId(clientId)
  20. //if err != nil {
  21. // return ctx, err
  22. //}
  23. //
  24. //// send connection information to the npc
  25. //if _, err := core.SendInfo(severConn, nil); err != nil {
  26. // return ctx, err
  27. //}
  28. connType := ctx.Value(core.PROXY_CONNECTION_TYPE).(string)
  29. connAddr := ctx.Value(core.PROXY_CONNECTION_ADDR).(string)
  30. connPort := strconv.Itoa(int(ctx.Value(core.PROXY_CONNECTION_PORT).(uint16)))
  31. fmt.Println(connType, connAddr, connPort, clientConn.RemoteAddr().String())
  32. serverConn, err := net.Dial(connType, connAddr+":"+connPort)
  33. if err != nil {
  34. return ctx, err
  35. }
  36. // data exchange
  37. go func() {
  38. core.CopyBuffer(serverConn, clientConn)
  39. serverConn.Close()
  40. clientConn.Close()
  41. }()
  42. core.CopyBuffer(clientConn, serverConn)
  43. serverConn.Close()
  44. clientConn.Close()
  45. return ctx, core.REQUEST_EOF
  46. }