📄 ladmin
字号:
searchaccount($cmdlist[1],$cmdlist[2]);
}elsif("state"=~/^\Q$cmdlist[0]/){
changestate($cmdlist[1],$cmdlist[2]);
}elsif($cmdlist[0]){
print "Unknown command [".$cmdlist[0]."]\n";
}
# $term->addhistory($cmd) if $cmdlist[0];
};
if($@){
print "Error [".$cmdlist[0]."]\n$@";
}
};
# 廔椆張棟
quit();
print "bye.\n";
exit(0);
#--------------------------------------------------------------------------
# 傾僇僂儞僩儕僗僩昞帵
sub listaccount(){
my($st,$ed)= @_;
print $so pack("vV2c",0x7920,$st,$ed,0);
$so->flush();
$buf=readso(4);
if(unpack("v",$buf)!=0x7921){
print "List failed.\n";
exit(10);
}
# 0123456789 012345678901234567890123 012345
print "account_id user_id gender count state\n";
print "-------------------------------------------------------\n";
my($i);
my($len)=unpack("x2v",$buf);
for($i=4;$i<$len;$i+=61){
my(@dat)=unpack("Va24ca24VV",readso(61));
printf "%10d %-24s %-6s%6d %-6s\n",$dat[0],$dat[1],
("Female","Male","Server")[$dat[2]],$dat[4],
("Normal","Banned")[$dat[5]?1:0];
}
return 0;
}
# 傾僇僂儞僩捛壛
sub addaccount(){
my($userid,$sex,$passwd)= @_;
if($userid=~/[^A-Za-z0-9\@-_]/){
print "Illeagal charactor found in user_id ".$`."[${&}]${'}\n";
return 101;
}
if(length($userid)<4 || length($userid)>24){
print "Account id too short or long. please input 4-24bytes.\n";
return 102;
}
$sex=uc(substr($sex,0,1));
if( $sex!~/^[MF]$/ ){
print "Illeagal gender [$sex] please input M or F.\n";
return 103;
}
if($passwd eq ""){
return 108 if( ($passwd=typepasswd()) eq "" );
}
if($passwd=~/[\x00-\x1f]/){
my($c)=length($`)+1;
print "Illeagal charactor found in password (".makeordinal($c)." charactor).\n";
return 104;
}
if(length($passwd)<4){
print "Password too short or long. please input 4-24bytes.!\n";
return 105;
}
print $so pack("v2a24a24a1", 0x7930,53, $userid,$passwd,$sex );
$so->flush();
$buf=readso(2);
if(unpack("v",$buf)!=0x7931){
print "Packet error.\n";
return 106;
}
$buf=readso(26);
print "Account [$userid] ";
if(unpack("v",$buf)!=0){
print "creation failed. same account exists.\n";
return 107;
}else{
print "is successfully created.\n";
}
return 0;
}
# 傾僇僂儞僩嶍彍
sub delaccount(){
my($userid)= @_;
print "** Are you really sure to DELETE account [$userid]? (y/n) ";
if(lc(substr(<STDIN>,0,1)) ne "y"){
return 121;
}
print $so pack("v2a24", 0x7932,28, $userid);
$so->flush();
$buf=readso(2);
if(unpack("v",$buf)!=0x7933){
print "Packet error.\n";
return 122;
}
$buf=readso(26);
print "Account [$userid] ";
if(unpack("v",$buf)!=0){
print "deletion failed. account dosent exist.\n";
return 123;
}else{
print "is successfully DELETED.\n";
}
return 0;
}
# 傾僇僂儞僩僷僗儚乕僪曄峏
sub changepasswd(){
my($userid,$passwd)= @_;
if($userid eq ""){
print "Please input account id.\n";
return 136;
}
if($passwd eq ""){
return 134 if( ($passwd=typepasswd()) eq "" );
}
if(length($passwd)<4){
print "New password too short or long. please input 4-24bytes.!\n";
return 131;
}
if($passwd=~/[\x00-\x1f]/){
my($c)=length($`)+1;
print "Illeagal charactor found in password (".makeordinal($c)." charactor).\n";
return 135;
}
print $so pack("v2a24a24", 0x7934,52, $userid,$passwd);
$so->flush();
$buf=readso(2);
if(unpack("v",$buf)!=0x7935){
print "Packet error.\n";
return 132;
}
$buf=readso(26);
print "Account [$userid] ";
if(unpack("v",$buf)!=0){
print "password changing failed. account dosent exist.\n";
return 133;
}else{
print "password successfully changed.\n";
}
return 130;
}
# 傾僇僂儞僩専嶕
sub searchaccount(){
my($p1,$p2)= @_;
my($exp,$st,$n)=("",0,0);
if($p1 eq"-e" || $p1 eq"-r" || $p1 eq"--regex" || $p1 eq"--expr"){
$exp=$p2;
}else{
my($c)=0;
$exp=$p1;
$exp=~s/([\@])/\\$1/g;
$c+= $exp=~s/([\-\[\]])/\\$1/g;
$c+= $exp=~s/([\*\?])/.$1/g;
$c+= $exp=~s/\\\[(.)\\\-(.)\\\]/[$1-$2]/g;
$exp="^$exp\$" if $c;
}
if( eval{ ""=~/$exp/; }, $@ ){
print "Regular-Expression compiling failed.\n";
return 141;
}
# 0123456789 012345678901234567890123 012345
print "account_id user_id gender count state\n";
print "-------------------------------------------------------\n";
while(1){
print $so pack("vV2c",0x7920,$st,0,0);
$so->flush();
$buf=readso(4);
if(unpack("v",$buf)!=0x7921){
print "Search failed.\n";
exit(10);
}
my($i);
my($len)=unpack("x2v",$buf);
last if($len<=4);
for($i=4;$i<$len;$i+=61){
my(@dat)=unpack("Va24ca24VV",readso(61));
$st=$dat[0]+1;
next if( $dat[1]!~/$exp/ );
printf "%10d %-24s %-6s%6d %-6s\n",$dat[0],$dat[1],
("Female","Male","Server")[$dat[2]],$dat[4],
("Normal","Banned")[$dat[5]?1:0];
$n++;
}
}
print "$n account(s) found.\n";
return 0;
}
# 僶儞忬懺曄峏梫媮
sub changestate {
my($userid,$s)= @_;
my(%p)=("n"=>0,"u"=>0,"b"=>1);
if($s eq ""){
print "Please input new state [b] or [n].\n";
return 151;
}
$s=lc(substr($s,0,1));
if(exists $p{$s}){ $s=$p{$s}; }
else{ $s=int($s); }
print $so pack("vva24V",0x7936,32,$userid,$s);
$so->flush();
$buf=readso(2);
if(unpack("v",$buf)!=0x7937){
print "Packet error.\n";
return 152;
}
$buf=readso(30);
my(@dat)=unpack("va24V",$buf);
if($dat[0]==0){
print "account [$userid] is successfully ".
( ("Unbanned","Banned")[$dat[2]?1:0]).".\n";
}else{
print "account [$userid] state changing failed. (".
(( "Normal","Banned" )[$dat[2]?1:0]) .")\n";
}
}
# 愗抐梫媮
sub quit(){
print $so pack("v",0x7532);
$so->flush();
}
# READY怣崋懸偪乮枹巊梡乯
sub waitready(){
$buf=readso(2);
if(unpack("v",$buf)!=0x791f){
print "Command stream error.\n";
exit(9);
}
return 0;
}
# 昗弨弌椡偺僼儔僢僔儏(枹巊梡)
sub flush_stdout {
$|=1;
$|=0;
}
# 僜働僢僩偐傜僨乕僞傪撉傒弌偡
sub readso(){
my($len)=shift;
my($buf);
if( read($so,$buf,$len)<$len ){
print "Socket read error.\n";
exit(3);
}
return $buf;
}
# 僷僗儚乕僪擖椡
sub typepasswd {
my($passwd1,$passwd2);
cbreak();
print "type password > "; $passwd1=<STDIN>; chomp($passwd1); print "\n";
print "verify password > "; $passwd2=<STDIN>; chomp($passwd2); print "\n";
cooked();
if($passwd1 ne $passwd2){
print "Password verification failed. Please input same password.\n";
return "";
}
return $passwd1;
}
# 彉悢嶌惉
sub makeordinal {
my($c)= shift;
if($c%10<4 && $c%10!=0 && ($c<10 || $c>20) ){
return $c.("st","nd","rd")[$c%10-1];
}
return $c."th";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -