验证TCP端口连通性-telnet方法和telnet协议RFC854

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证TCP端口连通性-telnet方法和telnet协议RFC854相关的知识,希望对你有一定的参考价值。

参考技术A 先上如何使用telnet的方法,然后研究原理。为什么telnet可以验证端口的连通性?为啥只能验证TCP端口的连通性?UDP协议端口的连通性如何验证?方法只需要看看Rfc854有关telnet协议或者看telnet源码。

telnet命令是TELNET协议的用户接口,它支持两种模式:命令模式和会话模式,虽然telnet支持许多命令,但大部分情况下, 只是使用它查看目标主机是否打开了某端口 (默认是23)。

端口未打开没响应

$ telnet 101.199.97.65 62715

Trying 101.199.97.65...

端口打开但被拒绝连接

$ telnet 101.199.97.65 62715

Trying 101.199.97.65...

telnet: connect to address 101.199.97.65: Connection refused

端口打开并建立连接

$ telnet 101.199.97.65 62715

Trying 101.199.97.65...

Connected to 101.199.97.65.

Escape character is '^]'.

此时命令未退出。

根据提示Escape character is '^]'.可知退出字符为'^]'(CTRL+])。此时输入其它字符不能使其退出,CTRL+C都不行。 输入CTRL+]后会自动执行,进入命令模式:

^]

telnet>

此时再运行quit才会真正退出。

sleep 2使得telnet输出结果后,停留2秒后退出命令模式。

$ sleep 2 | telnet 101.199.97.65 62715

Trying 101.199.97.65...

Connected to 101.199.97.65.

Escape character is '^]'.

Connection closed by foreign host.

命令模式下Telnet 客户端常用命令:

open : 使用openhostname建立到主机的Telnet连接。

close : 使用命令close命令关闭现有的Telnet连接。

display : 使用display命令可以查看Telnet客户端的当前设置。

send : 使用 send 命令可以向 Telnet 服务器发送命令。支持以下命令:

      ao : 放弃输出命令。

      ayt : “Are you there”命令。

      esc : 发送当前的转义字符。

      ip : 中断进程命令。

      synch : 执行 Telnet 同步操作。

      brk : 发送信号。

quit :使用 quit 命令可以退出 Telnet 客户端。

https://tools.ietf.org/html/rfc854

INTRODUCTION

telnet协议的目的是提供一个相对通用的,双向的,面向八位字节的通信机制。它的主要目标是允许界面终端设备和面向终端的进程能通过一个标准方法进行互相交互。该协议可以应用到终端到终端通信(“连接”)和进程到进程通信(分布计算)中。

GENERAL CONSIDERATIONS

一个telnet连接是一个基于传输控制协议TCP (Transmission  Control Protocol ),用来传输带有TELNET控制信息数据的连接。

telnet协议的建立基于这样三个主要想法: 1) 网络虚拟终端的概念NVT ( Network Virtual Terminal); 2) 可谈判选项的原理 (the principle of negotiated options) ;3) 在终端和进程间进行均衡 (a symmetric view of terminals and processes)。

1.一个telnet连接建立时,通信的两端假设在同一个网络虚拟终端NVT上开始和结束操作。一个NVT可以提供标准的、在网络范围内的、规范终端的中间代表者(中间对接)的虚拟设备。这表示无需客户端和服务端彼此保留对方终端的特性信息以及终端处理约定。所有主机包括客户端和服务端,把它们自己的本地设备属性和协商约定映射到同一个网络上的NVT。

NVT在过度受限(没有提供给主机足够的词汇来映射他们的本地字符集)和过度包含(使用适当的终端来处罚用户)之间进行平衡。

The NVT is intended to strike a  balance between being overly restricted (not providing hosts a rich enough vocabulary for mapping into their local character sets), and being overly inclusive (penalizing users with modest terminals).

2.可谈判选项的原则基于这样一个事实:许多主机都希望能够在NVT之上提供更多的服务,而许多用户将会拥有一个更复杂的终端,并且希望能够得到一流的,而不是极少的一点服务。尽管相互独立,但建立在telnet协议中的是许许多多的”选项”参数,这些选项将同”DO,DON’T,WILL, WON’T”结构一起使用,允许用户和服务器在telnet连接上使用更精致的协议集合。这些选项包括改变字符集,回显,等等。

