telnet c# 执行命令
using System; /// <summary> public string strhost; // IP 地址 //Telnet protocal key /** blresult = true; try System.Threading.Thread.Sleep(ilogin_wait_time); // username send to host System.Threading.Thread.Sleep(ilogin_wait_time); // password send to host /** blresult = false; if (telnet_tcp_client.Connected) strprompt = recv_data_from_host(); if ((strprompt.Trim().LastIndexOf(“#”) > -1) || /** byte[] bbuf = System.Text.ASCIIEncoding.ASCII.GetBytes(strcmd.Replace(“\0xFF”, “\0xFF\0xFF”)); telnet_tcp_client.GetStream().Write(bbuf, 0, bbuf.Length); /** sbtemp = new StringBuilder(); // socket没有连接的时候,返回空 do // read 1 byte // 返回接受的数据 /** // 关闭Telnet连接 // telnet连接到远程主机 // 在远程主机上执行命令
using System.Text;
using System.Net.Sockets;
/// Summary description for ClassTelnet
/// </summary>
public class ClassTelnet
{
TcpClient telnet_tcp_client;
public string strusername; // username
public string strpassword; // password
private int ilogin_wait_time = 200; //网络延迟等待时间
private int irecv_wait_time = 100; //网络延迟等待时间
enum Verbs
{
WILL = 251,
WONT = 252,
DO = 253,
DONT = 254,
IAC = 255
}
public ClassTelnet()
{
}
/**
* Telnet 关闭连接
*/
public void close_telnet()
{
try
{
if (telnet_tcp_client == null)
{
return;
}
if (telnet_tcp_client.Connected)
{
telnet_tcp_client.Close();
}
}
catch (Exception ex)
{
Consule.Write(“异常”);
}
}
* Telnet连接到服务器
*/
public bool open_connect()
{
bool blresult;
string strtemp;
{
// new socket
telnet_tcp_client = new TcpClient(this.strhost, 23);
// read host info data
strtemp = recv_data_from_host();
blresult = strtemp.TrimEnd().EndsWith(“:”);
if (blresult == false)
{
Consule.Write(“read host info data error”);
return blresult;
}
blresult = send_data_to_host(this.strusername + “\n\r”);
if (blresult == false)
{
Consule.Write(“username send error”);
return blresult;
}
strtemp = recv_data_from_host();
blresult = strtemp.TrimEnd().EndsWith(“:”);
if (blresult == false)
{
return blresult;
}
blresult = send_data_to_host(this.strpassword + “\n\r”);
if (blresult == false)
{
return blresult;
}
System.Threading.Thread.Sleep(ilogin_wait_time);
strtemp = recv_data_from_host();
if ((strtemp.Trim().LastIndexOf(“#”) > -1) ||
(strtemp.Trim().LastIndexOf(“$”) > -1) ||
(strtemp.Trim().LastIndexOf(“>”) > -1))
{
blresult = true;
}
else
{
blresult = false;
}
}
catch (Exception ex)
{
blresult = false;
}
return blresult;
}
* 执行命令
*/
public bool exec_command(string strcmd)
{
bool blresult;
string strprompt;
strprompt = “”;
{
blresult = send_data_to_host(strcmd + “\n\r”);
if (blresult == false)
{
return false;
}
strprompt = “”;
(strprompt.Trim().LastIndexOf(“$”) > -1) ||
(strprompt.Trim().LastIndexOf(“>”) > -1))
{
blresult = true;
return blresult;
}
}
return blresult;
}
* telnet向主机发送数据
*/
public bool send_data_to_host(string strcmd)
{
try
{
// socket error时、return
if (!telnet_tcp_client.Connected)
{
return false;
}
}
catch(Exception ex)
{
return false;
}
return true;
}
* Telnet从主机接受数据
*/
public string recv_data_from_host()
{
int iinput_data; //data
int inputverb;
int inputoption;
StringBuilder sbtemp;
NetworkStream ns_temp;
byte[] bread_buffer;
StringBuilder sbcomplete_message;
int iread_bytes_num;
if (!telnet_tcp_client.Connected)
{
return null;
}
{
// read 1 byte
iinput_data = telnet_tcp_client.GetStream().ReadByte();
switch (iinput_data)
{
case -1:
break;
case (int)Verbs.IAC: // 接受的数据有keyword
inputverb = telnet_tcp_client.GetStream().ReadByte();
if (inputverb == -1) break;
switch (inputverb)
{
case (int)Verbs.IAC:
sbtemp.Append(inputverb);
break;
case (int)Verbs.DO:
case (int)Verbs.DONT:
case (int)Verbs.WILL:
case (int)Verbs.WONT:
inputoption = telnet_tcp_client.GetStream().ReadByte();
if (inputoption == -1) break;
telnet_tcp_client.GetStream().WriteByte((byte)Verbs.IAC);
telnet_tcp_client.GetStream().WriteByte(inputverb ==
(int)Verbs.DO ? (byte)Verbs.WONT : (byte)Verbs.DONT);
telnet_tcp_client.GetStream().WriteByte((byte)inputoption);
break;
default:
break;
}
break;
default:
sbtemp.Append((char)iinput_data);
bread_buffer = new byte[8192];
sbcomplete_message = new StringBuilder();
iread_bytes_num = 0;
ns_temp = telnet_tcp_client.GetStream();
if (ns_temp.CanRead)
{
System.Threading.Thread.Sleep(ilogin_wait_time);
iread_bytes_num = ns_temp.Read(bread_buffer, 0, bread_buffer.Length);
sbtemp.AppendFormat(“{0}”, Encoding.ASCII.GetString(bread_buffer,
0, iread_bytes_num));
}
break;
}
// timeout
System.Threading.Thread.Sleep(irecv_wait_time);
} while (telnet_tcp_client.Available > 0);
return sbtemp.ToString();
}
* 例子程序
*/
public bool exec_sample()
{
bool blsts;
blsts = true;
this.close_telnet();
blsts = this.open_connect();
if (blsts == false)
{
return blsts;
}
blsts = this.exec_command(“echo ABC”);
// 执行失败
if (blsts == false)
{
Consule.Write(“命令执行失败”);
}
return blsts;
}
}