aardio 官方社区

用户名  找回密码
 注册会员

QQ登录

只需一步,快速开始

帖子
查看: 17055|回复: 8

ftp.command发送“quote site pswd”命令修改密码不成功

[复制链接]

13

主题

109

回帖

971

积分

三级会员

积分
971
发表于 2014-6-13 16:37:09 | 显示全部楼层 |阅读模式
用ftp.command发送命令修改密码不成功,用process.popen调用ftp.exe没问题,请帮忙看下哪里有问题,谢谢!

用ftp.command不成功:

  1.                 try{
  2.                         ftp = inet.ftp(frmPassWord.edtFtpServer.text, frmPassWord.edtUserName.text, frmPassWord.edtOldPassWord.text);
  3.                 }
  4.                 if(ftp){
  5.                         if(ftp.command("quote site pswd " ++ frmPassWord.edtOldPassWord.text ++ " " ++ frmPassWord.edtNewPassWord.text)){
  6.                                 console.print("Password changed successfully!");
  7.                         } else {
  8.                                 console.print("Password not changed!");
  9.                         }
  10.                 }
复制代码


调用ftp.exe成功:

  1.         cmd = /*
  2. open 10.69.55.25
  3. <<USERNAME>>
  4. <<OLDPASSWD>>
  5. quote site pswd <<OLDPASSWD>> <<NEWPASSWD>>
  6. bye
  7. */
  8.         string.save("cmdfile.tmp", string.replace(string.replace(string.replace(cmd, "@@<<USERNAME>>", frmPassWord.edtUserName.text), "@@<<OLDPASSWD>>", rmPassWord.edtOldPassWord.text), "@@<<NEWPASSWD>>", frmPassWord.edtNewPassWord.text));
  9.         prcs = process.popen("ftp.exe -s:""cmdfile.tmp""");
  10.         prcs.close();
  11.         io.remove("cmdfile.tmp");
复制代码

13

主题

294

回帖

1790

积分

荣誉会员

积分
1790
发表于 2014-6-13 17:44:22 | 显示全部楼层
程序跑不了,服务器连接不了,怎么帮你看?!
可能还是要麻烦自己检查一下,例如:

1、你怎么知道哪个成功了,哪个失败了? ftp.exe 调用你又没判断。

2、"quote site pswd " ++ frmPassWord.edtOldPassWord.text ++ " " ++ frmPassWord.edtNewPassWord.text 你确认拼接后的字符串是不是真的是 ftp.exe 发过去的字符串?!

3、失败以后,输出 inet.lastResponse() 看一下服务器返回的错误信息是什么。

13

主题

109

回帖

971

积分

三级会员

积分
971
 楼主| 发表于 2014-6-13 18:21:29 | 显示全部楼层
auaau 发表于 2014-6-13 17:44
程序跑不了,服务器连接不了,怎么帮你看?!
可能还是要麻烦自己检查一下,例如:

我发的只是部分代码,ftp.command返回false,且实际检查密码并未修改,ftp.exe也对返回内容作了判断,且实际检查密码修改成功了。
如果测试的话可以在自己的FTP服务器上随便建个用户试一下。

13

主题

109

回帖

971

积分

三级会员

积分
971
 楼主| 发表于 2014-6-13 18:22:07 | 显示全部楼层
本帖最后由 ejzhang 于 2014-6-13 19:30 编辑