设置选项参数的基本策略,是让任意一方(或双方)初始化一个设置选项参数的请求,另一方可以接受或拒绝该请求。如果该请求被接受了,选项立即生效;如果该请求被拒绝,连接的另一端仍然保留NVT的特性。很显然,一方经常可以通过拒绝一个请求来设置选项有效,而从来不能通过拒绝一个请求来取消一些选项,因为这些选项是双方为了支持NVT而准备的。

所思所想:详细想下为何不能取消这些选项参数呢?取消了会怎样?这些选项参数都是给谁使用的?既然这次协商的客户端和服务端之间不使用这些选项参数,那么有没有这个客户端有没有和其他的服务端之间协商时会用到这些选项参数呢?毕竟客户端只有一个,服务端是多个。想想蛮有意思的,互联网这些设置不是平白无故的,可以客户端对多个服务端,设置一些参数,抓包验证看看。

我们已经建立了一套谈判选项的规则,假如双方同时请求一个相同选项的时候,任意一方都可以把对方的请求当作对自己的请求的肯定回应。

3. 谈判句法的对称性可能会导致无穷尽的应答循环--每一方都把对方发送过来的命令当作必须回答的请求而不是对方的应答(each  party seeing the incoming commands not  as acknowledgments but as new requests which must be acknowledged.  )。为防止这种循环,可以应用下面这些规则:

a.一方只能请求改变选项的状态。也就是一方不能只发送宣布它所使用的模式的请求。

b.如果一方所接收到的请求是要求它进入当前它所在的状态,那么该请求将不会被应答。这种不应答对防止无穷尽的循环是非常重要的。对于那些改变模式的请求,都需要一个应答--尽管该模式不一定改变。

C.无论何时,只要一方给另一方发送一个选项命令,不管该命令是请求还是应答,该选项的使用对从第一方发送到第二方的数据的处理生产影响,必须把该命令插到数据流中希望它开始起作用的点上。(注意:在传送请求和接收到需要一些时间,因为可能是否定的应答过程。因此,一台主机可能在发出一个选项的请求后希望缓冲要发送的数据,直到它知道该请求是被接受还是被拒绝,来隐藏这段对用户来说是"不确定"的时间。)

协议其余内容后续待学习

https://tools.ietf.org/html/rfc854

http://www.cnpaf.net/rfc/rfc854.txt

Windows ❀ Windows系统下端口连通性常见的验证方法

文章目录

在Windows系统下,很多时候都需要确认某一个端口是否被侦听或被打开(服务占用),就需要验证手段进行证明,因此本文主要讲述Windows系统下常用的一下端口验证手段;

1、telnet


大部分人员都了解telnet功能,telnet使用TCP 23端口进行连接某个端口,在Windows系统下需要打开服务才能使用;

C:\\Users\\Administrator>telnet
'telnet' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

1.1 telnet服务开启方法

打开路径:[控制面板]-[程序和功能]-[启动或关闭Windows功能]-[telnet客户端]

1.2 端口连通性验证

打开telnet功能后,就可以使用CMD或powershell进行端口连通性测试;

# 端口不可达
C:\\Users\\Administrator>telnet 127.0.0.1 80
正在连接127.0.0.1...无法打开到主机的连接。 在端口 80: 连接失败

# 端口可达,会进入空白窗口,使用q可以退出窗口,退出后自动回显http请求内容
C:\\Users\\Administrator>telnet 127.0.0.1 80
HTTP/1.1 400 Bad Request
Date: Tue, 10 May 2022 13:38:36 GMT
Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02
Last-Modified: Tue, 03 Sep 2019 07:13:40 GMT
ETag: "8ac-591a0d3eef100"
Accept-Ranges: bytes
Content-Length: 2220
Connection: close
Content-Type: text/html

2、tcping


tcping类似于ping操作,使用方法基本同ping命令一样,默认的Windows系统不支持此命令,需要在外网进行程序下载,将配置文件存放到对应路径下方可使用;

2.1 tcping下载与安装

