首页 > 编程语言 >C# Sftp操作

C# Sftp操作

时间:2024-02-03 16:11:46浏览次数:40  
标签:Tamir return String C# sftp new 操作 Sftp public

C# Sftp操作

SFTP释义-----引自百度百科

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。

sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。

其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,

SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,

所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。

但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,

如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

准备

Sftp的上传下载等操作用到了C#的第三方类库SharpSSH,需要添加压缩包中的3个dll文件

Tamir.SharpSSH.dll、Org.Mentalis.Security.dll、DiffieHellman.dll 下载地址

SftpHelper类

class sftpHelper
    {
        private Session m_session;
        private Channel m_channel;
        private ChannelSftp m_sftp;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="ip">sftp地址</param>
        /// <param name="user">sftp用户名</param>
        /// <param name="pwd">sftp密码</param>
        /// <param name="port">端口,默认20</param>
        public sftpHelper(string ip, string user, string pwd, string port = "20")
        {
            int serverport = Int32.Parse(port);

            JSch jsch = new JSch();
            m_session = jsch.getSession(user, ip, serverport);

            MyUserInfo ui = new MyUserInfo();
            ui.setPassword(pwd);
            m_session.setUserInfo(ui);
        }

        /// <summary>
        /// 连接状态
        /// </summary>
        public bool Connected { get { return m_session.isConnected(); } }

        /// <summary>
        /// 连接SFTP
        /// </summary>
        public bool Connect()
        {
            try
            {
                if (!Connected)
                {
                    m_session.connect();
                    m_channel = m_session.openChannel("sftp");
                    m_channel.connect();
                    m_sftp = (ChannelSftp)m_channel;
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>
        /// 断开SFTP
        /// </summary>
        public void Disconnect()
        {
            if (Connected)
            {
                m_channel.disconnect();
                m_session.disconnect();
            }
        }

        /// <summary>
        /// SFTP存放文件
        /// </summary>
        /// <param name="localPath">本地文件路径</param>
        /// <param name="remotePath">sftp远程地址</param>
        public bool Put(string localPath, string remotePath)
        {
            try
            {
                if (this.Connected)
                {
                    Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
                    Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(remotePath);
                    m_sftp.put(src, dst);
                    return true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return false;
        }

        /// <summary>
        /// SFTP获取文件
        /// </summary>
        /// <param name="remotePath">sftp远程文件地址</param>
        /// <param name="localPath">本地文件存放路径</param>
        public bool Get(string remotePath, string localPath)
        {
            try
            {
                if (this.Connected)
                {
                    Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(remotePath);
                    Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
                    m_sftp.get(src, dst);
                    return true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return false;
        }

        /// <summary>
        /// 删除SFTP文件
        /// </summary>
        /// <param name="remoteFile">sftp远程文件地址</param>
        public bool Delete(string remoteFile)
        {
            try
            {
                if (this.Connected)
                {
                    m_sftp.rm(remoteFile);
                    return true;
                }
            }
            catch
            {
                return false;
            }
            return false;
        }


        /// <summary>
        /// 移动SFTP文件
        /// </summary>
        /// <param name="currentFilename">sftp远程文件地址</param>
        /// <param name="newDirectory">sftp移动至文件地址</param>
        public bool Move(string currentFilename, string newDirectory)
        {
            try
            {
                if (this.Connected)
                {
                    Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(currentFilename);
                    Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(newDirectory);
                    m_sftp.rename(src, dst);
                    return true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return false;
        }

        /// <summary>
        /// 获取SFTP文件列表
        /// </summary>
        /// <param name="remotePath">sftp远程文件目录</param>
        /// <param name="fileType">文件类型</param>
        public ArrayList GetFileList(string remotePath, string fileType)
        {
            try
            {

                if (this.Connected)
                {
                    Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath);
                    ArrayList objList = new ArrayList();
                    foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
                    {
                        string sss = qqq.getFilename();
                        if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length))
                        { objList.Add(sss); }
                        else { continue; }
                    }

                    return objList;
                }
            }
            catch
            {
                return null;
            }
            return null;
        }

    }


    //登录验证信息
    public class MyUserInfo : UserInfo
    {
        String passwd;

        public String getPassword() { return passwd; }
        public void setPassword(String passwd) { this.passwd = passwd; }

        public String getPassphrase() { return null; }
        public bool promptPassphrase(String message) { return true; }

        public bool promptPassword(String message) { return true; }
        public bool promptYesNo(String message) { return true; }
        public void showMessage(String message) { }

    }

使用winform测试

/// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");
                sftp.Connect();
                sftp.Get("/home/20171013103113.csv", dialog.SelectedPath);
                sftp.Disconnect();
            }
        }

        /// <summary>
        /// 上传测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "|*.csv";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");
                sftp.Connect();
                sftp.Put(dialog.FileName, "/home/");
                sftp.Disconnect();
            }

        }

        /// <summary>
        /// 删除测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");
            sftp.Connect();
            sftp.Delete("/home/20171013103113.csv");
            sftp.Disconnect();
        }

        /// <summary>
        /// 移动测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");
            sftp.Connect();
            sftp.Move("/home/20171013103113.csv", "/home/temp/20171013103113.csv");
            sftp.Disconnect();
        }

