苏童 发表于 2015-5-28 11:38:11

如何用IIS搭建FTP服务器

  1. 创建ftp站点
  Windows2003默认情况下不安装IIS组件,需要手工安装,具体操作步骤如下:
  开始→设置→控制面板→添加或删除程序→添加/删除windows组件→应用程序服务器
  →详细信息→internet信息服务(IIS)→详细信息
   →文件传输协议(FTP)服务(选中该选项)→确定
     前提条件:光驱中放入Windows2003操作系统.
  2. 启动FTP站点,设置相关参数
  打开IIS服务器,具体操作步骤如下:
  开始 →运行→打开(在输入框中键入“inetmgr”命令)
  弹出Internet信息服务(IIS)管理器,点击FTP站点,在右边会出现默认FTP站点,单击鼠标右键弹出下拉菜单,然后单击“属性”,在弹出的对话框中设置FTP的IP地址和TCP的端口号,没,默认情况下为端口号为21。并可以设置FTP站点的连接限制。
  
  图1右键单击【默认FTP站点】选项
      第2步,打开“默认FTP站点 属性”对话框,在【FTP站点】选项卡中可以设置关于FTP站点的参数。其中在“FTP站点标识”区域中可以更改FTP站点名称、监听IP地址以及TCP端口号,单击【IP地址】编辑框右侧的下拉三角按钮,并选中该站点要绑定的IP地址。如果想在同一台物理服务器中搭建多个FTP站点,那么需要为每一个站点指定一个IP地址,或者使用相同的IP地址且使用不同的端口号。在“FTP站点连接”区域可以限制连接到FTP站点的计算机数量,一般在局域网内部设置为【不受限制】较为合适。用户还可以单击【当前会话】按钮来查看当前连接到FTP站点的IP地址,并且可以断开恶意用户的连接,如图2所示。
  
  图2   选择FTP站点IP地址
      第3步,切换到【安全账户】选项卡,此选项卡用于设置FTP服务器允许的登录方式。默认情况下允许匿名登录,如果取消选中【允许匿名连接】复选框,则用户在登录FTP站点时需要输入合法的用户名和密码。本例选中【允许匿名连接】复选框,如图3所示。
  
  图3   选中【允许匿名连接】复选框
  小提示:登录FTP服务器的方式可以分为两种类型:匿名登录和用户登录。如果采用匿名登录方式,则用户可以通过用户名“anonymous”连接到FTP服务器,以电子邮件地址作为密码。对于这种密码FTP服务器并不进行检查,只是为了显示方便才进行这样的设置。允许匿名登录的FTP服务器使得任何用户都能获得访问能力,并获得必要的资料。如果不允许匿名连接,则必须提供合法的用户名和密码才能连接到FTP站点。这种登录方式可以让管理员有效控制连接到FTP服务器的用户身份,是较为安全的登录方式。
      第4步,切换到【消息】选项卡,在【标题】编辑框中输入能够反映FTP站点属性的文字(如“金手指FTP主站点”),该标题会在用户登录之前显示。接着在【欢迎】编辑框中输入一段介绍FTP站点详细信息的文字,这些信息会在用户成功登录之后显示。同理,在【退出】编辑框中输入用户在退出FTP站点时显示的信息。另外,如果该FTP服务器限制了最大连接数,则可以在【最大连接数】编辑框中输入具体数值。当用户连接FTP站点时,如果FTP服务器已经达到了所允许的最大连接数,则用户会收到“最大连接数”消息,且用户的连接会被断开,如图4所示。
  
  图4   【消息】选项卡
      第5步,切换到【主目录】选项卡。主目录是FTP站点的根目录,当用户连接到FTP站点时只能访问主目录及其子目录的内容,而主目录以外的内容是不能被用户访问的。主目录既可以是本地计算机磁盘上的目录,也可以是网络中的共享目录。单击“浏览”按钮在本地计算机磁盘中选择要作为FTP站点主目录的文件夹,并以此单击【确定】按钮。根据实际需要选中或取消选中【写入】复选框,以确定用户是否能够在FTP站点中写入数据,如图5所示。
  
  图5   【主目录】选项卡
      小提示:如果选中【另一台计算机上的目录】单选钮,则【本地路径】编辑框将更改成【网络共享】编辑框。用户需要输入共享目录的UNC路径,以定位FTP主目录的位置。
  第6步,切换到【目录安全性】选项卡,在该选项卡中主要用于授权或拒绝特定的IP地址连接到FTP站点。例如只允许某一段IP地址范围内的计算机连接到FTP站点,则应该选中【拒绝访问】单选钮。然后单击【添加】按钮,在打开的【授权访问】对话框中选中【一组计算机】单选钮。然后在【网络标识】编辑框中输入特定的网段(如10.115.223.0),并在【子网掩码】编辑框中输入子网掩码(如255.255.254.0)。最后单击【确定】按钮,如图6所示。
  
  图6【授权访问】对话框
      第7步,返回“默认FTP站点 属性”对话框,单击【确定】按钮使设置生效。现在用户已经可以在网络中任意客户计算机的Web浏览器中输入FTP站点地址(如http://www.iyunv.com/xiayang/admin/ftp://10.115.223.60/)来访问FTP站点的内容了。
      小提示:如果FTP站点所在的服务器上启用了本地连接的防火墙,则需要在“本地连接 属性”的“高级设置”对话框中添加“例外”选项,否则客户端计算机不能连接到FTP站点。

    
  
  事例:写日志并上传到FTP服务器

代码

      private readonly string path = "F:\\ftproot\\";
      private readonly string host = "192.168.138.15";
      private readonly int port = 2121;
      private readonly string username = "ftp";
      private readonly string password = "ftp";
      private static string mcDBConnectString = "Data Source=192.168.138.104\\SQL2005;Initial Catalog=UAP5MC;User ID=sa;Password=password";
      private sealed class ScomServers
      {
            public string Name { get; set; }
            public string Guid { get; set; }
      }
      private void button1_Click(object sender, EventArgs e)
      {//生成scomlog
            generateLog();
      }
      private void button2_Click(object sender, EventArgs e)
      {//上传日志到FTP服务器
            uploadLogs();
      }
      private List loadScomServers()
      {
            List servers = new List();
            string sql = "select s.note + '.' + s.scomserverdomain as , c.guidbyscom as Guid from tblscomServerInfo s, tblcmbase_server c where s.note = c.servername AND c.guidbyscom is not null";
            IDataReader reader = GetDataReader(sql);
            try
            {
                while (true == reader.Read())
                {
                  servers.Add(new ScomServers()
                  {
                        Name = reader["Name"].ToString(),
                        Guid = reader["Guid"].ToString(),
                  });
                }
            }
            finally
            {
                reader.Close();
            }
            return servers;
      }

      private void generateLog()
      {
            List servers = loadScomServers();
            string date = string.Format("{0:yyyyMMddHHmmssfffffff}", DateTime.Now); // fixme: date format
            DateTime update = DateTime.Now.AddDays(-1);
            DateTime from = new DateTime(update.Year, update.Month, update.Day);
            DateTime to = DateTime.Today.Date;

            try
            {
                if (servers != null)
                {
                  foreach (ScomServers server in servers)
                  {
                        string sql = @"select d.serverguid,d.updatetime as ,
                                    replace(d.servername,'Microsoft.Windows.Computer:','') as ComputerName,
                                    a.servermgip as ComputerIP,
                                    d.cpu as CPUUsedValue,
                                    d.memoryuse*100 as AvailablePer,
                                    'ALL' as DiskName,
                                    (1-d.storageuse) * 100 as FreeSpace,
                                    (d.TotalDiskArray - d.DiskArrayUse) as FreeSpaceMB
                              from tblscomServerPerformanceDetail d
                                     left join tblcmbase_Server a
                              on d.serverguid = a.guidbyscom
                              where d.serverguid = '" + server.Guid + "'";
                              
                        IDataReader reader = GetDataReader(sql);
                        try
                        {
                            StreamWriter cpuWriter = fileOpen(string.Join("", new string[] { path, server.Name, "_", date, "_SCOM_2007_CPU.log" }), string.Join("", new string[] { "DateTime", "\t", "ComputerName", "\t", "ComputerIP", "\t", "CPUUsedValue", "\t", "PRI" }));
                            StreamWriter ramWriter = fileOpen(string.Join("", new string[] { path, server.Name, "_", date, "_SCOM_2007_Memory.log" }), string.Join("", new string[] { "DateTime", "\t", "ComputerName", "\t", "ComputerIP", "\t", "AvailableMB", "\t", "PRI" }));
                            StreamWriter hddWriter = fileOpen(string.Join("", new string[] { path, server.Name, "_", date, "_SCOM_2007_Disk.log" }), string.Join("", new string[] { "DateTime", "\t", "ComputerName", "\t", "ComputerIP", "\t", "DiskName", "\t", "FreeSpace", "\t", "FreeMB", "\t", "PRI" }));
                            while (true == reader.Read())
                            {
                              cpuWriter.WriteLine(string.Join("", new string[] {
                              reader["DateTime"] == null ? "" : reader["DateTime"].ToString().Trim(),
                                 "\t",
                              reader["ComputerName"] == null ? "" : reader["ComputerName"].ToString().Trim(),
                                 "\t",
                              reader["ComputerIP"] == null ? "" : reader["ComputerIP"].ToString().Trim(),
                                 "\t",
                              reader["CPUUsedValue"] == null ? "" : reader["CPUUsedValue"].ToString().Trim(),
                                 " ",
                              "低",
                            }));
                              ramWriter.WriteLine(string.Join("", new string[] {
                              reader["DateTime"] == null ? "" : reader["DateTime"].ToString().Trim(),
                              "\t",
                              reader["ComputerName"] == null ? "" : reader["ComputerName"].ToString().Trim(),
                              "\t",
                              reader["ComputerIP"] == null ? "" : reader["ComputerIP"].ToString().Trim(),
                              "\t",
                              reader["AvailablePer"] == null ? "" : reader["AvailablePer"].ToString().Trim(),
                              "\t",
                              // fixme: ram data
                              "低",
                            }));
                              hddWriter.WriteLine(string.Join("", new string[] {
                              reader["DateTime"] == null ? "" : reader["DateTime"].ToString().Trim(),
                                 "\t",
                              reader["ComputerName"] == null ? "" : reader["ComputerName"].ToString().Trim(),
                                 " ",
                              reader["ComputerIP"] == null ? "" : reader["ComputerIP"].ToString().Trim(),
                                 "\t",
                              "ALL",
                              reader["FreeSpace"] == null ? "" : reader["FreeSpace"].ToString().Trim(),
                                 "\t",
                              reader["FreeSpaceMB"] == null ? "" : reader["FreeSpaceMB"].ToString().Trim(),
                                 "\t",
                              // fixme: hdd data
                              "低",
                            }));
                            }
                            fileClose(cpuWriter);
                            fileClose(ramWriter);
                            fileClose(hddWriter);
                        }
                        finally
                        {
                            reader.Close();
                        }
                  }
                }
            }
            catch (Exception ex)
            {
            }
      }
      private StreamWriter fileOpen(string fileName, string header)
      {
            StreamWriter writer = new StreamWriter(fileName, true, System.Text.Encoding.UTF8);
            writer.WriteLine(header);
            return writer;
      }
      private void fileClose(StreamWriter writer)
      {
            writer.Flush();
            writer.Close();
      }
      private void uploadLogs()
      {
            try
            {
                FtpClient ftp = new FtpClient(host, port);
                ftp.Open(username, password);
                ftp.ChangeDirectory("DB");
                string[] filenames = Directory.GetFiles(path, "*.log");
                if (filenames != null && filenames.Length > 0)
                {
                  foreach (string filename in filenames)
                  {
                        if (filename.Contains("CPU"))
                        {
                            ftp.ChangeDirectory("CPU");
                        }
                        else if (filename.Contains("Memory"))
                        {
                            ftp.ChangeDirectory("MEM");
                        }
                        else if (filename.Contains("Disk"))
                        {
                            ftp.ChangeDirectory("HDD");
                        }
                        string fn = Path.GetFileName(filename);
                        if (ftp.Exists(Path.GetFileName(fn)))
                        {
                            ftp.DeleteFile(fn);
                        }
                        ftp.PutFile(filename);
                        File.Delete(filename);
                        ftp.ChangeDirectoryUp();
                  }
                }
                else
                {
                }

                ftp.Close();
            }
            catch (Exception ex)
            {
            }
      }
      #region 数据库操作
      
      ///
      /// 获取数据DataSet
      ///
      /// 查询SQL
      /// 结果DataSet
      internal static DataSet GetDataSet(string sqlString)
      {
            //return Framework.IDE.DB.ExecuteDataSet(CommandType.Text, sqlString);
            DataSet ds = new DataSet();
            SqlConnection conn = new SqlConnection(mcDBConnectString);
            SqlDataAdapter adp = new SqlDataAdapter(sqlString, conn);
            adp.Fill(ds);
            return ds;
      }
      ///
      /// 获取数据DataSet
      ///
      /// 查询SQL
      /// 结果DataSet
      internal static object GetDataScalar(string sqlString)
      {
            object result = null;
            //result = Framework.IDE.DB.ExecuteScalar(CommandType.Text, sqlString);
            SqlConnection conn = new SqlConnection(mcDBConnectString);
            try
            {
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = sqlString;
                cmd.CommandType = System.Data.CommandType.Text;
                result = cmd.ExecuteScalar();
            }
            finally
            {
                conn.Close();
            }
            return result;
      }
      internal static IDataReader GetDataReader(string sqlString)
      {
            IDataReader reader = null;
            SqlConnection conn = new SqlConnection(mcDBConnectString);
            try
            {
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = sqlString;
                cmd.CommandType = System.Data.CommandType.Text;
                reader =(IDataReader) cmd.ExecuteReader();
            }
            finally
            {
               
            }
            return reader;
      }
      ///
      /// 获取数据DataSet
      ///
      /// 查询SQL
      /// 结果DataSet
      internal static int ExecuteNonQuery(string sqlString)
      {
            int result = 0;
            // result = Framework.IDE.DB.ExecuteNonQuery(CommandType.Text, sqlString);
            SqlConnection conn = new SqlConnection(mcDBConnectString);
            try
            {
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = sqlString;
                cmd.CommandType = System.Data.CommandType.Text;
                result = cmd.ExecuteNonQuery();
            }
            finally
            {
                conn.Close();
            }
            return result;
      }
      #endregion  
  注:
  Starksoft.Net.Ftp.dll
Starksoft.Net.Proxy.dll
文件上传到FTP服务器用到的两个DLL
页: [1]
查看完整版本: 如何用IIS搭建FTP服务器