transport_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package scenarios
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/xtls/xray-core/app/proxyman"
  6. "github.com/xtls/xray-core/common"
  7. "github.com/xtls/xray-core/common/net"
  8. "github.com/xtls/xray-core/common/protocol"
  9. "github.com/xtls/xray-core/common/serial"
  10. "github.com/xtls/xray-core/common/uuid"
  11. "github.com/xtls/xray-core/core"
  12. "github.com/xtls/xray-core/proxy/dokodemo"
  13. "github.com/xtls/xray-core/proxy/freedom"
  14. "github.com/xtls/xray-core/proxy/vmess"
  15. "github.com/xtls/xray-core/proxy/vmess/inbound"
  16. "github.com/xtls/xray-core/proxy/vmess/outbound"
  17. "github.com/xtls/xray-core/testing/servers/tcp"
  18. "github.com/xtls/xray-core/transport/internet"
  19. "github.com/xtls/xray-core/transport/internet/headers/http"
  20. tcptransport "github.com/xtls/xray-core/transport/internet/tcp"
  21. )
  22. func TestHTTPConnectionHeader(t *testing.T) {
  23. tcpServer := tcp.Server{
  24. MsgProcessor: xor,
  25. }
  26. dest, err := tcpServer.Start()
  27. common.Must(err)
  28. defer tcpServer.Close()
  29. userID := protocol.NewID(uuid.New())
  30. serverPort := tcp.PickPort()
  31. serverConfig := &core.Config{
  32. Inbound: []*core.InboundHandlerConfig{
  33. {
  34. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  35. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  36. Listen: net.NewIPOrDomain(net.LocalHostIP),
  37. StreamSettings: &internet.StreamConfig{
  38. TransportSettings: []*internet.TransportConfig{
  39. {
  40. ProtocolName: "tcp",
  41. Settings: serial.ToTypedMessage(&tcptransport.Config{
  42. HeaderSettings: serial.ToTypedMessage(&http.Config{}),
  43. }),
  44. },
  45. },
  46. },
  47. }),
  48. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  49. User: []*protocol.User{
  50. {
  51. Account: serial.ToTypedMessage(&vmess.Account{
  52. Id: userID.String(),
  53. }),
  54. },
  55. },
  56. }),
  57. },
  58. },
  59. Outbound: []*core.OutboundHandlerConfig{
  60. {
  61. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  62. },
  63. },
  64. }
  65. clientPort := tcp.PickPort()
  66. clientConfig := &core.Config{
  67. Inbound: []*core.InboundHandlerConfig{
  68. {
  69. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  70. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  71. Listen: net.NewIPOrDomain(net.LocalHostIP),
  72. }),
  73. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  74. Address: net.NewIPOrDomain(dest.Address),
  75. Port: uint32(dest.Port),
  76. Networks: []net.Network{net.Network_TCP},
  77. }),
  78. },
  79. },
  80. Outbound: []*core.OutboundHandlerConfig{
  81. {
  82. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  83. Receiver: &protocol.ServerEndpoint{
  84. Address: net.NewIPOrDomain(net.LocalHostIP),
  85. Port: uint32(serverPort),
  86. User: &protocol.User{
  87. Account: serial.ToTypedMessage(&vmess.Account{
  88. Id: userID.String(),
  89. }),
  90. },
  91. },
  92. }),
  93. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  94. StreamSettings: &internet.StreamConfig{
  95. TransportSettings: []*internet.TransportConfig{
  96. {
  97. ProtocolName: "tcp",
  98. Settings: serial.ToTypedMessage(&tcptransport.Config{
  99. HeaderSettings: serial.ToTypedMessage(&http.Config{}),
  100. }),
  101. },
  102. },
  103. },
  104. }),
  105. },
  106. },
  107. }
  108. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  109. common.Must(err)
  110. defer CloseAllServers(servers)
  111. if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil {
  112. t.Error(err)
  113. }
  114. }