完整代码如下:
  1. import win.ui;
  2. import inet.ftp;
  3. import process.popen;
  4. /*DSG{{*/
  5. frmPassWord = ..win.form(text="FTP 密码修改工具";right=458;bottom=350;border="thin";exmode="none";max=false;min=false)
  6. frmPassWord.add(
  7. btnCancel={cls="button";text="取消";left=254;top=273;right=346;bottom=311;flat=1;font=LOGFONT( h=-19;weight=700 );tabstop=1;z=13};
  8. btnOK={cls="button";text="确定";left=116;top=272;right=208;bottom=310;flat=1;font=LOGFONT( h=-19;weight=700 );tabstop=1;z=12};
  9. edtFtpServer={cls="edit";text="10.69.55.25";left=190;top=78;right=396;bottom=104;autovscroll=false;font=LOGFONT( h=-16 );hidesel=1;tabstop=1;z=7};
  10. edtNewPassWord={cls="edit";left=190;top=186;right=396;bottom=212;autovscroll=false;font=LOGFONT( h=-16 );hidesel=1;password=1;tabstop=1;z=10};
  11. edtOldPassWord={cls="edit";left=190;top=151;right=396;bottom=177;autovscroll=false;font=LOGFONT( h=-16 );hidesel=1;password=1;tabstop=1;z=9};
  12. edtUserName={cls="edit";left=190;top=115;right=396;bottom=141;autovscroll=false;font=LOGFONT( h=-16 );hidesel=1;tabstop=1;z=8};
  13. edtVerifyPassWord={cls="edit";left=190;top=222;right=396;bottom=248;autovscroll=false;font=LOGFONT( h=-16 );hidesel=1;password=1;tabstop=1;z=11};
  14. lblFtpServer={cls="static";text="FTP 服务器:";left=38;top=81;right=184;bottom=110;align="right";font=LOGFONT( h=-19;weight=700 );notify=1;transparent=1;z=2};
  15. lblNewPasswd={cls="static";text="新密码:";left=69;top=188;right=184;bottom=217;align="right";font=LOGFONT( h=-19;weight=700 );notify=1;transparent=1;z=5};
  16. lblOldPasswd={cls="static";text="原密码:";left=69;top=152;right=184;bottom=181;align="right";font=LOGFONT( h=-19;weight=700 );notify=1;transparent=1;z=4};
  17. lblUserName={cls="static";text="用户名:";left=69;top=116;right=184;bottom=145;align="right";font=LOGFONT( h=-19;weight=700 );notify=1;transparent=1;z=3};
  18. lblVerifyPasswd={cls="static";text="确认密码:";left=69;top=224;right=184;bottom=253;align="right";font=LOGFONT( h=-19;weight=700 );notify=1;transparent=1;z=6};
  19. title={cls="static";text="FTP 密码修改工具";left=126;top=23;right=359;bottom=60;ah=1;align="center";aw=1;color=16711680;font=LOGFONT( h=-24;weight=700 );notify=1;transparent=1;z=1}
  20. )
  21. /*}}*/

  22. frmPassWord.btnOK.oncommand = function(id,event){
  23.         if(#string.trim(frmPassWord.edtFtpServer.text) == 0){
  24.                 win.msgbox("请输入FTP服务器地址!");
  25.                 frmPassWord.edtFtpServer.setFocus();
  26.         } elseif(#string.trim(frmPassWord.edtUserName.text) == 0){
  27.                 win.msgbox("请输入用户名!");
  28.                 frmPassWord.edtUserName.setFocus(0,-1);
  29.         } elseif(#string.trim(frmPassWord.edtOldPassWord.text) == 0){
  30.                 win.msgbox("请输入原密码!");
  31.                 frmPassWord.edtOldPassWord.setFocus(0,-1);
  32.         } elseif(#string.trim(frmPassWord.edtNewPassWord.text) == 0){
  33.                 win.msgbox("请输入新密码!");
  34.                 frmPassWord.edtNewPassWord.setFocus(0,-1);
  35.         } elseif(frmPassWord.edtNewPassWord.text != frmPassWord.edtVerifyPassWord.text){
  36.                 win.msgbox("确认密码与新密码不一致!");
  37.                 frmPassWord.edtVerifyPassWord.setFocus(0,-1);
  38.         } elseif(frmPassWord.edtOldPassWord.text == frmPassWord.edtNewPassWord.text){
  39.                 win.msgbox("原密码与新密码相同!");
  40.                 frmPassWord.edtNewPassWord.setFocus(0,-1);
  41.         } else {
  42.                 frmPassWord.btnOK.disabled = true;
  43.                 frmPassWord.btnCancel.disabled = true;
  44.                 try{
  45.                         ftp = inet.ftp(frmPassWord.edtFtpServer.text, frmPassWord.edtUserName.text, frmPassWord.edtOldPassWord.text);
  46.                 }
  47.                 if(ftp){
  48.                         if(ftp.command("SITE PSWD " ++ frmPassWord.edtOldPassWord.text ++ " " ++ frmPassWord.edtNewPassWord.text)){
  49.                                 win.msgbox("密码修改成功!");
  50.                                 frmPassWord.edtUserName.text = "";
  51.                                 frmPassWord.edtOldPassWord.text = "";
  52.                                 frmPassWord.edtNewPassWord.text = "";
  53.                                 frmPassWord.edtVerifyPassWord.text = "";
  54.                                 frmPassWord.edtUserName.setFocus(0,-1);
  55.                         } else {
  56.                                 win.msgbox("密码修改失败!");
  57.                         }
  58.                         ftp.close();
  59.                 } else {
  60.                         win.msgbox("无法连接FTP服务器!请检查用户名、密码。");
  61.                 }
  62.                 frmPassWord.btnOK.disabled = false;
  63.                 frmPassWord.btnCancel.disabled = false;
  64.         }
  65. }

  66. frmPassWord.btnCancel.oncommand = function(id,event){
  67.         frmPassWord.close();
  68. }

  69. frmPassWord.show();
  70. win.loopMessage();
复制代码

13

主题

294

回帖

1790

积分

荣誉会员

积分
1790
发表于 2014-6-13 18:51:10 | 显示全部楼层
真是很抱歉,没时间帮你去搭FTP服务器测试。
如果你有时间,把前面我提出的三个问题做一下测试,麻烦你了!再见!

13

主题

109

回帖

971

积分

三级会员

积分
971
 楼主| 发表于 2014-6-13 19:28:16 | 显示全部楼层
找到原因了,用ftp.command发送命令不用加“quote”

5

主题

429

回帖

2420

积分

五级会员

积分
2420
发表于 2014-6-13 20:53:32 | 显示全部楼层
quote "site pswd old_password new_password"

quote 的作用是发送命令,参考MSDN.
其作用就类似你自己调用 ftp.command() 函数。

实际上你只要调用 inet.lastResponse() 看一下服务端返回的错误信息,
会告诉你发送的指令哪里写错了。

13

主题

109

回帖

971

积分

三级会员

积分
971
 楼主| 发表于 2014-6-14 15:45:33 | 显示全部楼层
神码 发表于 2014-6-13 20:53
quote 的作用是发送命令,参考MSDN.
其作用就类似你自己调用 ftp.command() 函数。

多谢神码

13

主题

109

回帖

971

积分

三级会员

积分
971
 楼主| 发表于 2014-6-14 15:47:08 | 显示全部楼层
auaau 发表于 2014-6-13 18:51
真是很抱歉,没时间帮你去搭FTP服务器测试。
如果你有时间,把前面我提出的三个问题做一下测试,麻烦你了 ...

感谢auaau
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-3-14 14:53 , Processed in 0.065068 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表