nhtoby

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

FTP开通后一般会有一个分配好的密码,如果用户想修改这个密码可以用命令的方式来修改。但并不是每个人都懂得如何使用命令,如果可以提供一个网页,可以让用户自己修改的话那就方便多了。以下的代码主要是通过.net调用微软封装好的wininet.dll动态连接库里面的一些方法来现实修改密码的,这个类还封装了其它的方法,可以应用于其它的网络服务。这些例子也可以做为.net里如何调用windows API函数的例子

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices; 

public partial class _Default : System.Web.UI.Page 
{
    
public enum InternetOpenType
    
{
        Preconfig 
= 0,
        Direct 
= 1,
        Proxy 
= 3,
        PreconfigWithNoAutoproxy 
= 4,
    }


    
public enum InternetPort
    
{
        InvalidPortNumber 
= 0,
        DefaultFtpPort 
= 21,
        DefaultGopherPort 
= 70,
        DefaultHttpPort 
= 80,
        DefaultHttpsPort 
= 443,
        DefaultSocksPort 
= 1080,
    }


    
public enum InternetService
    
{
        Ftp 
= 1,
        Gopher 
= 2,
        Http 
= 3,
    }


    [DllImport(
"WinInet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    
public static extern IntPtr InternetOpen(
        [MarshalAs(UnmanagedType.LPTStr)] 
string agent,
        InternetOpenType accessType,
        [MarshalAs(UnmanagedType.LPTStr)] 
string lpszProxyName,
        [MarshalAs(UnmanagedType.LPTStr)] 
string lpszProxyBypass,
        
int flags
        );

    [DllImport(
"wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    
private static extern bool FtpCommand(
        IntPtr hConnect,
        
bool expectResponse,
        IntPtr dwFlags,
        [MarshalAs(UnmanagedType.LPTStr)] 
string lpszCommand,
        IntPtr context,
        IntPtr phFtpCommand
        );

    [DllImport(
"WinInet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    
public static extern IntPtr InternetConnect(
       IntPtr hInternet,
       [MarshalAs(UnmanagedType.LPTStr)] 
string serverName,
       InternetPort serverPort,
       [MarshalAs(UnmanagedType.LPTStr)] 
string username,
       [MarshalAs(UnmanagedType.LPTStr)] 
string password,
       InternetService service,
       
int flags,
       IntPtr context
       );

    [DllImport(
"WinInet.dll", SetLastError = true)]
    
public static extern bool InternetCloseHandle(IntPtr hInternet);

    
protected void Page_Load(object sender, EventArgs e)
    
{

    }


    
private string ChangePassword(string userName, string oldPassword, string newPassword)
    
{
        IntPtr open 
= (IntPtr)0;
        IntPtr connection 
= (IntPtr)0;
        
string strCmd;
        
string msg;

        strCmd 
= "SITE PSWD " + oldPassword + " " + newPassword;

        open 
= InternetOpen("FtpConnection", InternetOpenType.Direct, nullnull0);
        
if (open == (IntPtr)0)
        
{
            msg 
= "不能打开连接!";
        }

        
else
        
{
            connection 
= InternetConnect(open, "ftp.yourserv.com.cn", InternetPort.DefaultFtpPort, userName, oldPassword, InternetService.Ftp, 0, IntPtr.Zero);
            
if (connection != (IntPtr)0)
            
{
                
bool result = FtpCommand(connection, false, (IntPtr)1, strCmd, (IntPtr)0, (IntPtr)0);
                
if (result)
                
{
                    msg 
= "密码修改成功!";
                }

                
else
                
{
                    msg 
= "密码修改失败!";
                }

            }

            
else
            
{
                msg 
= "不能登陆FTP服务器,请检查用户名与密码是否正确!";
            }

        }

        
if (connection != (IntPtr)0)
        
{
            InternetCloseHandle(connection);
        }

        
if (open != (IntPtr)0)
        
{
            InternetCloseHandle(open);
        }

        
return msg;
    }

    
protected void Button1_Click(object sender, EventArgs e)
    
{
        
string msg = ChangePassword(userName.Text, oldPassword.Text, newPassword.Text);
        Response.Write(msg);
    }

}

posted on 2007-06-25 10:55  toby chen  阅读(334)  评论(0编辑  收藏  举报