vmess_test.go 39 KB

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