vmess_test.go 39 KB

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