下面为程序下载链接:

文件下载完成后,将其存放在C:\\WINDOWS\\System32\\目录下面即可;tcping详细下载说明(点击跳转)

2.2 端口连通性验证

Windows下默认的PATH路径包含system32,因此在tcping文件存放后可以直接通过CMD进行使用;

# 查看系统环境变量
C:\\Users\\Administrator>PATH
PATH=... ...C:\\Windows\\system32;... ...

# 端口不可达
C:\\Users\\Administrator>tcping 127.0.0.1 81

Probing 127.0.0.1:81/tcp - No response - time=2015.188ms
Probing 127.0.0.1:81/tcp - No response - time=2006.437ms
Probing 127.0.0.1:81/tcp - No response - time=2006.205ms
Probing 127.0.0.1:81/tcp - No response - time=2008.949ms

Ping statistics for 127.0.0.1:81
     4 probes sent.
     0 successful, 4 failed.  (100.00% fail)
Was unable to connect, cannot provide trip statistics.

# 端口可达
C:\\Users\\Administrator>tcping 127.0.0.1 80

Probing 127.0.0.1:80/tcp - Port is open - time=1.737ms
Probing 127.0.0.1:80/tcp - Port is open - time=0.416ms
Probing 127.0.0.1:80/tcp - Port is open - time=0.570ms
Probing 127.0.0.1:80/tcp - Port is open - time=0.308ms

Ping statistics for 127.0.0.1:80
     4 probes sent.
     4 successful, 0 failed.  (0.00% fail)
Approximate trip times in milli-seconds:
     Minimum = 0.308ms, Maximum = 1.737ms, Average = 0.758ms

3、netstat -ano | findstr


findstr是Window系统自带的一个命令,用于查找某路径下指定的一个或多个文件中包含某些特定字符串的行,并将该行完整的信息打印出来,或者打印查询字符串所在的文件名称。其用途和用法类似Linux系统下的grep命令;

3.1 findstr使用语法

C:\\Users\\Administrator>findstr /?
在文件中寻找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         在一行的开始配对模式。
  /E         在一行的结尾配对模式。
  /L         按字使用搜索字符串。
  /R         将搜索字符串作为一般表达式使用。
  /S         在当前目录和所有子目录中搜索匹配文件。
  /I         指定搜索不分大小写。
  /X         打印完全匹配的行。
  /V         只打印不包含匹配的行。
  /N         在匹配的每行前打印行数。
  /M         如果文件含有匹配项,只打印其文件名。
  /O         在每个匹配行前打印字符偏移量。
  /P         忽略有不可打印字符的文件。
  /OFF[LINE] 不跳过带有脱机属性集的文件。
  /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
  /F:file    从指定文件读文件列表 (/ 代表控制台)/C:string  使用指定字符串作为文字搜索字符串。
  /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)/D:dir     查找以分号为分隔符的目录列表
  strings    要查找的文字。
  [drive:][path]filename
             指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello""there"'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找
"hello there"。

一般表达式的快速参考:
  .        通配符: 任何字符
  *        重复: 以前字符或类出现零或零以上次数
  ^        行位置: 行的开始
  $        行位置: 行的终点
  [class]  字符类: 任何在字符集中的字符
  [^class] 补字符类: 任何不在字符集中的字符
  [x-y]    范围: 在指定范围内的任何字符
  \\x       Escape: 元字符 x 的文字用法
  \\<xyz    字位置: 字的开始
  xyz\\>    字位置: 字的结束

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。

3.2 端口连通性验证

# 端口不可达
C:\\Users\\Administrator>netstat -ano | findstr 81

# 端口可达
C:\\Users\\Administrator>netstat -ano | findstr 80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       18268

以上是关于验证TCP端口连通性-telnet方法和telnet协议RFC854的主要内容,如果未能解决你的问题,请参考以下文章

Windows ❀ Windows系统下端口连通性常见的验证方法

Windows ❀ Windows系统下端口连通性常见的验证方法

Windows ❀ Windows系统下端口连通性常见的验证方法

怎样检测TCP/UDP端口的连通性

怎样检测TCP/UDP端口的连通性

使用Telnet检查服务器防火墙连通性