C# 开发类似Putty的工具
由于putty 不支持 telnet 命令行提交用户名密码,请问一下,有啥开源的控件。
需要涉及到 Terminal / Emulator ,nuget上找了下,除了收费的,就都是很老的。
度娘 确实不好找资料
找到一个 terminalControl 的控件,有些可能了,但太老了 使用不了
putty 支持记住用户名 JuncoJet 发表于 2022-11-2 09:44
putty 支持记住用户名
我是想实现自动登录 ,命令行调用完成 登录操作 urbadman 发表于 2022-11-2 10:29
我是想实现自动登录 ,命令行调用完成 登录操作
不是啥难事,SendKeys 本帖最后由 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;
} zmolli775 发表于 2022-11-3 11:22
public static void Run()
{
IPEndPoint swIp = new IPEndPoint(IPAddress.P ...
谢谢,不过这代码不适合,需要响应 Terminal ,比如tab补全等 PUTTY开始的时候用 现在都改用XSHELL了
页:
[1]