标签:Tamir,return,String,C#,sftp,new,操作,Sftp,public
From: https://www.cnblogs.com/nuomibaibai/p/18004875

相关文章

  • EasyCVR视频融合平台如何助力执法记录仪高效使用
    旭帆科技的EasyCVR平台可接入的设备除了常见的智能分析网关与摄像头以外,还可通过GB28181协议接入执法记录仪,实现对执法过程的全称监控与录像,并对执法轨迹与路径进行调阅回看。那么,如何做到执法记录仪高效使用呢?由于执法记录仪支持GB28181协议,所以需要使用GB28181注册到EasyCVR......
  • synchronized【如何保证原子性、可见性、有序性】【如何实现原子性 原理解析】【什么
    @TOC转自极客时间如何解决可见性问题?同步原理剖析什么是Monitor?什么是锁优化?......
  • onlyoffice编译和https设置资料
    编译文档:https://helpcenter.onlyoffice.com/installation/docs-community-compile.aspxhttps设置:https://helpcenter.onlyoffice.com/installation/docs-community-https-linux.aspxhttps://blog.csdn.net/u013930899/article/details/134428379......
  • C语言解题||字符串左旋
    题目:实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋1个字符得到BCDAABCD左旋2个字符得到CDAB代码实现:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<assert.h>#include<string.h>//除第1个外,全部往前1位,然后原第1个填充至极右voidLeft_reverse(......
  • Rancher管理K8S集群
    Rancher是一个Kubernetes管理工具,让你能在任何地方和任何提供商上部署和运行集群。Rancher可以创建来自Kubernetes托管服务提供商的集群,创建节点并安装Kubernetes,或者导入在任何地方运行的现有Kubernetes集群。Rancher基于Kubernetes添加了新的功能,包括统一所有集群的......
  • 天地伟业接入EasyCVR详细步骤
    EasyCVR可接入的设备很多,今天小编就带大家学一下天地伟业设备如何接入到EasyCVR平台之中。该设备的接入方式主要有以下两种:1、RTSP方式接入:Rtsp规则:rtsp://用户名:密码@ip:port/{通道号}/{码流};主码流示例:rtsp://admin:admin@192.168.2.98:554/1/1;Onvif地址示例:http://ip账号/onv......
  • 天地伟业接入视频汇聚/云存储平台EasyCVR详细步骤
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的......
  • AtCoder Beginner Contest 333
    ABC334总结https://atcoder.jp/contests/abc333A-ThreeThrees翻译输入一个正整数\(n\),输出\(n\)遍这个正整数。\(1\len\le9\)。分析没啥好说的,直接输出就好了。code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intn;intmain()......
  • [EFI]英特尔 猛兽峡谷NUC11BTM电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板猛兽峡谷NUC11BTM处理器Intel®Core™i9-11900KB处理器已驱动内存英睿达DDR416G3200MHz*2已驱动硬盘铠侠RC201T已驱动显卡AMDRadeonRX6600XT已驱动声卡USB音频已驱动网卡以太网控制器i225-LM已驱动无线网卡+蓝牙奋威t919Sonoma以上版本自行安装补......
  • 在Vue中如何动态绑定class和style属性
    在Vue中,动态绑定class和style属性是我们经常遇到的需求。这个功能允许我们根据不同的条件来动态改变元素的样式,让我们的应用更加灵活和富有交互性。在本篇博客文章中,我将带你深入探索在Vue中如何实现这一功能。首先,让我们了解一下Vue中的class绑定。Vue提供了一种简洁而强大的语法......