吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1093|回复: 6
收起左侧

[求助] C# 开发类似Putty的工具

[复制链接]
urbadman 发表于 2022-11-1 22:06
由于putty 不支持 telnet 命令行提交用户名密码,
请问一下,有啥开源的控件。
需要涉及到 Terminal / Emulator ,nuget上找了下,除了收费的,就都是很老的。
度娘 确实不好找资料
找到一个 terminalControl 的控件,有些可能了,但太老了 使用不了

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

JuncoJet 发表于 2022-11-2 09:44
putty 支持记住用户名
 楼主| urbadman 发表于 2022-11-2 10:29
JuncoJet 发表于 2022-11-2 09:44
putty 支持记住用户名

我是想实现自动登录 ,命令行调用  完成 登录操作
JuncoJet 发表于 2022-11-2 12:13
urbadman 发表于 2022-11-2 10:29
我是想实现自动登录 ,命令行调用  完成 登录操作

不是啥难事,SendKeys
zmolli775 发表于 2022-11-3 11:22
本帖最后由 zmolli775 于 2022-11-3 11:27 编辑

       public static void Run()
        {
            IPEndPoint swIp = new IPEndPoint(IPAddress.Parse(“IP地址”), 23);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            {
                ReceiveBufferSize = 4096, SendBufferSize = 4096, ReceiveTimeout = 5, SendTimeout = 5
            };
            try
            {           
                socket.Connect(swIp);           
            }
            catch
            {
                Console.WriteLine("Error:0x01");
                return;
            }
            Rx(socket); // 接收回显
           string retmsg = Tx(socket, "写入命令");  // 发送命令
           if (retmsg.Contains("如果包含某字符串"))
            {
                // TODO
            }     
            socket.Close();
        }
        /// <summary>
        /// 读取数据
        /// </summary>
        public static string Rx(Socket s)
        {
            Thread.Sleep(wt);
            if (s.Connected)
            {
                try
                {
                    int len = s.Receive(buffer, 0, s.Available, SocketFlags.None);
                    string msg;

                    if (len > 0)
                    {
                        char[] array = Encoding.UTF8.GetString(buffer, 0, len).ToCharArray();
                        StringBuilder sb = new StringBuilder();
                        foreach (char c in array)
                        {
                            if (c == 65533 || c == '\u0001' || c == '\u0003' || c == '\u0018' || c == '\u001b' || c == '\u001f')
                            {
                                continue;
                            }
                            else
                            {
                                sb.Append(c);
                            }
                        }
                        msg = Convert.ToString(sb).Replace(" [1D", string.Empty);
                        Console.WriteLine(msg);
                        return msg;
                    }
                    else
                    {
                        return null;
                    }
                }
                catch
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 发送数据
        /// </summary>
        public static string Tx(Socket s, string msg = null)
        {
            byte[] bytes;
            if (string.IsNullOrEmpty(msg))
            {
                bytes = Encoding.UTF8.GetBytes($"\r");
            }
            else
            {
                bytes = Encoding.UTF8.GetBytes($"{msg}\r");
            }
            s.Send(bytes, SocketFlags.None);
            Thread.Sleep(wt);
            return Rx(s);
        }
        private static readonly int wt = 250;
        private static readonly byte[] buffer = new byte[4096];
    }
 楼主| urbadman 发表于 2023-1-4 08:42
zmolli775 发表于 2022-11-3 11:22
public static void Run()
        {
            IPEndPoint swIp = new IPEndPoint(IPAddress.P ...

谢谢,不过这代码不适合,需要响应 Terminal ,比如tab补全等
挑灯看剑 发表于 2023-1-7 10:00
PUTTY开始的时候用 现在都改用XSHELL了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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