@@ -59,11 +59,72 @@ export class LayerMinus {
5959 egressNodes . forEach ( async n => n . publicKeyObj = await openpgp . readKey ( { armoredKey : n . armoredPublicKey } ) )
6060 }
6161
62+ private getRandomEntryNodes = ( node : nodes_info | null = null ) :nodes_info => {
63+ const randomIndex = Math . floor ( Math . random ( ) * ( this . entryNodes . length ) )
64+ const retNode = this . entryNodes [ randomIndex ]
65+ if ( ! node || node . ip_addr !== retNode . ip_addr ) {
66+ return retNode
67+ }
68+
69+ return this . getRandomEntryNodes ( node )
70+ }
71+
72+ private getRandomeEressNodes = ( node : nodes_info | null = null ) :nodes_info => {
73+ const randomIndex = Math . floor ( Math . random ( ) * ( this . egressNodes . length ) )
74+ const retNode = this . egressNodes [ randomIndex ]
75+ if ( ! node || node . ip_addr !== retNode . ip_addr ) {
76+ return retNode
77+ }
78+
79+ return this . getRandomeEressNodes ( node )
80+ }
81+
82+ public makeConnectNew : ( host : string , port : number , initialData : Buffer | null ) => Promise < makeConnectResult > = async ( host , port , initialData ) => {
83+ logger ( Colors . blue ( `LayerMinus makeConnect ${ host } :${ port } ` ) )
84+ const entryNode1 = this . getRandomEntryNodes ( )
85+ const entryNode2 = this . getRandomEntryNodes ( entryNode1 )
86+ const egressNode = this . getRandomeEressNodes ( )
87+
88+ const requestData : VE_IPptpStream [ ] = [ {
89+ order : 0 ,
90+ host,
91+ port,
92+ buffer : initialData ?. toString ( 'base64' ) || ''
93+ } ]
94+
95+ const command : SICommandObj = {
96+ command : 'SaaS_Sock5_v2' ,
97+ algorithm : 'aes-256-cbc' ,
98+ Securitykey : Buffer . from ( getRandomValues ( new Uint8Array ( 16 ) ) ) . toString ( 'base64' ) ,
99+ requestData,
100+ walletAddress : this . wallet . address . toLowerCase ( )
101+ }
102+
103+ const hostInfo = `${ host } :${ port } `
104+
105+ const infoData : ITypeTransferCount = {
106+ hostInfo : hostInfo ,
107+ startTime : new Date ( ) . getTime ( ) ,
108+ download : 0 ,
109+ upload : 0 ,
110+ nodeIpaddress : egressNode . ip_addr ,
111+ endTime : 0
112+ }
113+
114+ const message = JSON . stringify ( command )
115+ const signMessage = await this . wallet . signMessage ( message )
116+ const encryptedCommand = await encrypt_Message ( egressNode . publicKeyObj , { message, signMessage } )
117+ const data = otherRequestForNet ( JSON . stringify ( { data : encryptedCommand } ) , entryNode1 . ip_addr , 80 , 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' )
118+ const data1 = otherRequestForNet ( JSON . stringify ( { data : encryptedCommand } ) , entryNode1 . ip_addr , 80 , 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' )
119+
120+ return { entryNode : entryNode1 . ip_addr , egressNode : egressNode . ip_addr , initialData : data , entryNode1 : entryNode2 . ip_addr , initialData1 : data1 }
121+ }
62122
63123 public makeConnect : ( host : string , port : number , initialData : Buffer | null ) => Promise < makeConnectResult > = async ( host , port , initialData ) => {
64124 logger ( Colors . blue ( `LayerMinus makeConnect ${ host } :${ port } ` ) )
65- const entryNode = getRamdomNode ( this . entryNodes )
66- const egressNode = getRamdomNode ( this . egressNodes )
125+ const entryNode = this . getRandomEntryNodes ( )
126+ const egressNode = this . getRandomeEressNodes ( )
127+
67128 const requestData : VE_IPptpStream [ ] = [ {
68129 order : 0 ,
69130 host,
0 commit comments