3 рднрд╛рдЧреЛрдВ рдореЗрдВ рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рдХрд╣рд╛рдиреАред рднрд╛рдЧ 2 - рд╡рд┐рдХрд╛рд╕рд╛рддреНрдордХред
рдХрдИ рдордзреБрдордХреНрдЦреА рд╣реИрдВ - рдФрд░ рднреА рдЕрдзрд┐рдХ рд▓рд╛рднред
рд▓реЗрдЦ
рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ , рд╣рдо рд░рд┐рд╡рд░реНрд╕ рд╕реБрд░рдВрдЧреЛрдВ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдП, рдЙрдирдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЛ рджреЗрдЦрд╛, рдпрдордХреНрд╕ рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рдирдП рдмрдирд╛рдП рдЧрдП рдкрд╛рд╡рд░рд╢реЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдпрд╣
RSocksTun рд░рд┐рд╡рд░реНрд╕ рд╕реБрд░рдВрдЧ рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП
рдХреНрд▓рд╛рдЗрдВрдЯ рдкреЙрд╡рд░рд╢реЗрд▓ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдХрд┐рд╕ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рд╛рдЗрдорд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реЙрдХреЗрдЯ рдореИрдХреЗрдирд┐рдЬреНрдо рдФрд░ .net рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ-рд▓рд┐рдЦрдиреЗ рд╕реЗ рд▓реЗрдХрд░ рд╕реЙрдХреЗрдЯ рддрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рджреВрд╕рд░реА рдУрд░, рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ yamux рд╕реНрдЯреНрд░реАрдо рдкрд░реЛрд╕рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╕рднреА I / O рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд╕реЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдпрдордХреНрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд░реАрдб-рд░рд╛рдЗрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рд╕рд░реНрд╡рд░ рдкрд░ рд░реАрдб-рд░рд╛рдЗрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЦреИрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХрд╛ рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкреЙрд╡рд░рд╢реЗрд▓, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреНрд▓реЛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдХрд╛рдо рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдПрд╕рдПрд╕рдПрд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ;
- рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рд╣рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдзрд┐рдХрд╛рд░реА рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд╕рдХреЗ;
- рдирдИ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрдордХреНрд╕ рдкреИрдХреЗрдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рд╕рдордп-рд╕рдордп рдкрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд░рдЦ-рд░рдЦрд╛рд╡ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛;
- рдЬреИрд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рд╕реНрдЯреНрд░реАрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП yamux рдкреИрдХреЗрдЬ рдЖрддрд╛ рд╣реИ, рд╡реИрд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдореЛрдЬреЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреНрд░реАрдо (рд╕реНрдЯреНрд░реАрдо рд╕реЗ рднреНрд░рдорд┐рдд рди рд╣реЛрдирд╛) рд╢реБрд░реВ рдХрд░реЗрдВред рдореЛрдЬреЗ рдХреЗ рдЕрдВрджрд░, рдореЛрдЬреЗ 5 рд╕рд░реНрд╡рд░ рдХреЗ рдХрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ;
- рдпрд╛рдордХреНрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЯ рдХреЗ рдЖрдЧрдорди рдкрд░ - рдПрдХ 12-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХрд┐рди рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рдЖрдХрд╛рд░, рдпрд╛рдордХреНрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдЗрд╕реА рд╕реНрдЯреНрд░реАрдо рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ;
- рд╕рдордп-рд╕рдордп рдкрд░ рдЪрд▓ рд░рд╣реЗ рдореЛрдЬрд╝реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдпрдордХреНрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдбреЗрдЯрд╛ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдбреЗрдЯрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд 12-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ yamux рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдВ;
- рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ yamux рдкреИрдХреЗрдЬ рдХреЗ рдЖрдЧрдорди рдкрд░, рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрд╡рдпрдВ рдкреВрд░рд╛ рдХрд░реЗрдВ;
рддреЛ, рд╣рдорд╛рд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 3 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреНрд▓реЛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- рдореБрдЦреНрдп рдПрдХ, рдЬреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛, yamux рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдЧрд╛, рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, yamux рд╣реЗрдбрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдЧрд╛;
- рдореЛрдЬреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдоред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдХрдИ - рдПрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдореЛрдЬреЗ 5 рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдкреНрд░рд╡рд╛рд╣ рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЧрдВрддрд╡реНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВрдЧреЗ;
- рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рд╡рд╛рд╣ред рдпрд╣ рдореЛрдЬрд╝реЗ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ yamux рд╣реЗрдбрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ yamux рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ;
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдореЗрдВ рдЗрди рд╕рднреА рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ (рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рдорд╛рди) рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рддрдВрддреНрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ, рдкрд╛рдЗрдк рддрдм рдкрдВрдЬреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдЗрдк рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдирд╛рдо - рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдЗрдк рдХреА рдкрд╣рдЪрд╛рди рдЙрд╕рдХреЗ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдЧреБрдордирд╛рдо рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред (рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдкрд╛рдЗрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдП - рд╕рд╣реА?)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореБрдЦреНрдп / рд░рд┐рдЯрд░реНрди рдлреНрд▓реЛ рдФрд░ рдореЛрдЬреЗ-рдлреНрд▓реЛ рдХреЗ рдмреАрдЪ, рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдЕрдирд╛рдо рдкрд╛рдЗрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реНрдЯреНрд░реАрдо рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмреАрдЪ, рд╕рдВрдЪрд╛рд░ рд╕рд╛рдЭрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рддрдВрддреНрд░ (рд╕рд╛рдЭрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдЪрд░) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛ (рдЗрди рдЪрд░ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрдк
рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдореЛрдЬрд╝реЗ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдореЛрдЬреЗ рдзрд╛рдЧрд╛ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
- yamux рд╕рддреНрд░ рд╕рдВрдЦреНрдпрд╛: $ ymxstream;
- рдкрд╛рдЗрдк (рдЪреИрдирд▓) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рдЪрд░: $ рд╕рд┐рдкрд┐рдк, $ рдХреЙрдкрд┐рдк, $ рд╕рд┐рдкрд┐рдк, $ рд╕реЛрдкрд┐рдкред рдЪреВрдВрдХрд┐ рдЕрдирд╛рдо рдЪреИрдирд▓ рдпрд╛ рддреЛ IN рдпрд╛ OUT рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдореЛрдЬреЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рджреЛ рдЕрдирд╛рдо рдЪреИрдирд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рджреЛ рдЫреЛрд░ (рдкрд┐рдкреЗрд╕реНрдЯреНрд░реАрдо) (рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП;
- рд╕реНрдЯреНрд░реАрдо рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо $ AsyncJobResult рд╣реИ;
- рд╕реНрдЯреНрд░реАрдо рд╣реИрдВрдбрд▓рд░ - $ Psobjред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ;
- рд░рд┐рд╡рд░реНрд╕ рд╕реНрдЯреНрд░реАрдо ($ readjob) рджреНрд╡рд╛рд░рд╛ рдЕрдирд╛рдо рдкрд╛рдЗрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдоред рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рд╡рд░реНрд╕ рдпрдореВрдХреНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рдЗрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдкреНрд░рддреНрдпреЗрдХ рдореЛрдЬреЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░;
рдореБрдЦреНрдп рдзрд╛рд░рд╛
рдЗрд╕рд▓рд┐рдП, рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб (рд░реЛрд╕рдХрд╕реНрдЯреБрди - рдЧреЛрд▓рдВрдЧ рдкрд░ рд▓рд╛рдЧреВ) рдПрд╕рдПрд▓рдПрд▓ рд╕рд░реНрд╡рд░ рдЙрдард╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ;
- рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░, рд╕рд░реНрд╡рд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рддреЛ рдПрдХ yamux рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдореЛрдЬрд╝реЗ рдкреЛрд░реНрдЯ рдХреЛ рдЙрдард╛рддрд╛ рд╣реИ рдФрд░ рдореЛрдЬрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ (рд╣рдорд╛рд░реЗ рдкреНрд░реЙрдХреНрд╕рд╛рдЗрдХрд┐рдиреНрд╕, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддреНрдпрд╛рджрд┐) рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдЧрд▓рдд рд╣реИ - рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рддрд░реНрдХ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд▓рд┐рдП "рдХрд╛рдиреВрдиреА" рдкреГрд╖реНрда рд╣реИ);
- рдореЛрдЬрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╕рд░реНрд╡рд░ рд╣рдорд╛рд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо (YMX SYN) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрдордХреНрд╕ рдкреИрдХреЗрдЯ рднреЗрдЬрддрд╛ рд╣реИ;
рдпрдордХреНрд╕ рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ SSL рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ:
$tcpConnection = New-Object System.Net.Sockets.TcpClient($server, $port) $tcpStream = New-Object System.Net.Security.SslStream($tcpConnection.GetStream(),$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback])) $tcpStream.AuthenticateAsClient('127.0.0.1')
рдлрд┐рд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ 12-рдмрд╛рдЗрдЯ рдпрдордХреНрд╕ рд╣реЗрдбрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИред
рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИ ... рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдмрд╕ рд╕реЙрдХреЗрдЯ рд╕реЗ 12 рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рдирд╛:
$num = $tcpStream.Read($tmpbuffer,0,12)
рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреЗрд╡рд▓ рднрд╛рдЧ рдХреЗ рдЖрдЧрдорди рдХреЗ рдмрд╛рдж рд░реАрдб рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд▓реВрдк рдореЗрдВ рд╕рднреА 12 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
do { try { $num = $tcpStream.Read($tmpbuffer,0,12) } catch {} $tnum += $num $ymxbuffer += $tmpbuffer[0..($num-1)] }while ($tnum -lt 12 -and $tcpConnection.Connected)
рд▓реВрдк рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдпрдордХреНрд╕ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ $ ymxbuffer рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реЗрдЯ рдлреНрд▓реИрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд 12-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрдордХреНрд╕ рд╣реЗрдбрд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- ymx syn - рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ;
- ymx fin - рдзрд╛рд░рд╛ рдкреВрд░реНрдгрддрд╛;
- ymx рдбреЗрдЯрд╛ - рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (рд╡реЗ рдХрд┐рд╕ рдЖрдХрд╛рд░ рдФрд░ рдХрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИрдВ);
- ymx рдкрд┐рдВрдЧ - рд░рдЦрдиреЗ рдХрд╛ рд╕рдВрджреЗрд╢;
- ymx рдЬреАрдд рдЕрджреНрдпрддрди - рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреА рдкреБрд╖реНрдЯрд┐;
рдХреБрдЫ рднреА рдЬреЛ рд╕реВрдЪреАрдмрджреНрдз рдкреНрд░рдХрд╛рд░ рдХреЗ рдпрдореВрдХреНрд╕ рд╣реЗрдбрд░ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ 10 рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рдФрд░ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИ рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
(рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдорд┐рдЯрд╛ рджреЗрдВ, рдбрд┐рд╕реНрдХ рдХреЛ рдорд┐рдЯрд╛ рджреЗрдВ, рдЕрдВрддрд┐рдо рдирд╛рдо рдмрджрд▓реЗрдВ, рдирдпрд╛ рдкрд╛рд╕рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдВ, рд╕реВрдЪреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреЗрд╢ рдЫреЛрдбрд╝ рджреЗрдВ, рдЖрджрд┐ ...)рдПрдХ рдирдпрд╛ рдореЛрдЬреЗ рдзрд╛рдЧрд╛ рдмрдирд╛рдирд╛рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ yamux рдкреИрдХреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░рдорд╢рдГ рджреЛ рдЕрдЬреНрдЮрд╛рдд рд╕рд░реНрд╡рд░ рдкрд╛рдЗрдк ($ sipipe, $ sopipe) рдмрдирд╛рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░рдорд╢рдГ рдЧреНрд░рд╛рд╣рдХ рдкрд╛рдЗрдк ($ cipipe, $ copipe) рдмрдирд╛рддрд╛ рд╣реИ:
$sipipe = new-object System.IO.Pipes.AnonymousPipeServerStream(1) $sopipe = new-object System.IO.Pipes.AnonymousPipeServerStream(2,1) $sipipe_clHandle = $sipipe.GetClientHandleAsString() $sopipe_clHandle = $sopipe.GetClientHandleAsString() $cipipe = new-object System.IO.Pipes.AnonymousPipeClientStream(1,$sopipe_clHandle) $copipe = new-object System.IO.Pipes.AnonymousPipeClientStream(2,$sipipe_clHandle)
рдореЛрдЬреЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдирд╕реНрдкреЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╕реНрдЯреНрд░реАрдо (StopFlag) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдмреНрд▓реЙрдХ SocksScript рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдореЛрдЬрд╝реЗ рд╕рд░реНрд╡рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
$state = [PSCustomObject]@{"StreamID"=$ymxstream;"inputStream"=$cipipe;"outputStream"=$copipe} $PS = [PowerShell]::Create() $socksrunspace = [runspacefactory]::CreateRunspace() $socksrunspace.Open() $socksrunspace.SessionStateProxy.SetVariable("StopFlag",$StopFlag) $PS.Runspace = $socksrunspace $PS.AddScript($socksScript).AddArgument($state) | Out-Null [System.IAsyncResult]$AsyncJobResult = $null $StopFlag[$ymxstream] = 0 $AsyncJobResult = $PS.BeginInvoke()
рдмрдирд╛рдП рдЧрдП рдЪрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ ArrayList рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ - рдкрд╛рдпрдерди рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ
[System.Collections.ArrayList]$streams = @{}
рдЬреЛрдбрд╝рдирд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рдРрдб рд╡рд┐рдзрд┐ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:
$streams.add(@{ymxId=$ymxstream;cinputStream=$cipipe;sinputStream=$sipipe;coutputStream=$copipe;soutputStream=$sopipe;asyncobj=$AsyncJobResult;psobj=$PS;readjob=$null;readbuffer=$readbuffer}) | out-null
рдпрдордХреНрд╕ рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧрдпрдордХреНрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдореЛрдЬрд╝реЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдирд┐рдпрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╣рдореЗрдВ рдпрдореВрдХреНрд╕ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП (рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореЛрдЬрд╝реЗ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рдВрдЦреНрдпрд╛) рдФрд░ 12-рдмрд╛рдЗрдЯ рдпреЙрдЯ рд╣реЗрдбрд░ рд╕реЗ рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛:
$ymxstream = [bitconverter]::ToInt32($buffer[7..4],0) $ymxcount = [bitconverter]::ToInt32($buffer[11..8],0)
рдлрд┐рд░, ArrayList рд╕реНрдЯреНрд░реАрдо рд╕реЗ, ymxId рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕ рдореЛрдЬреЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдиреБрд░реВрдк рд╕рд░реНрд╡рд░ рдЖрдЙрдЯ-рдкрд╛рдЗрдк рдХреЗ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
if ($streams.Count -gt 1){$streamind = $streams.ymxId.IndexOf($ymxstream)} else {$streamind = 0} $outStream = $streams[$streamind].soutputStream
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реЙрдХреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдпрд╣ рдпрд╛рдж рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдореЗрдВ рд▓реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
$databuffer = $null $tnum = 0 do { if ($buffer.length -le ($ymxcount-$tnum)) { $num = $tcpStream.Read($buffer,0,$buffer.Length) }else { $num = $tcpStream.Read($buffer,0,($ymxcount-$tnum)) } $tnum += $num $databuffer += $buffer[0..($num-1)] }while ($tnum -lt $ymxcount -and $tcpConnection.Connected)
рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рдЗрдк рдкрд░ рд▓рд┐рдЦреЗрдВ:
$num = $tcpStream.Read($buffer,0,$ymxcount) $outStream.Write($buffer,0,$ymxcount)
рдпрдордХреНрд╕ рдлрд┐рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ - рдПрдВрдб рд╕реНрдЯреНрд░реАрдордЬрдм рд╣рдо рдПрдХ yamix рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ 12-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рд╕реЗ yamux рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
$ymxstream = [bitconverter]::ToInt32($buffer[7..4],0)
рдлрд┐рд░, рдПрдХ рд╕рд╛рдЭрд╛ рдЪрд░ (рдпрд╛ рдмрд▓реНрдХрд┐, рдЭрдВрдбреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬрд╣рд╛рдВ рд╕реВрдЪрдХрд╛рдВрдХ рдпрдордХреНрд╕ рд╕реНрдЯреНрд░реАрдо рдирдВрдмрд░ рд╣реИ), рд╣рдо рдореЛрдЬреЗ рдХреЗ рдзрд╛рдЧреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ:
if ($streams.Count -gt 1){$streamind = $streams.ymxId.IndexOf($ymxstream)} else {$streamind = 0} if ($StopFlag[$ymxstream] -eq 0){ write-host "stopflag is 0. Setting to 1" $StopFlag[$ymxstream] = 1 }
рдзреНрд╡рдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЛрдЬреЗ рдХреА рдзрд╛рд░рд╛ рдХреЛ рдорд╛рд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдЬреЗ рдХреА рдзрд╛рд░рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 200 рдПрдордПрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
start-sleep -milliseconds 200 #wait for thread check flag
рдлрд┐рд░ рдЗрд╕ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдкрд╛рдЗрдкреЛрдВ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рд╕рдВрдмрдВрдзрд┐рдд рд░рдирд╕реНрдкреЗрд╕ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлреНрд░реА рд░рд┐рд╕реЛрд░реНрд╕ рдкрд░ рдорд╛рд░реЗрдВ:
$streams[$streamind].cinputStream.close() $streams[$streamind].coutputStream.close() $streams[$streamind].sinputStream.close() $streams[$streamind].soutputStream.close() $streams[$streamind].psobj.Runspace.close() $streams[$streamind].psobj.Dispose() $streams[$streamind].readbuffer.clear()
рдореЛрдЬрд╝реЗ рдХреА рдзрд╛рд░рд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ ArrayList рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$streams.RemoveAt($streamind)
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ .Net рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рдЧрднрдЧ 100-200 рдПрдордмреА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧреА, рдЬреЛ рдПрдХ рдЕрдиреБрднрд╡реА рдФрд░ рд╕рдВрдХреНрд╖рд╛рд░рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
[System.GC]::Collect()#clear garbage to minimize memory usage
рдпрдордХреНрд╕ рд▓рд┐рдкрд┐ - рдЙрд▓реНрдЯрд╛ рдкреНрд░рд╡рд╛рд╣
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЛрдЬрд╝реЗ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдПрдХ рдЕрд▓рдЧ рдпрдордХреНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреНрд░реАрдо рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд (рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рдж) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рд╕рдордп-рд╕рдордп рдкрд░ ArrayList $ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рдореЛрдЬреЗ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рдЗрдк рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ:
foreach ($stream in $state.streams){ ... }
рдФрд░ рдпрджрд┐ рдЙрдирдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдпрдордХреНрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ 12-рдмрд╛рдЗрдЯ рдпрдордХреНрд╕ рд╣реЗрдбрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпрдордХреНрд╕ рд╕рддреНрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛ:
if ($stream.readjob -eq $null){ $stream.readjob = $stream.sinputStream.ReadAsync($stream.readbuffer,0,1024) }elseif ( $stream.readjob.IsCompleted ){ #if read asyncjob completed - generate yamux header $outbuf = [byte[]](0x00,0x00,0x00,0x00)+ [bitconverter]::getbytes([int32]$stream.ymxId)[3..0]+ [bitconverter]::getbytes([int32]$stream.readjob.Result)[3..0] $state.tcpstream.Write($outbuf,0,12) #write raw data from socks thread to yamux $state.tcpstream.Write($stream.readbuffer,0,$stream.readjob.Result) $state.tcpstream.flush() #create new readasync job $stream.readjob = $stream.sinputStream.ReadAsync($stream.readbuffer,0,1024) }else{ #write-host "Not readed" }
рдпрдордХреНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЛрдЬрд╝реЗрдХ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП $ StopFlag рд╕рд░рдгреА рдореЗрдВ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ 2 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдЬреЛ рдореЛрдЬреЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореЛрдЬрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реНрд░реГрдВрдЦрд▓рд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: yamuxScript рдХреЛ yamux рд╕рд░реНрд╡рд░ рдХреЛ рд╡рд┐рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ рдореЛрдЬрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрдХреЗрдд рджреЗред
if ($StopFlag[$stream.ymxId] -eq 2){ $stream.ymxId | out-file -Append c:\work\log.txt $outbuf = [byte[]](0x00,0x01,0x00,0x04)+ [bitconverter]::getbytes([int32]$stream.ymxId)[3..0]+ [byte[]](0x00,0x00,0x00,0x00) $state.tcpstream.Write($outbuf,0,12) $state.tcpstream.flush() }
рдпрдордХреНрд╕ рд╡рд┐рдВрдбреЛ рдЕрдкрдбреЗрдЯ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, yamuxScript рдХреЛ yamux рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ YMX WinUpdate Message рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрдордХреНрд╕ рдореЗрдВ рдпрд╣ рддрдВрддреНрд░ рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ (рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рдорд╛рди) рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ - рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╛рд╡рддреА рдХреЗ рдмрд┐рдирд╛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ 256 Kbytes рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдЖрдХрд╛рд░ рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рдбреЗрдЯрд╛ рдХреЛ рднреЗрдЬрддреЗ рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╡рд┐рдВрдбрдкреВ рдЕрдкрдбреЗрдЯ рдкреИрдХреЗрдЬ рдХреЛ рдпрдордХреНрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрдордХреНрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдЭрд╛ рд╕рд░рдгреА $ RcvBytes рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╕реЗ рдореБрдЦреНрдп рдзрд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреА рд╣реИред рдпрджрд┐ рд╕реЗрдЯ рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛ рдЧрдИ рд╣реИ, рддреЛ yamuxScript рдХреЛ WinUpdate рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдкреИрдХреЗрдЯ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
if ($RcvBytes[$stream.ymxId] -ge 256144){ #out win update ymx packet with 256K size $outbuf = [byte[]](0x00,0x01,0x00,0x00)+ [bitconverter]::getbytes([int32]$stream.ymxId)[3..0]+ (0x00,0x04,0x00,0x00) $state.tcpstream.Write($outbuf,0,12) $RcvBytes[$stream.ymxId] = 0 }
SocksScript рд╕реНрдЯреНрд░реАрдо
рдЪрд▓рд┐рдП рдЕрдм рд╕реАрдзреЗ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдореЛрдЬрд╝реЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЬрд╛рдПрдБред
рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдореЛрдЬреЗ рдХреЛ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
$state = [PSCustomObject]@{"StreamID"=$ymxstream;"inputStream"=$cipipe;"outputStream"=$copipe} $PS = [PowerShell]::Create() .... $AsyncJobResult = $PS.BeginInvoke()
рдФрд░ рдХреЙрд▓ рдХреЗ рд╕рдордп, рдирд┐рдореНрди рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд $ рд╕реНрдерд┐рддрд┐ рдЪрд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ:
- $ State.streamId - yamux рд╕рддреНрд░ рд╕рдВрдЦреНрдпрд╛;
- $ State.inputStream - рдкрд╛рдЗрдк рдкрдврд╝реЗрдВ;
- $ state.oututStream - рдкрд╛рдЗрдк рд▓рд┐рдЦреЗрдВ;
рдкрд╛рдЗрдк рдореЗрдВ рдбреЗрдЯрд╛ рдпрдордХреНрд╕ рд╣реЗрдбрд░ рдХреЗ рдмрд┐рдирд╛ рдХрдЪреНрдЪреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рд╡реЗ рдореЛрдЬрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдП рдереЗред
рдореЛрдЬреЗ рдХреЗ рдЕрдВрджрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдореЛрдЬреЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ 5 рд╣реИ:
$state.inputStream.Read($buffer,0,2) | Out-Null $socksVer=$buffer[0] if ($socksVer -eq 5){ ... }
рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ Invoke-SocksProxy рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдлрд░реНрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЙрд▓ рдХреЗ рдмрдЬрд╛рдп
$AsyncJobResult.AsyncWaitHandle.WaitOne(); $AsyncJobResult2.AsyncWaitHandle.WaitOne();
рдЪрдХреНрд░реАрдп рдореЛрдб рдореЗрдВ $ StopFlag рд╕рд░рдгреА рдореЗрдВ tcp рдХрдиреЗрдХреНрд╢рди рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╛рдкреНрддрд┐ рдзреНрд╡рдЬ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдореЛрдЬрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ yuxux рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ:
while ($StopFlag[$state.StreamID] -eq 0 -and $tmpServ.Connected ){ start-sleep -Milliseconds 50 }
рдпрджрд┐ рд╣рдо рдЬрд┐рд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ tcp рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ 2 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ yamuxscript рдХреЛ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд ymx рдлрд┐рди рдкреИрдХреЗрдЯ рдХреЛ yamux рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдЧрд╛:
if ($tmpServ.Connected){ $tmpServ.close() }else{ $StopFlag[$state.StreamID] = 2 }
рдпрджрд┐ рдлрд╝реБрдЯрдмреЙрд▓ рд╕рд░реНрд╡рд░ рдЧрдВрддрд╡реНрдп рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рднреА рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
if($tmpServ.Connected){ ... } else{ $buffer[1]=4 $state.outputStream.Write($buffer,0,2) $StopFlag[$state.StreamID] = 2 }
рджреВрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдорд╛рд░реЗ рдХреЛрдбрд┐рдВрдЧ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ RsocksTun рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд╡рд░рд╢реЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ:
- рдПрд╕рдПрд╕рдПрд▓ рдХрдиреЗрдХреНрд╢рди
- рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг;
- рдпрдордХреНрд╕-рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдВрдЧрд▓ рдкрд┐рдВрдЧреНрд╕;
- рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдореЛрдб;
- рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди;
рд▓реЗрдЦ рдХреЗ рдмрд╛рд╣рд░, рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрдирд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛, рдЬрд┐рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣реЛрдЧрд╛ред
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ - рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рдЬреИрд╕реЗ, рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝реЗрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред