telnet 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。
它为用户提供了在本地计算机上完成远程主机工作的能力。因此我们可以使用telnet 来测试远程机器的连通性。
telnet 软件包安装
1、检测 telnet 包是否安装
rpm -qa | grep telnet
2、未安装,则安装 telnet 软件包
yum install telnet -y
3、检测安装包是否安装成功
rpm -qa|grep telnet
telnet-0.17-64.el7.x86_64
以上我们完成了 telnet 客户端软件的安装。
命令格式
telnet serverIP port
例如:连接一个存在的端口,连接成功
telnet 192.168.1.110 8081
Trying 192.168.1.110…
Connected to 192.168.1.110.
Escape character is ‘^]’.
连接一个不存在的端口,连接被拒绝
telnet 192.168.1.110 8088
Trying 192.168.1.110…
telnet: connect to address 192.168.1.110: Connection refused
wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP 协议下载,并可以使用 HTTP 代理。
wget 名称的由来是 “World Wide Web” 与 “get” 的结合,它也可以用来测试端口的连通性。
具体用法格式如下 :
wget ip:port
例如:连接一个存在的端口
wget 192.168.1.100:8081
–2022-11-15-- http://192.168.1.100:8081/
Connecting to 192.168.1.100:8081… connected.
…
连接一个不存在的端口
wget 192.168.1.110:8088
–2021-11-25-- http://192.168.1.110:8088/
Connecting to 192.168.1.110:8088… failed: Connection refused.
curl 是利用 URL 语法在命令行方式下工作的开源文件传输工具。也可以用来测试端口的连通性。 适合验证第三方提供的地址是否可以连通
具体用法格式如下 :
curl ip:port
例如:连接一个存在的端口,输出正常信息
curl 192.168.1.110:8080
...
连接一个不存在的端口,拒绝连接
curl 192.168.1.110:8088
curl: (7) Failed connect to 192.168.1.110:8088; Connection refused
其它使用方式(请求第三方地址是否连通)
格式 curl -vL 地址
例如:curl -vL http://www.baidu.com
通过代理访问
格式:cutl -x 代理地址+端口 -v 请求地址
不通过代理访问
curl -x "" 请求地址
或者
curl --noproxy '*' 请求地址
发送post请求方式
curl -X POST -d 'a=1&b=nihao' URL
发送curl from表单格式请求
curl -d "key=value&key=value" "URL"
发送json报文格式请求
curl -H "Content-Type:application/json" -X POST -d 'json报文' 'URL'
发送XML报文格式请求方式
echo ' xml报文'|curl -X POST -H 'Content-type:text/xml' -d @- URL
ssh 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,在 linux上可以通过 ssh 命令来测试端口的连通性。
具体用法格式如下:
ssh -v -p port username@ip
或者
ssh -v -p port ip
说明:
-v 调试模式(会打印日志).
-p 指定端口
username:远程主机的登录用户
ip:远程主机
例如:连接一个存在的端口
ssh -v -p 8081 192.168.1.110
OpenSSH_7.4pl, OpenSSL 1.0.2k-fips 26 Jan 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.1.110 [192.168.1.110] port 8081.
debug1: Connection established. //出现该行表示连接成功
…
连接一个不存在的端口
ssh -v -p 8081 192.168.1.110
ssh: connect to host 192.168.1.110 port 8081: Connection refused
tcping 是一个可以替代 ping 命令来检测网络状态的一个工具。因为 ping 命令只能检测ICMP报文,当对方禁止了 ping协议,自然 ping 命令也就无法检测了,这个时候可以通过 tcping 命令来检测网络的连通性。 tcping 有 windows 版和 linux 版本,可以根据自己的需求自行下载使用。
windows 版本下载地址
https://www.elifulkerson.com/projects/tcping.php
使用例子如下:
D:\ceshi> tcping.exe 192.168.1.110 8081
Probing 192.168.1.110:8081/tcp - Port is open -time=4.706ms
Probing 192.168.1.110:8081/tcp - Port is open -time=0.946ms
Probing 192.168.1.110:8081/tcp - Port is open -time=0.806ms
Probing 192.168.1.110:8081/tcp - Port is open -time=1.706ms
Ping statistics for 192.168.1.110:8081
4 probes sent.
4 successful, 0 failed. <0.00% fail>
Approximate trip times in milli-seconds:
Minimum = 0.806ms, Maximum = 4.706ms, Average = 1.885ms
linux 版下载地址
地址http://linuxco.de/tcping/tcping-1.3.5.tar.gz
使用例子如下:
gcc -o tcping tcping.c
cp tcping /usr/bin
tcping www.baidu.com 80
www.baidu.com port 80 open.
tcping 10.25.12.153 2335
10.25.12.153 port 2335 open
当需要测试报文是否发送到对端,也可以使用 tcpdump 命令进行抓包分析。
通常使用的方式是通过 tcpdump 命令抓取数据包,然后通过
wireshake 工具进行分析。
使用方式如下:
监视指定网络接口、某个具体端口号接收的tcp报文的数据包
tcpdump -i eth0 -n tcp port 8081
也可以指定ip, 例如获取所有192.168.1.110 的主机收到的和发出的所有数据包
tcpdump host 192.168.1.110
也可以把抓取的数据包保存到cap格式的文件中,通过使用wireshark进行分析
tcpdump tcp -i eth0 -w /ceshi.cap
命令格式如下:netstat [选项]
netstat 参数如下:
-a 显示所有socket,包括正在监听的。
-c 每隔1秒就重新显示一遍,直到用户中断它。
-i 显示所有网络接口的信息,格式同“ifconfig -e”。
-n 以网络IP地址代替名称,显示出网络连接情形。
-r 显示核心路由表,格式同“route -e”。
-t 显示TCP协议的连接情况。
-u 显示UDP协议的连接情况。
-v 显示正在进行的工作。
命令 | 说明 |
---|---|
netstat -anp | 显示系统端口使用情况 |
netstat -nupl | UDP类型的端口 |
netstat -ntpl | TCP类型的端口 |
netstat -l | 只显示所有监听端口 |
netstat -lt | 只显示所有监听tcp端口 |
例如:查看本机开启的端口。
这是本机最常用的方式,使用选项"-tuln"。因为使用了"-I"选项,所以只能看到监听状态的连接,而不能看到已经连接状态的连接。
netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0:::11211 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
#协议接收队列发送队列本机的 IP 地址及端口号 远程主机的 IP 地址及端口号 状态
这个命令的输出较多。 1) Proto:网络连接的协议,一般就是 TCP 协议或者 UDP 协议。 2)
Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。 3)
Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,不具备 ACK 标志的数据包。 4) Local
Address:本机的 IP 地址和端口号。 5) ForeignAddress:远程主机的 IP 地址和端口号。 6)
State:状态。常见的状态主要有以下几种。
-LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
-ESTABLISHED:已经建立连接的状态。如果使用"-I"选项,则看不到已经建立连接的状态。
-SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
-SYN_RECV:接收到主动连接的数据包。
-FIN_WAIT1:正在中断的连接。
-FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
-TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
-CLOSED:套接字没有被使用。
在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经连接。
查看本机有哪些程序开启的端口。
如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。
例如:
netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2359/mysqld
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 1563/memcached
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1490/sshd
tcp 0 0 :::11211 :::* LISTEN 1563/memcached
tcp 0 0 :::80 :::* LISTEN 21025/httpd
tcp 0 0 :::22 :::*
LISTEN 1490/sshd
udp 0 0 0.0.0.0:11211 0.0.0.0:* 1563/memcached
udp 0 0:::11211 :::* 1563/memcached
#比之前的命令多了一个"-p"选项,结果多了可以知道是哪个程序占用了端口
参考连接:https://blog.csdn.net/whatday/article/details/127185718