;============================ ; cp1251 to UTF8 Convertor ; using socks5 ;============================ on *:LOAD:{ //echo -a LOADED script: CP1251 to UTF8 Convertor } on *:UNLOAD:{ //echo -a UNLOADED script: CP1251 to UTF8 Convertor } alias -l eval_ascii { bset &char 1 $1 return &char } alias -l codepage { ; cp1251 >>> utf8 bset -t $+(&,$1,::,codepage) 1 $replace($bvar($1,1-).text,$chr(192),А,$chr(193),Б,$chr(194),В,$chr(195),Г,$chr(196),Д,$chr(197),Е,$chr(198),Ж,$chr(199),З,$chr(200),И,$chr(201),Й,$chr(202),К,$chr(203),Л,$chr(204),М,$chr(205),Н,$chr(206),О,$chr(207),П,$chr(208),Р,$chr(209),С,$chr(210),Т,$chr(211),У,$chr(212),Ф,$chr(213),Х,$chr(214),Ц,$chr(215),Ч,$chr(216),Ш,$chr(217),Щ,$chr(218),Ъ,$chr(219),Ы,$chr(220),Ь,$chr(221),Э,$chr(222),Ю,$chr(223),Я,$chr(224),а,$chr(225),б,$chr(226),в,$chr(227),г,$chr(228),д,$chr(229),е,$chr(230),ж,$chr(231),з,$chr(232),и,$chr(233),й,$chr(234),к,$chr(235),л,$chr(236),м,$chr(237),н,$chr(238),о,$chr(239),п,$chr(240),р,$chr(241),с,$chr(242),т,$chr(243),у,$chr(244),ф,$chr(245),х,$chr(246),ц,$chr(247),ч,$chr(248),ш,$chr(249),щ,$chr(250),ъ,$chr(251),ы,$chr(252),ь,$chr(253),э,$chr(254),ю,$chr(255),я) return $+(&,$1,::,codepage) } on *:START: { if ($hget(socks)) hfree $v1 hmake socks hadd socks username username hadd socks password password socklisten -d 127.0.0.1 socks 6839 } on *:SOCKLISTEN:socks*: { if (socks.aux.* iswm $sockname) { var %active = $replace($sockname,aux,active) var %listen = $replace($sockname,aux,listen) sockaccept %active sockmark %active %listen sockwrite %listen $eval_ascii(5 0 0 1 $replace($sock(%active).ip,.,$chr(32)) $replace($gettok($longip($sock(%active).bindport),3-,46),.,$chr(32))) } else { hinc socks sockets var %sock = $+(socks.listen.,$hget(socks,sockets)) sockaccept %sock sockmark %sock $replace(%sock,listen,active) H } } on *:SOCKOPEN:socks.*: { tokenize 32 $sock($sockname).mark if (socks.active.* iswm $sockname) { if ($sockerr) sockwrite $1 $eval_ascii(5 4) else sockwrite $1 $eval_ascii(5 0) } } on *:SOCKREAD:socks.*: { if ($sockerr) return tokenize 32 $sock($sockname).mark if ($sock($1).sq > 8192) return sockread $+(&,$sockname) if ($sockbr = 0) return if (socks.listen.* iswm $sockname) { if ($2 == H) { if (2 isin $bvar($+(&,$sockname),3,$bvar($+(&,$sockname),2))) sockwrite $sockname $eval_ascii(5 2) else sockwrite $sockname $eval_ascii(5 0) if ($hget(socks,username)) || ($hget(socks,password)) sockmark $sockname $1 A else sockmark $sockname $1 R } elseif ($2 == A) { var %access = $false if ($bvar($+(&,$sockname),1) == 1) { if ($hget(socks,username) == $bvar($+(&,$sockname),3,$bvar($+(&,$sockname),2,1)).text) && ($hget(socks,password) == $bvar($+(&,$sockname),$calc(4 + $bvar($+(&,$sockname),2,1)),$calc(3 + $bvar($+(&,$sockname),2,1))).text) var %access = $true sockwrite $sockname $eval_ascii(1 0) sockmark $sockname $1 R } if (%access == $false) sockclose $sockname } elseif ($2 == R) { if ($bvar($+(&,$sockname),1) == 5) { var %ip, %port if ($bvar($+(&,$sockname),4) == 1) { var %ip = $replace($bvar($+(&,$sockname),5,4),$chr(32),.) var %port = $longip($replace(0 0 $bvar($+(&,$sockname),9,2),$chr(32),.)) } elseif ($bvar($+(&,$sockname),4) == 3) { var %i = 6 + $bvar($+(&,$sockname),5) var %ip = $bvar($+(&,$sockname),6,$bvar($+(&,$sockname),5)).text var %port = $longip($replace(0 0 $bvar($+(&,$sockname),%i) $bvar($+(&,$sockname),$calc(%i + 1)),$chr(32),.)) } else { sockwrite $sockname $eval_ascii(5 8 0 1 0 0 0 0 0 0) sockclose $sockname return } if ($bvar($+(&,$sockname),2) == 1) { sockopen $1 %ip %port sockmark $1 $sockname sockmark $sockname $1 } elseif ($bvar($+(&,$sockname),2) == 2) { var %port = 1024, %sock = $replace($1,active,aux) while (!$portfree(%port)) inc %port socklisten %sock %port sockwrite $sockname $eval_ascii(5 0 0 1 $replace($sock(socks).bindip,.,$chr(32)) $replace($gettok($longip(%port),3-,46),.,$chr(32))) sockmark $sockname %sock } else { sockwrite $sockname $eval_ascii(5 7 0 1 0 0 0 0 0 0) sockclose $sockname } } else sockclose $sockname } else { if ($sock($1)) sockwrite $1 $codepage($+(&,$sockname)) else sockclose $sockname } } elseif (socks.active.* iswm $sockname) { if ($sock($1)) sockwrite $1 $codepage($+(&,$sockname)) else sockclose $sockname } } on *:SOCKCLOSE:socks.*: { sockclose $+(socks.*.,$gettok($sockname,3,46)) }