vmess_test.go 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286
  1. package scenarios
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/xtls/xray-core/app/log"
  7. "github.com/xtls/xray-core/app/proxyman"
  8. "github.com/xtls/xray-core/common"
  9. clog "github.com/xtls/xray-core/common/log"
  10. "github.com/xtls/xray-core/common/net"
  11. "github.com/xtls/xray-core/common/protocol"
  12. "github.com/xtls/xray-core/common/serial"
  13. "github.com/xtls/xray-core/common/uuid"
  14. core "github.com/xtls/xray-core/core"
  15. "github.com/xtls/xray-core/proxy/dokodemo"
  16. "github.com/xtls/xray-core/proxy/freedom"
  17. "github.com/xtls/xray-core/proxy/vmess"
  18. "github.com/xtls/xray-core/proxy/vmess/inbound"
  19. "github.com/xtls/xray-core/proxy/vmess/outbound"
  20. "github.com/xtls/xray-core/testing/servers/tcp"
  21. "github.com/xtls/xray-core/testing/servers/udp"
  22. "github.com/xtls/xray-core/transport/internet"
  23. "github.com/xtls/xray-core/transport/internet/kcp"
  24. "golang.org/x/sync/errgroup"
  25. )
  26. func TestVMessGCM(t *testing.T) {
  27. tcpServer := tcp.Server{
  28. MsgProcessor: xor,
  29. }
  30. dest, err := tcpServer.Start()
  31. common.Must(err)
  32. defer tcpServer.Close()
  33. userID := protocol.NewID(uuid.New())
  34. serverPort := tcp.PickPort()
  35. serverConfig := &core.Config{
  36. App: []*serial.TypedMessage{
  37. serial.ToTypedMessage(&log.Config{
  38. ErrorLogLevel: clog.Severity_Debug,
  39. ErrorLogType: log.LogType_Console,
  40. }),
  41. },
  42. Inbound: []*core.InboundHandlerConfig{
  43. {
  44. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  45. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  46. Listen: net.NewIPOrDomain(net.LocalHostIP),
  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. App: []*serial.TypedMessage{
  68. serial.ToTypedMessage(&log.Config{
  69. ErrorLogLevel: clog.Severity_Debug,
  70. ErrorLogType: log.LogType_Console,
  71. }),
  72. },
  73. Inbound: []*core.InboundHandlerConfig{
  74. {
  75. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  76. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  77. Listen: net.NewIPOrDomain(net.LocalHostIP),
  78. }),
  79. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  80. Address: net.NewIPOrDomain(dest.Address),
  81. Port: uint32(dest.Port),
  82. Networks: []net.Network{net.Network_TCP},
  83. }),
  84. },
  85. },
  86. Outbound: []*core.OutboundHandlerConfig{
  87. {
  88. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  89. Receiver: &protocol.ServerEndpoint{
  90. Address: net.NewIPOrDomain(net.LocalHostIP),
  91. Port: uint32(serverPort),
  92. User: &protocol.User{
  93. Account: serial.ToTypedMessage(&vmess.Account{
  94. Id: userID.String(),
  95. SecuritySettings: &protocol.SecurityConfig{
  96. Type: protocol.SecurityType_AES128_GCM,
  97. },
  98. }),
  99. },
  100. },
  101. }),
  102. },
  103. },
  104. }
  105. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  106. if err != nil {
  107. t.Fatal("Failed to initialize all servers: ", err.Error())
  108. }
  109. defer CloseAllServers(servers)
  110. var errg errgroup.Group
  111. for range 3 {
  112. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*40))
  113. }
  114. if err := errg.Wait(); err != nil {
  115. t.Error(err)
  116. }
  117. }
  118. func TestVMessGCMReadv(t *testing.T) {
  119. tcpServer := tcp.Server{
  120. MsgProcessor: xor,
  121. }
  122. dest, err := tcpServer.Start()
  123. common.Must(err)
  124. defer tcpServer.Close()
  125. userID := protocol.NewID(uuid.New())
  126. serverPort := tcp.PickPort()
  127. serverConfig := &core.Config{
  128. App: []*serial.TypedMessage{
  129. serial.ToTypedMessage(&log.Config{
  130. ErrorLogLevel: clog.Severity_Debug,
  131. ErrorLogType: log.LogType_Console,
  132. }),
  133. },
  134. Inbound: []*core.InboundHandlerConfig{
  135. {
  136. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  137. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  138. Listen: net.NewIPOrDomain(net.LocalHostIP),
  139. }),
  140. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  141. User: []*protocol.User{
  142. {
  143. Account: serial.ToTypedMessage(&vmess.Account{
  144. Id: userID.String(),
  145. }),
  146. },
  147. },
  148. }),
  149. },
  150. },
  151. Outbound: []*core.OutboundHandlerConfig{
  152. {
  153. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  154. },
  155. },
  156. }
  157. clientPort := tcp.PickPort()
  158. clientConfig := &core.Config{
  159. App: []*serial.TypedMessage{
  160. serial.ToTypedMessage(&log.Config{
  161. ErrorLogLevel: clog.Severity_Debug,
  162. ErrorLogType: log.LogType_Console,
  163. }),
  164. },
  165. Inbound: []*core.InboundHandlerConfig{
  166. {
  167. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  168. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  169. Listen: net.NewIPOrDomain(net.LocalHostIP),
  170. }),
  171. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  172. Address: net.NewIPOrDomain(dest.Address),
  173. Port: uint32(dest.Port),
  174. Networks: []net.Network{net.Network_TCP},
  175. }),
  176. },
  177. },
  178. Outbound: []*core.OutboundHandlerConfig{
  179. {
  180. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  181. Receiver: &protocol.ServerEndpoint{
  182. Address: net.NewIPOrDomain(net.LocalHostIP),
  183. Port: uint32(serverPort),
  184. User: &protocol.User{
  185. Account: serial.ToTypedMessage(&vmess.Account{
  186. Id: userID.String(),
  187. SecuritySettings: &protocol.SecurityConfig{
  188. Type: protocol.SecurityType_AES128_GCM,
  189. },
  190. }),
  191. },
  192. },
  193. }),
  194. },
  195. },
  196. }
  197. const envName = "XRAY_BUF_READV"
  198. common.Must(os.Setenv(envName, "enable"))
  199. defer os.Unsetenv(envName)
  200. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  201. if err != nil {
  202. t.Fatal("Failed to initialize all servers: ", err.Error())
  203. }
  204. defer CloseAllServers(servers)
  205. var errg errgroup.Group
  206. for range 3 {
  207. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*40))
  208. }
  209. if err := errg.Wait(); err != nil {
  210. t.Error(err)
  211. }
  212. }
  213. func TestVMessGCMUDP(t *testing.T) {
  214. udpServer := udp.Server{
  215. MsgProcessor: xor,
  216. }
  217. dest, err := udpServer.Start()
  218. common.Must(err)
  219. defer udpServer.Close()
  220. userID := protocol.NewID(uuid.New())
  221. serverPort := tcp.PickPort()
  222. serverConfig := &core.Config{
  223. App: []*serial.TypedMessage{
  224. serial.ToTypedMessage(&log.Config{
  225. ErrorLogLevel: clog.Severity_Debug,
  226. ErrorLogType: log.LogType_Console,
  227. }),
  228. },
  229. Inbound: []*core.InboundHandlerConfig{
  230. {
  231. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  232. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  233. Listen: net.NewIPOrDomain(net.LocalHostIP),
  234. }),
  235. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  236. User: []*protocol.User{
  237. {
  238. Account: serial.ToTypedMessage(&vmess.Account{
  239. Id: userID.String(),
  240. }),
  241. },
  242. },
  243. }),
  244. },
  245. },
  246. Outbound: []*core.OutboundHandlerConfig{
  247. {
  248. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  249. },
  250. },
  251. }
  252. clientPort := udp.PickPort()
  253. clientConfig := &core.Config{
  254. App: []*serial.TypedMessage{
  255. serial.ToTypedMessage(&log.Config{
  256. ErrorLogLevel: clog.Severity_Debug,
  257. ErrorLogType: log.LogType_Console,
  258. }),
  259. },
  260. Inbound: []*core.InboundHandlerConfig{
  261. {
  262. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  263. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  264. Listen: net.NewIPOrDomain(net.LocalHostIP),
  265. }),
  266. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  267. Address: net.NewIPOrDomain(dest.Address),
  268. Port: uint32(dest.Port),
  269. Networks: []net.Network{net.Network_UDP},
  270. }),
  271. },
  272. },
  273. Outbound: []*core.OutboundHandlerConfig{
  274. {
  275. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  276. Receiver: &protocol.ServerEndpoint{
  277. Address: net.NewIPOrDomain(net.LocalHostIP),
  278. Port: uint32(serverPort),
  279. User: &protocol.User{
  280. Account: serial.ToTypedMessage(&vmess.Account{
  281. Id: userID.String(),
  282. SecuritySettings: &protocol.SecurityConfig{
  283. Type: protocol.SecurityType_AES128_GCM,
  284. },
  285. }),
  286. },
  287. },
  288. }),
  289. },
  290. },
  291. }
  292. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  293. common.Must(err)
  294. defer CloseAllServers(servers)
  295. var errg errgroup.Group
  296. for range 3 {
  297. errg.Go(testUDPConn(clientPort, 1024, time.Second*5))
  298. }
  299. if err := errg.Wait(); err != nil {
  300. t.Error(err)
  301. }
  302. }
  303. func TestVMessChacha20(t *testing.T) {
  304. tcpServer := tcp.Server{
  305. MsgProcessor: xor,
  306. }
  307. dest, err := tcpServer.Start()
  308. common.Must(err)
  309. defer tcpServer.Close()
  310. userID := protocol.NewID(uuid.New())
  311. serverPort := tcp.PickPort()
  312. serverConfig := &core.Config{
  313. App: []*serial.TypedMessage{
  314. serial.ToTypedMessage(&log.Config{
  315. ErrorLogLevel: clog.Severity_Debug,
  316. ErrorLogType: log.LogType_Console,
  317. }),
  318. },
  319. Inbound: []*core.InboundHandlerConfig{
  320. {
  321. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  322. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  323. Listen: net.NewIPOrDomain(net.LocalHostIP),
  324. }),
  325. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  326. User: []*protocol.User{
  327. {
  328. Account: serial.ToTypedMessage(&vmess.Account{
  329. Id: userID.String(),
  330. }),
  331. },
  332. },
  333. }),
  334. },
  335. },
  336. Outbound: []*core.OutboundHandlerConfig{
  337. {
  338. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  339. },
  340. },
  341. }
  342. clientPort := tcp.PickPort()
  343. clientConfig := &core.Config{
  344. App: []*serial.TypedMessage{
  345. serial.ToTypedMessage(&log.Config{
  346. ErrorLogLevel: clog.Severity_Debug,
  347. ErrorLogType: log.LogType_Console,
  348. }),
  349. },
  350. Inbound: []*core.InboundHandlerConfig{
  351. {
  352. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  353. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  354. Listen: net.NewIPOrDomain(net.LocalHostIP),
  355. }),
  356. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  357. Address: net.NewIPOrDomain(dest.Address),
  358. Port: uint32(dest.Port),
  359. Networks: []net.Network{net.Network_TCP},
  360. }),
  361. },
  362. },
  363. Outbound: []*core.OutboundHandlerConfig{
  364. {
  365. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  366. Receiver: &protocol.ServerEndpoint{
  367. Address: net.NewIPOrDomain(net.LocalHostIP),
  368. Port: uint32(serverPort),
  369. User: &protocol.User{
  370. Account: serial.ToTypedMessage(&vmess.Account{
  371. Id: userID.String(),
  372. SecuritySettings: &protocol.SecurityConfig{
  373. Type: protocol.SecurityType_CHACHA20_POLY1305,
  374. },
  375. }),
  376. },
  377. },
  378. }),
  379. },
  380. },
  381. }
  382. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  383. common.Must(err)
  384. defer CloseAllServers(servers)
  385. var errg errgroup.Group
  386. for range 3 {
  387. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
  388. }
  389. if err := errg.Wait(); err != nil {
  390. t.Error(err)
  391. }
  392. }
  393. func TestVMessNone(t *testing.T) {
  394. tcpServer := tcp.Server{
  395. MsgProcessor: xor,
  396. }
  397. dest, err := tcpServer.Start()
  398. common.Must(err)
  399. defer tcpServer.Close()
  400. userID := protocol.NewID(uuid.New())
  401. serverPort := tcp.PickPort()
  402. serverConfig := &core.Config{
  403. App: []*serial.TypedMessage{
  404. serial.ToTypedMessage(&log.Config{
  405. ErrorLogLevel: clog.Severity_Debug,
  406. ErrorLogType: log.LogType_Console,
  407. }),
  408. },
  409. Inbound: []*core.InboundHandlerConfig{
  410. {
  411. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  412. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  413. Listen: net.NewIPOrDomain(net.LocalHostIP),
  414. }),
  415. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  416. User: []*protocol.User{
  417. {
  418. Account: serial.ToTypedMessage(&vmess.Account{
  419. Id: userID.String(),
  420. }),
  421. },
  422. },
  423. }),
  424. },
  425. },
  426. Outbound: []*core.OutboundHandlerConfig{
  427. {
  428. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  429. },
  430. },
  431. }
  432. clientPort := tcp.PickPort()
  433. clientConfig := &core.Config{
  434. App: []*serial.TypedMessage{
  435. serial.ToTypedMessage(&log.Config{
  436. ErrorLogLevel: clog.Severity_Debug,
  437. ErrorLogType: log.LogType_Console,
  438. }),
  439. },
  440. Inbound: []*core.InboundHandlerConfig{
  441. {
  442. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  443. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  444. Listen: net.NewIPOrDomain(net.LocalHostIP),
  445. }),
  446. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  447. Address: net.NewIPOrDomain(dest.Address),
  448. Port: uint32(dest.Port),
  449. Networks: []net.Network{net.Network_TCP},
  450. }),
  451. },
  452. },
  453. Outbound: []*core.OutboundHandlerConfig{
  454. {
  455. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  456. Receiver: &protocol.ServerEndpoint{
  457. Address: net.NewIPOrDomain(net.LocalHostIP),
  458. Port: uint32(serverPort),
  459. User: &protocol.User{
  460. Account: serial.ToTypedMessage(&vmess.Account{
  461. Id: userID.String(),
  462. SecuritySettings: &protocol.SecurityConfig{
  463. Type: protocol.SecurityType_NONE,
  464. },
  465. }),
  466. },
  467. },
  468. }),
  469. },
  470. },
  471. }
  472. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  473. common.Must(err)
  474. defer CloseAllServers(servers)
  475. var errg errgroup.Group
  476. for range 3 {
  477. errg.Go(testTCPConn(clientPort, 1024*1024, time.Second*30))
  478. }
  479. if err := errg.Wait(); err != nil {
  480. t.Error(err)
  481. }
  482. }
  483. func TestVMessKCP(t *testing.T) {
  484. tcpServer := tcp.Server{
  485. MsgProcessor: xor,
  486. }
  487. dest, err := tcpServer.Start()
  488. common.Must(err)
  489. defer tcpServer.Close()
  490. userID := protocol.NewID(uuid.New())
  491. serverPort := udp.PickPort()
  492. serverConfig := &core.Config{
  493. App: []*serial.TypedMessage{
  494. serial.ToTypedMessage(&log.Config{
  495. ErrorLogLevel: clog.Severity_Debug,
  496. ErrorLogType: log.LogType_Console,
  497. }),
  498. },
  499. Inbound: []*core.InboundHandlerConfig{
  500. {
  501. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  502. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  503. Listen: net.NewIPOrDomain(net.LocalHostIP),
  504. StreamSettings: &internet.StreamConfig{
  505. ProtocolName: "mkcp",
  506. },
  507. }),
  508. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  509. User: []*protocol.User{
  510. {
  511. Account: serial.ToTypedMessage(&vmess.Account{
  512. Id: userID.String(),
  513. }),
  514. },
  515. },
  516. }),
  517. },
  518. },
  519. Outbound: []*core.OutboundHandlerConfig{
  520. {
  521. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  522. },
  523. },
  524. }
  525. clientPort := tcp.PickPort()
  526. clientConfig := &core.Config{
  527. App: []*serial.TypedMessage{
  528. serial.ToTypedMessage(&log.Config{
  529. ErrorLogLevel: clog.Severity_Debug,
  530. ErrorLogType: log.LogType_Console,
  531. }),
  532. },
  533. Inbound: []*core.InboundHandlerConfig{
  534. {
  535. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  536. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  537. Listen: net.NewIPOrDomain(net.LocalHostIP),
  538. }),
  539. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  540. Address: net.NewIPOrDomain(dest.Address),
  541. Port: uint32(dest.Port),
  542. Networks: []net.Network{net.Network_TCP},
  543. }),
  544. },
  545. },
  546. Outbound: []*core.OutboundHandlerConfig{
  547. {
  548. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  549. Receiver: &protocol.ServerEndpoint{
  550. Address: net.NewIPOrDomain(net.LocalHostIP),
  551. Port: uint32(serverPort),
  552. User: &protocol.User{
  553. Account: serial.ToTypedMessage(&vmess.Account{
  554. Id: userID.String(),
  555. SecuritySettings: &protocol.SecurityConfig{
  556. Type: protocol.SecurityType_AES128_GCM,
  557. },
  558. }),
  559. },
  560. },
  561. }),
  562. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  563. StreamSettings: &internet.StreamConfig{
  564. ProtocolName: "mkcp",
  565. },
  566. }),
  567. },
  568. },
  569. }
  570. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  571. common.Must(err)
  572. defer CloseAllServers(servers)
  573. var errg errgroup.Group
  574. for range 3 {
  575. errg.Go(testTCPConn(clientPort, 1024, time.Minute*2))
  576. }
  577. if err := errg.Wait(); err != nil {
  578. t.Error(err)
  579. }
  580. }
  581. func TestVMessKCPLarge(t *testing.T) {
  582. tcpServer := tcp.Server{
  583. MsgProcessor: xor,
  584. }
  585. dest, err := tcpServer.Start()
  586. common.Must(err)
  587. defer tcpServer.Close()
  588. userID := protocol.NewID(uuid.New())
  589. serverPort := udp.PickPort()
  590. serverConfig := &core.Config{
  591. App: []*serial.TypedMessage{
  592. serial.ToTypedMessage(&log.Config{
  593. ErrorLogLevel: clog.Severity_Debug,
  594. ErrorLogType: log.LogType_Console,
  595. }),
  596. },
  597. Inbound: []*core.InboundHandlerConfig{
  598. {
  599. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  600. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  601. Listen: net.NewIPOrDomain(net.LocalHostIP),
  602. StreamSettings: &internet.StreamConfig{
  603. ProtocolName: "mkcp",
  604. TransportSettings: []*internet.TransportConfig{
  605. {
  606. ProtocolName: "mkcp",
  607. Settings: serial.ToTypedMessage(&kcp.Config{
  608. ReadBuffer: &kcp.ReadBuffer{
  609. Size: 512 * 1024,
  610. },
  611. WriteBuffer: &kcp.WriteBuffer{
  612. Size: 512 * 1024,
  613. },
  614. UplinkCapacity: &kcp.UplinkCapacity{
  615. Value: 20,
  616. },
  617. DownlinkCapacity: &kcp.DownlinkCapacity{
  618. Value: 20,
  619. },
  620. }),
  621. },
  622. },
  623. },
  624. }),
  625. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  626. User: []*protocol.User{
  627. {
  628. Account: serial.ToTypedMessage(&vmess.Account{
  629. Id: userID.String(),
  630. }),
  631. },
  632. },
  633. }),
  634. },
  635. },
  636. Outbound: []*core.OutboundHandlerConfig{
  637. {
  638. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  639. },
  640. },
  641. }
  642. clientPort := tcp.PickPort()
  643. clientConfig := &core.Config{
  644. App: []*serial.TypedMessage{
  645. serial.ToTypedMessage(&log.Config{
  646. ErrorLogLevel: clog.Severity_Debug,
  647. ErrorLogType: log.LogType_Console,
  648. }),
  649. },
  650. Inbound: []*core.InboundHandlerConfig{
  651. {
  652. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  653. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  654. Listen: net.NewIPOrDomain(net.LocalHostIP),
  655. }),
  656. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  657. Address: net.NewIPOrDomain(dest.Address),
  658. Port: uint32(dest.Port),
  659. Networks: []net.Network{net.Network_TCP},
  660. }),
  661. },
  662. },
  663. Outbound: []*core.OutboundHandlerConfig{
  664. {
  665. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  666. Receiver: &protocol.ServerEndpoint{
  667. Address: net.NewIPOrDomain(net.LocalHostIP),
  668. Port: uint32(serverPort),
  669. User: &protocol.User{
  670. Account: serial.ToTypedMessage(&vmess.Account{
  671. Id: userID.String(),
  672. SecuritySettings: &protocol.SecurityConfig{
  673. Type: protocol.SecurityType_AES128_GCM,
  674. },
  675. }),
  676. },
  677. },
  678. }),
  679. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  680. StreamSettings: &internet.StreamConfig{
  681. ProtocolName: "mkcp",
  682. TransportSettings: []*internet.TransportConfig{
  683. {
  684. ProtocolName: "mkcp",
  685. Settings: serial.ToTypedMessage(&kcp.Config{
  686. ReadBuffer: &kcp.ReadBuffer{
  687. Size: 512 * 1024,
  688. },
  689. WriteBuffer: &kcp.WriteBuffer{
  690. Size: 512 * 1024,
  691. },
  692. UplinkCapacity: &kcp.UplinkCapacity{
  693. Value: 20,
  694. },
  695. DownlinkCapacity: &kcp.DownlinkCapacity{
  696. Value: 20,
  697. },
  698. }),
  699. },
  700. },
  701. },
  702. }),
  703. },
  704. },
  705. }
  706. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  707. common.Must(err)
  708. var errg errgroup.Group
  709. for range 3 {
  710. errg.Go(testTCPConn(clientPort, 513*1024, time.Minute*5))
  711. }
  712. if err := errg.Wait(); err != nil {
  713. t.Error(err)
  714. }
  715. defer func() {
  716. <-time.After(5 * time.Second)
  717. CloseAllServers(servers)
  718. }()
  719. }
  720. func TestVMessGCMMux(t *testing.T) {
  721. tcpServer := tcp.Server{
  722. MsgProcessor: xor,
  723. }
  724. dest, err := tcpServer.Start()
  725. common.Must(err)
  726. defer tcpServer.Close()
  727. userID := protocol.NewID(uuid.New())
  728. serverPort := tcp.PickPort()
  729. serverConfig := &core.Config{
  730. App: []*serial.TypedMessage{
  731. serial.ToTypedMessage(&log.Config{
  732. ErrorLogLevel: clog.Severity_Debug,
  733. ErrorLogType: log.LogType_Console,
  734. }),
  735. },
  736. Inbound: []*core.InboundHandlerConfig{
  737. {
  738. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  739. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  740. Listen: net.NewIPOrDomain(net.LocalHostIP),
  741. }),
  742. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  743. User: []*protocol.User{
  744. {
  745. Account: serial.ToTypedMessage(&vmess.Account{
  746. Id: userID.String(),
  747. }),
  748. },
  749. },
  750. }),
  751. },
  752. },
  753. Outbound: []*core.OutboundHandlerConfig{
  754. {
  755. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  756. },
  757. },
  758. }
  759. clientPort := tcp.PickPort()
  760. clientConfig := &core.Config{
  761. App: []*serial.TypedMessage{
  762. serial.ToTypedMessage(&log.Config{
  763. ErrorLogLevel: clog.Severity_Debug,
  764. ErrorLogType: log.LogType_Console,
  765. }),
  766. },
  767. Inbound: []*core.InboundHandlerConfig{
  768. {
  769. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  770. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  771. Listen: net.NewIPOrDomain(net.LocalHostIP),
  772. }),
  773. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  774. Address: net.NewIPOrDomain(dest.Address),
  775. Port: uint32(dest.Port),
  776. Networks: []net.Network{net.Network_TCP},
  777. }),
  778. },
  779. },
  780. Outbound: []*core.OutboundHandlerConfig{
  781. {
  782. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  783. MultiplexSettings: &proxyman.MultiplexingConfig{
  784. Enabled: true,
  785. Concurrency: 4,
  786. },
  787. }),
  788. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  789. Receiver: &protocol.ServerEndpoint{
  790. Address: net.NewIPOrDomain(net.LocalHostIP),
  791. Port: uint32(serverPort),
  792. User: &protocol.User{
  793. Account: serial.ToTypedMessage(&vmess.Account{
  794. Id: userID.String(),
  795. SecuritySettings: &protocol.SecurityConfig{
  796. Type: protocol.SecurityType_AES128_GCM,
  797. },
  798. }),
  799. },
  800. },
  801. }),
  802. },
  803. },
  804. }
  805. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  806. common.Must(err)
  807. defer CloseAllServers(servers)
  808. for range "abcd" {
  809. var errg errgroup.Group
  810. for range 3 {
  811. errg.Go(testTCPConn(clientPort, 10240, time.Second*20))
  812. }
  813. if err := errg.Wait(); err != nil {
  814. t.Fatal(err)
  815. }
  816. time.Sleep(time.Second)
  817. }
  818. }
  819. func TestVMessGCMMuxUDP(t *testing.T) {
  820. tcpServer := tcp.Server{
  821. MsgProcessor: xor,
  822. }
  823. dest, err := tcpServer.Start()
  824. common.Must(err)
  825. defer tcpServer.Close()
  826. udpServer := udp.Server{
  827. MsgProcessor: xor,
  828. }
  829. udpDest, err := udpServer.Start()
  830. common.Must(err)
  831. defer udpServer.Close()
  832. userID := protocol.NewID(uuid.New())
  833. serverPort := tcp.PickPort()
  834. serverConfig := &core.Config{
  835. App: []*serial.TypedMessage{
  836. serial.ToTypedMessage(&log.Config{
  837. ErrorLogLevel: clog.Severity_Debug,
  838. ErrorLogType: log.LogType_Console,
  839. }),
  840. },
  841. Inbound: []*core.InboundHandlerConfig{
  842. {
  843. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  844. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  845. Listen: net.NewIPOrDomain(net.LocalHostIP),
  846. }),
  847. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  848. User: []*protocol.User{
  849. {
  850. Account: serial.ToTypedMessage(&vmess.Account{
  851. Id: userID.String(),
  852. }),
  853. },
  854. },
  855. }),
  856. },
  857. },
  858. Outbound: []*core.OutboundHandlerConfig{
  859. {
  860. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  861. },
  862. },
  863. }
  864. clientPort := tcp.PickPort()
  865. clientUDPPort := udp.PickPort()
  866. clientConfig := &core.Config{
  867. App: []*serial.TypedMessage{
  868. serial.ToTypedMessage(&log.Config{
  869. ErrorLogLevel: clog.Severity_Debug,
  870. ErrorLogType: log.LogType_Console,
  871. }),
  872. },
  873. Inbound: []*core.InboundHandlerConfig{
  874. {
  875. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  876. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  877. Listen: net.NewIPOrDomain(net.LocalHostIP),
  878. }),
  879. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  880. Address: net.NewIPOrDomain(dest.Address),
  881. Port: uint32(dest.Port),
  882. Networks: []net.Network{net.Network_TCP},
  883. }),
  884. },
  885. {
  886. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  887. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientUDPPort)}},
  888. Listen: net.NewIPOrDomain(net.LocalHostIP),
  889. }),
  890. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  891. Address: net.NewIPOrDomain(udpDest.Address),
  892. Port: uint32(udpDest.Port),
  893. Networks: []net.Network{net.Network_UDP},
  894. }),
  895. },
  896. },
  897. Outbound: []*core.OutboundHandlerConfig{
  898. {
  899. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  900. MultiplexSettings: &proxyman.MultiplexingConfig{
  901. Enabled: true,
  902. Concurrency: 4,
  903. },
  904. }),
  905. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  906. Receiver: &protocol.ServerEndpoint{
  907. Address: net.NewIPOrDomain(net.LocalHostIP),
  908. Port: uint32(serverPort),
  909. User: &protocol.User{
  910. Account: serial.ToTypedMessage(&vmess.Account{
  911. Id: userID.String(),
  912. SecuritySettings: &protocol.SecurityConfig{
  913. Type: protocol.SecurityType_AES128_GCM,
  914. },
  915. }),
  916. },
  917. },
  918. }),
  919. },
  920. },
  921. }
  922. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  923. common.Must(err)
  924. for range "ab" {
  925. var errg errgroup.Group
  926. for range 3 {
  927. errg.Go(testTCPConn(clientPort, 1024, time.Second*10))
  928. errg.Go(testUDPConn(clientUDPPort, 1024, time.Second*10))
  929. }
  930. if err := errg.Wait(); err != nil {
  931. t.Error(err)
  932. }
  933. time.Sleep(time.Second)
  934. }
  935. defer func() {
  936. <-time.After(5 * time.Second)
  937. CloseAllServers(servers)
  938. }()
  939. }
  940. func TestVMessZero(t *testing.T) {
  941. tcpServer := tcp.Server{
  942. MsgProcessor: xor,
  943. }
  944. dest, err := tcpServer.Start()
  945. common.Must(err)
  946. defer tcpServer.Close()
  947. userID := protocol.NewID(uuid.New())
  948. serverPort := tcp.PickPort()
  949. serverConfig := &core.Config{
  950. App: []*serial.TypedMessage{
  951. serial.ToTypedMessage(&log.Config{
  952. ErrorLogLevel: clog.Severity_Debug,
  953. ErrorLogType: log.LogType_Console,
  954. }),
  955. },
  956. Inbound: []*core.InboundHandlerConfig{
  957. {
  958. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  959. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  960. Listen: net.NewIPOrDomain(net.LocalHostIP),
  961. }),
  962. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  963. User: []*protocol.User{
  964. {
  965. Account: serial.ToTypedMessage(&vmess.Account{
  966. Id: userID.String(),
  967. }),
  968. },
  969. },
  970. }),
  971. },
  972. },
  973. Outbound: []*core.OutboundHandlerConfig{
  974. {
  975. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  976. },
  977. },
  978. }
  979. clientPort := tcp.PickPort()
  980. clientConfig := &core.Config{
  981. App: []*serial.TypedMessage{
  982. serial.ToTypedMessage(&log.Config{
  983. ErrorLogLevel: clog.Severity_Debug,
  984. ErrorLogType: log.LogType_Console,
  985. }),
  986. },
  987. Inbound: []*core.InboundHandlerConfig{
  988. {
  989. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  990. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  991. Listen: net.NewIPOrDomain(net.LocalHostIP),
  992. }),
  993. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  994. Address: net.NewIPOrDomain(dest.Address),
  995. Port: uint32(dest.Port),
  996. Networks: []net.Network{net.Network_TCP},
  997. }),
  998. },
  999. },
  1000. Outbound: []*core.OutboundHandlerConfig{
  1001. {
  1002. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  1003. Receiver: &protocol.ServerEndpoint{
  1004. Address: net.NewIPOrDomain(net.LocalHostIP),
  1005. Port: uint32(serverPort),
  1006. User: &protocol.User{
  1007. Account: serial.ToTypedMessage(&vmess.Account{
  1008. Id: userID.String(),
  1009. SecuritySettings: &protocol.SecurityConfig{
  1010. Type: protocol.SecurityType_ZERO,
  1011. },
  1012. }),
  1013. },
  1014. },
  1015. }),
  1016. },
  1017. },
  1018. }
  1019. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  1020. common.Must(err)
  1021. defer CloseAllServers(servers)
  1022. var errg errgroup.Group
  1023. for range 3 {
  1024. errg.Go(testTCPConn(clientPort, 1024*1024, time.Second*30))
  1025. }
  1026. if err := errg.Wait(); err != nil {
  1027. t.Error(err)
  1028. }
  1029. }
  1030. func TestVMessGCMLengthAuth(t *testing.T) {
  1031. tcpServer := tcp.Server{
  1032. MsgProcessor: xor,
  1033. }
  1034. dest, err := tcpServer.Start()
  1035. common.Must(err)
  1036. defer tcpServer.Close()
  1037. userID := protocol.NewID(uuid.New())
  1038. serverPort := tcp.PickPort()
  1039. serverConfig := &core.Config{
  1040. App: []*serial.TypedMessage{
  1041. serial.ToTypedMessage(&log.Config{
  1042. ErrorLogLevel: clog.Severity_Debug,
  1043. ErrorLogType: log.LogType_Console,
  1044. }),
  1045. },
  1046. Inbound: []*core.InboundHandlerConfig{
  1047. {
  1048. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1049. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  1050. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1051. }),
  1052. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  1053. User: []*protocol.User{
  1054. {
  1055. Account: serial.ToTypedMessage(&vmess.Account{
  1056. Id: userID.String(),
  1057. }),
  1058. },
  1059. },
  1060. }),
  1061. },
  1062. },
  1063. Outbound: []*core.OutboundHandlerConfig{
  1064. {
  1065. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  1066. },
  1067. },
  1068. }
  1069. clientPort := tcp.PickPort()
  1070. clientConfig := &core.Config{
  1071. App: []*serial.TypedMessage{
  1072. serial.ToTypedMessage(&log.Config{
  1073. ErrorLogLevel: clog.Severity_Debug,
  1074. ErrorLogType: log.LogType_Console,
  1075. }),
  1076. },
  1077. Inbound: []*core.InboundHandlerConfig{
  1078. {
  1079. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1080. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  1081. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1082. }),
  1083. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  1084. Address: net.NewIPOrDomain(dest.Address),
  1085. Port: uint32(dest.Port),
  1086. Networks: []net.Network{net.Network_TCP},
  1087. }),
  1088. },
  1089. },
  1090. Outbound: []*core.OutboundHandlerConfig{
  1091. {
  1092. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  1093. Receiver: &protocol.ServerEndpoint{
  1094. Address: net.NewIPOrDomain(net.LocalHostIP),
  1095. Port: uint32(serverPort),
  1096. User: &protocol.User{
  1097. Account: serial.ToTypedMessage(&vmess.Account{
  1098. Id: userID.String(),
  1099. SecuritySettings: &protocol.SecurityConfig{
  1100. Type: protocol.SecurityType_AES128_GCM,
  1101. },
  1102. TestsEnabled: "AuthenticatedLength",
  1103. }),
  1104. },
  1105. },
  1106. }),
  1107. },
  1108. },
  1109. }
  1110. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  1111. if err != nil {
  1112. t.Fatal("Failed to initialize all servers: ", err.Error())
  1113. }
  1114. defer CloseAllServers(servers)
  1115. var errg errgroup.Group
  1116. for range 3 {
  1117. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*40))
  1118. }
  1119. if err := errg.Wait(); err != nil {
  1120. t.Error(err)
  1121. }
  1122. }
  1123. func TestVMessGCMLengthAuthPlusNoTerminationSignal(t *testing.T) {
  1124. tcpServer := tcp.Server{
  1125. MsgProcessor: xor,
  1126. }
  1127. dest, err := tcpServer.Start()
  1128. common.Must(err)
  1129. defer tcpServer.Close()
  1130. userID := protocol.NewID(uuid.New())
  1131. serverPort := tcp.PickPort()
  1132. serverConfig := &core.Config{
  1133. App: []*serial.TypedMessage{
  1134. serial.ToTypedMessage(&log.Config{
  1135. ErrorLogLevel: clog.Severity_Debug,
  1136. ErrorLogType: log.LogType_Console,
  1137. }),
  1138. },
  1139. Inbound: []*core.InboundHandlerConfig{
  1140. {
  1141. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1142. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  1143. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1144. }),
  1145. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  1146. User: []*protocol.User{
  1147. {
  1148. Account: serial.ToTypedMessage(&vmess.Account{
  1149. Id: userID.String(),
  1150. TestsEnabled: "AuthenticatedLength|NoTerminationSignal",
  1151. }),
  1152. },
  1153. },
  1154. }),
  1155. },
  1156. },
  1157. Outbound: []*core.OutboundHandlerConfig{
  1158. {
  1159. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  1160. },
  1161. },
  1162. }
  1163. clientPort := tcp.PickPort()
  1164. clientConfig := &core.Config{
  1165. App: []*serial.TypedMessage{
  1166. serial.ToTypedMessage(&log.Config{
  1167. ErrorLogLevel: clog.Severity_Debug,
  1168. ErrorLogType: log.LogType_Console,
  1169. }),
  1170. },
  1171. Inbound: []*core.InboundHandlerConfig{
  1172. {
  1173. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1174. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  1175. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1176. }),
  1177. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  1178. Address: net.NewIPOrDomain(dest.Address),
  1179. Port: uint32(dest.Port),
  1180. Networks: []net.Network{net.Network_TCP},
  1181. }),
  1182. },
  1183. },
  1184. Outbound: []*core.OutboundHandlerConfig{
  1185. {
  1186. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  1187. Receiver: &protocol.ServerEndpoint{
  1188. Address: net.NewIPOrDomain(net.LocalHostIP),
  1189. Port: uint32(serverPort),
  1190. User: &protocol.User{
  1191. Account: serial.ToTypedMessage(&vmess.Account{
  1192. Id: userID.String(),
  1193. SecuritySettings: &protocol.SecurityConfig{
  1194. Type: protocol.SecurityType_AES128_GCM,
  1195. },
  1196. TestsEnabled: "AuthenticatedLength|NoTerminationSignal",
  1197. }),
  1198. },
  1199. },
  1200. }),
  1201. },
  1202. },
  1203. }
  1204. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  1205. if err != nil {
  1206. t.Fatal("Failed to initialize all servers: ", err.Error())
  1207. }
  1208. defer CloseAllServers(servers)
  1209. var errg errgroup.Group
  1210. for range 3 {
  1211. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*40))
  1212. }
  1213. if err := errg.Wait(); err != nil {
  1214. t.Error(err)
  1215. }
  1216. }