telnet网络返回结果(telnet 返回)

      最后更新:2022-11-16 08:06:48 手机定位技术交流文章

      java代码访问telnet,并受到返回值

      import java.io.InputStream; import java.io.PrintStream;import org.apache.commons.net.telnet.TelnetClient;public class Shell {private TelnetClient telnet = new TelnetClient();private InputStream in;private PrintStream out;private char prompt = '$';// 普通用户结束public Shell(String ip, int port, String user, String password) {try {telnet.connect(ip, port);in = telnet.getInputStream();out = new PrintStream(telnet.getOutputStream());// 根据root用户设置结束符this.prompt = user.equals("root") ? '#' : '>';login(user, password);} catch (Exception e) {e.printStackTrace();}}/*** 登录** @param user* @param password*/public void login(String user, String password) {// read()Until("login:");readUntil("login:");write(user);readUntil("Password:");write(password);readUntil(prompt + "");}/*** 读取分析结果** @param pattern* @return*/public String readUntil(String pattern) {try {char lastChar = pattern.charAt(pattern.length() - 1);StringBuffer sb = new StringBuffer();char ch = (char) in.read();while (true) {sb.append(ch);if (ch == lastChar) {if (sb.toString().endsWith(pattern)) {return sb.toString();}}ch = (char) in.read();System.out.print(ch);}} catch (Exception e) {e.printStackTrace();}return null;}/*** 写操作** @param value*/public void write(String value) {try {out.println(value);out.flush();} catch (Exception e) {e.printStackTrace();}}/*** 向目标发送命令字符串** @param command* @return*/public String sendCommand(String command) {try {write(command);return readUntil(prompt + "");} catch (Exception e) {e.printStackTrace();}return null;}/*** 关闭连接*/public void disconnect() {try {telnet.disconnect();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {//TelnetClient telnet = new TelnetClient();try {Shell she = new Shell("192.168.1.10", 23, "root", "123456");System.out.println(she);//执行的命令System.out.println(she.sendCommand("ll"));she.disconnect();} catch (Exception e) {// TODO: handle exception}} }
      java代码访问telnet,并受到返回值

      命令行下 telnet 结果如何输出

      你可以用SecureCRT这个工具,这个工具可以支持telnet ssh 等方式,,在这个工具文件中有一个记录会话,可以把你的操作日志保存在本地。
      在CMD的窗口中,点鼠标右键--全选(S),再按回车键(Enter),就可以保存到文本中了
      Telnet是进行远程登录的标准协议和主要方式它为用户提供了在本地计算机上完成远程主机工作的能力。通过使用Telnet,Internet用户可以与全世界许多信息中心图书馆及其它信息资源联系。Telnet远程登录的使用主要有两种情况。第一种是用户在远程主祝上有自己的帐号(Account),即用户拥有注册的用户名和口令;第二种是许多Internet主机为用户提供了某种形式的公共Telnet信息资源,这种资源对于每一个Telnet用户都是开放的。Telnet是使用最为简单的Internet工具之一。 telnet /?命令可以缩写。支持的命令为:c- 关闭 关闭当前连接d- 显示 显示操作参数o- 打开主机名 [端口]连接到一个主机名(默认端口 23)q- 退出 退出 telnetset- 设置 设置选项(要列表,请键入 'set ?')sen- 发送 将字符串送到服务器st - 状态 打印状态信息u- 解除设置 解除设置选项(要列表,请键入 'unset ?')?/h- 帮助 打印帮助信息一 摘要二 远程登录三 Telnet协议四 Win2000的Telnet服务五 在telnet中该做什么一 摘要Telnet的应用不仅方便了我们进行远程登录,也给hacker们提供了又一种入侵手段和后门,但无论如何,在你尽情享受Telnet所带给你的便捷的同时,你是否真正的了解Telnet呢?二 远程登录Telnet服务虽然也属于客户机/服务器模型的服务,但它更大的意义在于实现了基于Telnet协议的远程登录(远程交互式计算),那么就让我们来认识一下远程登录。1 远程登陆的基本概念先来看看什么叫登录:分时系统允许多个用户同时使用一台计算机,为了保证系统的安全和记帐方便,系统要求每个用户有单独的帐号作为登录标识,系统还为每个用户指定了一个口令。用户在使用该系统之前要输入标识和口令,这个过程被称为'登录'。远程登陆是指用户使用Telnet命令,使自己的计算机暂时成为远程主机的一个仿真终端的过程。仿真终端等效于一个非智能的机器,它只负责把用户输入的每个字符传递给主机,再将主机输出的每个信息回显在屏幕上。2 远程登陆的产生及发展我们可以先构想一个提供远程文字编辑的服务,这个服务的实现需要一个接受编辑文件请求和数据的服务器以及一个发送此请求的客户机。客户机将建立一个从本地机到服务器的TCP连接,当然这需要服务器的应答,然后向服务器发送键入的信息(文件编辑信息),并读取从服务器返回的输出。以上便是一个标准而普通的客户机/服务器模型的服务。似乎有了客户机/服务器模型的服务,一切远程问题都可以解决了。然而实际并非你想象的那样简单,如果我们仅需要远程编辑文件,那么刚才所构想的服务完全可以胜任,但假如我们的要求并不是这么简单,我们还想实现远程用户管理,远程数据录入,远程系统维护,想实现一切可以在远程主机上实现的操作,那么我们将需要大量专用的服务器程序并为每一个可计算服务都使用一个服务器进程,随之而来的问题是:远程机器会很快对服务器进程应接不暇,并淹没在进程的海洋里(我们在这里排除最专业化的远程机器)。那么有没有办法解决呢?当然有,我们可以用远程登录来解决这一切。我们允许用户在远地机器上建立一个登录会话,然后通过执行命令来实现更一般的服务,就像在本地操作一样。这样,我们便可以访问远地系统上所有可用的命令,并且系统设计员不需提供多个专用地服务器程序。问题发展到这里好像前途一片光明了,用远程登录总应该解决问题了吧,但要实现远程登陆并不简单。不考虑网络设计的计算机系统期望用户只从直接相连的键盘和显示器上登录,在这种机器上增加远程登陆功能需要修改机器的操作系统,这是极其艰巨也是我们尽量避免的。因此我们应该集中力量构造远程登陆服务器软件,虽然这样也是比较困难的。为什么说这样做也比较困难呢?举个例子来说:一般,操作系统会为一些特殊按键分配特殊的含义,比如本地系统将'Ctrl+C'解释为:'终止当前运行的命令进程'。但假设我们已经运行了远程登陆服务器软件,'Ctrl+C'也有可能无法被传送到远地机器,如果客户机真的将'Ctrl+C'传到了远地机器,那么'Ctrl+C'这个命令有可能不能终止本地的进程,也就是说在这里很可能会产生混乱。而且这仅仅是遇到的难题之一。但尽管有技术上的困难,系统编程人员还是设法构造了能够应用于大多数操作系统的远程登陆服务器软件,并构造了充当客户机的应用软件。通常,客户机软件取消了除一个键以外的所有键的本地解释,并将这些本地解释相应的转换成远地解释,这就使得客户机软件与远地机器的交互,就如同坐在远程主机面前一样,从而避免了上述所提到的混乱。而那个唯一例外的键,可以使用户回到本地环境。将远程登陆服务器设计为应用级软件,还有另一个要求,那就是需要操作系统提供对伪终端(pseudo terminal)的支持。我们用伪终端描述操作系统的入口点,它允许像Telnet服务器一样的程序向操作系统传送字符,并且使得字符像是来自本地键盘一样。只有使用这样的操作系统,才能将远程登陆服务器设计为应用级软件(比如Telnet服务器软件),否则,本地操作系统和远地系统传送将不能识别从对方传送过来的信息(因为它们仅能识别从本地键盘所键入的信息),远程登陆将宣告失败。将远程登陆服务器设计为应用级软件虽然有其显著的优点:比将代码嵌入操作系统更易修改和控制服务器。但其也有效率不高的缺点(后面的内容将会给予解释),好在用户键入信息的速率不高,这种设计还是可以接受的。3 远程登录的工作过程使用Telnet协议进行远程登陆时需要满足以下条件:在本的计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的Ip地址或域名;必须知道登录标识与口令。Telnet远程登录服务分为以下4个过程:1)本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据报;3)将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。上面的内容只是讨论了远程登陆最基本的东西,其中的复杂和编程人员的艰辛是我们难以想象的,不知道你在舒服的使用Telnet的同时,是否想到了这些!三 Telnet协议我们知道Telnet服务器软件是我们最常用的远程登录服务器软件,是一种典型的客户机/服务器模型的服务,它应用Telnet协议来工作。那么,什么是Telnet协议?它都具备哪些特点呢?1 基本内容Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。它提供了三种基本服务:1)Telnet定义一个网络虚拟终端为远的系统提供一个标准接口。客户机程序不必详细了解远的系统,他们只需构造使用标准接口的程序;2)Telnet包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项;3)Telnet对称处理连接的两端,即Telnet不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。2 适应异构为了使多个操作系统间的Telnet交互操作成为可能,就必须详细了解异构计算机和操作系统。比如,一些操作系统需要每行文本用ASCII回车控制符(CR)结束,另一些系统则需要使用ASCII换行符(LF),还有一些系统需要用两个字符的序列回车-换行(CR-LF);再比如,大多数操作系统为用户提供了一个中断程序运行的快捷键,但这个快捷键在各个系统中有可能不同(一些系统使用CTRL+C,而另一些系统使用ESCAPE)。如果不考虑系统间的异构性,那么在本地发出的字符或命令,传送到远地并被远地系统解释后很可能会不准确或者出现错误。因此,Telnet协议必须解决这个问题。为了适应异构环境,Telnet协议定义了数据和命令在Internet上的传输方式,此定义被称作网络虚拟终端NVT(Net Virtual Terminal)。它的应用过程如下:对于发送的数据:客户机软件把来自用户终端的按键和命令序列转换为NVT格式,并发送到服务器,服务器软件将收到的数据和命令,从NVT格式转换为远地系统需要的格式;对于返回的数据:远地服务器将数据从远地机器的格式转换为NVT格式,而本地客户机将将接收到的NVT格式数据再转换为本地的格式。对于NVT格式的详细定义,有兴趣的朋友可以去查找相关资料。3 传送远地命令我们知道绝大多数操作系统都提供各种快捷键来实现相应的控制命令,当用户在本地终端键入这些快捷键的时候,本地系统将执行相应的控制命令,而不把这些快捷键作为输入。那么对于Telnet来说,它是用什么来实现控制命令的远地传送呢?Telnet同样使用NVT来定义如何从客户机将控制功能传送到服务器。我们知道USASCII字符集包括95个可打印字符和33个控制码。当用户从本地键入普通字符时,NVT将按照其原始含义传送;当用户键入快捷键(组合键)时,NVT将把它转化为特殊的ASCII字符在网络上传送,并在其到达远地机器后转化为相应的控制命令。将正常ASCII字符集与控制命令区分主要有两个原因:1)这种区分意味着Telnet具有更大的灵活性:它可在客户机与服务器间传送所有可能的ASCII字符以及所有控制功能; 2)这种区分使得客户机可以无二义性的指定信令,而不会产生控制功能与普通字符的混乱。
      命令行下 telnet 结果如何输出

      C# winform点击按钮执行telnet登陆,并且执行命令,返回结果,求代码示例。

      //我自己用的telnetHelper类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Sockets;using System.Net;using System.Threading;namespace AFC_APP1{    public class TelnetHelper2    {        string hostName;        string login;        string password;        int port = 23;        IPAddress ipAdd;        IPEndPoint ipEnd;        Socket mysocket;        ///         /// 默认构造函数        ///         public TelnetHelper2(){                }        ///         /// 构造函数        ///         ///         ///         ///         public TelnetHelper2(string hostName,string login,string password)        {            this.hostName = hostName;            this.login = login;            this.password = password;            ipAdd=IPAddress.Parse(hostName);            ipEnd = new IPEndPoint(ipAdd, port);            mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);        }        ///         /// 连接        ///         private void ConnetServer()        {            char[] sendfirst = new char[3];            sendfirst[0] = (char)(255);            sendfirst[1] = (char)(252);            sendfirst[2] = (char)(24);            byte[] sendfirstbytetemp = Encoding.Unicode.GetBytes(sendfirst);            byte[] sendfirstbyte = new byte[sendfirstbytetemp.Length / 2];            sendfirstbyte[0] = sendfirstbytetemp[0];            sendfirstbyte[1] = sendfirstbytetemp[2];            sendfirstbyte[2] = sendfirstbytetemp[4];            mysocket.Send(sendfirstbyte, 0, sendfirstbyte.Length, SocketFlags.None);            Thread.Sleep(300);            byte[] sendusernametemp = Encoding.ASCII.GetBytes(login);            byte[] sendusername = new byte[sendusernametemp.Length + 1];            char[] closechar = new char[2];            closechar[0] = (char)(10);            closechar[1] = (char)(13);            byte[] closebyte = Encoding.ASCII.GetBytes(closechar);            for (int i = 0; i < sendusernametemp.Length; i++)            {                sendusername[i] = sendusernametemp[i];            }            sendusername[sendusername.Length - 1] = closebyte[0];            mysocket.Send(sendusername, 0, sendusername.Length, SocketFlags.None);            Thread.Sleep(300);            byte[] senduserpasswdtemp = Encoding.ASCII.GetBytes(password);            byte[] senduserpasswd = new byte[senduserpasswdtemp.Length + 1];            char[] closechar2 = new char[2];            closechar2[0] = (char)(10);            closechar2[1] = (char)(13);            byte[] closebyte2 = Encoding.ASCII.GetBytes(closechar2);            for (int i = 0; i < senduserpasswdtemp.Length; i++)            {                senduserpasswd[i] = senduserpasswdtemp[i];            }            senduserpasswd[senduserpasswd.Length - 1] = closebyte2[0];            mysocket.Send(senduserpasswd, 0, senduserpasswd.Length, SocketFlags.None);            Thread.Sleep(500);        }        ///         /// 执行命令        ///         ///         private void ExcuteCommand(string cmd)        {            char[] sendfirst = new char[3];            sendfirst[0] = (char)(255);            sendfirst[1] = (char)(252);            sendfirst[2] = (char)(24);            byte[] sendfirstbytetemp = Encoding.Unicode.GetBytes(sendfirst);            byte[] sendfirstbyte = new byte[sendfirstbytetemp.Length / 2];            sendfirstbyte[0] = sendfirstbytetemp[0];            sendfirstbyte[1] = sendfirstbytetemp[2];            sendfirstbyte[2] = sendfirstbytetemp[4];            mysocket.Send(sendfirstbyte, 0, sendfirstbyte.Length, SocketFlags.None);            Thread.Sleep(300);            byte[] recvdatauser = new byte[4096];            mysocket.Receive(recvdatauser, 0, mysocket.Available, SocketFlags.None);            string recvuserstr = Encoding.ASCII.GetString(recvdatauser);            recvuserstr = recvuserstr.Substring(login.Length, recvuserstr.Length - login.Length);//去掉了服务器回显的用户名            recvuserstr = recvuserstr.TrimEnd('');            Console.Write(recvuserstr);            Thread.Sleep(300);            byte[] sendusernametemp = Encoding.ASCII.GetBytes(cmd);            byte[] sendusername = new byte[sendusernametemp.Length + 1];            char[] closechar = new char[2];            closechar[0] = (char)(10);            closechar[1] = (char)(13);            byte[] closebyte = Encoding.ASCII.GetBytes(closechar);            for (int i = 0; i < sendusernametemp.Length; i++)            {                sendusername[i] = sendusernametemp[i];            }            sendusername[sendusername.Length - 1] = closebyte[0];            mysocket.Send(sendusername, 0, sendusername.Length, SocketFlags.None);            Thread.Sleep(500);        }        ///         /// 获取数据        ///         ///         public string GetData(string cmd)        {            try            {                mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                mysocket.Connect(ipEnd);                ConnetServer(); //连接服务                ExcuteCommand(cmd);//执行命令                byte[] recvdatauser = new byte[8192];                mysocket.Receive(recvdatauser, 0, mysocket.Available, SocketFlags.None);                string recvuserstr = Encoding.ASCII.GetString(recvdatauser);                recvuserstr = recvuserstr.TrimEnd('');                mysocket.Close();                System.Threading.Thread.Sleep(300);                //Console.Write("recvuserstr_string:" + recvuserstr);                recvuserstr = recvuserstr.Substring(cmd.Length, recvuserstr.Length - cmd.Length).TrimStart();//去掉了服务器回显                recvuserstr = this.login.Equals("root") ? recvuserstr.Replace("#", "").TrimEnd() : recvuserstr.Replace("$", "").TrimEnd();                return recvuserstr;//.Split('r')[1].Trim();            }            catch (Exception ex)            {                LogHelper.WriteTelnetLog(ex.ToString());                return "EXError:"+ex.ToString();            }        }    }}
      C# winform点击按钮执行telnet登陆,并且执行命令,返回结果,求代码示例。

      是用telnet ip 端口号的方式查看端口开放情况,怎样通过返回值判断?

      你好,在cmd中输入 telnet ip 端口号,会有两种返回结果, 一种为:正在连接到(ip)...不能打开到主机的连接,在端口(端口号):连接失败这个为该IP该端口未开放的返回结果 另一种则会打开一个新的cdm窗口,并关闭原来的窗口,这就表示了该ip该窗口属于开放状态
      telnet 上去如果是黑乎乎的界面,看见光标在闪,说明端口开放。如果不能打开端口就是没开放了。
      你可以直接在DOS系统下输入命令netstat -an来查看相应的端口是否开放
      在DOS下入命令netstat -an。只要能看到的都是打开的,没有显示出来的就是没有打开的端口。
      是用telnet ip 端口号的方式查看端口开放情况,怎样通过返回值判断?

      TELNET如何显示出完整的返回信息

      可以在net start后面加上 > test.txt 也就是打上命令 net start > test.txt 就是把结果输入到test.txt里,然后你在查看这个文件.查看文件应该可以翻页的吧?希望对你有用
      TELNET如何显示出完整的返回信息

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/45935.html

          热门文章

          文章分类