linux 测试网络连通性方法

一、telnet 方法

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 方法

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 方法

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方法

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 工具方法

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 命令进行抓包分析。
通常使用的方式是通过 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 [选项]

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

你可能感兴趣的:(linux,linux,网络,运维)