Linux里有类似Windows体系里的Tcping端口连接检测对象吗

2019-06-28

 1. nc命令简介

NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

netcat简介

以CentOS7.5最小安装版为例,默认情况下系统并没有集成nc工具集,需要手动安装它:

  1. [root@zcwyou ~]# yum install -y nmap-ncat 

2. 测试192.168.1.1的TCP80端口是否可以正常连接

  1. [root@zcwyou ~]# nc -v -w 1 192.168.1.1 -z 80 
  • Ncat: Version 7.50
  • Ncat: Connected to 192.168.1.1:80.
  • Connected表示连接成功。

linux使用netcat命令检测TCP80端口是否可以正常连接

试试连接81端口

  1. [root@zcwyou ~]# nc -v -w 1 192.168.1.1 -z 81 
  • Ncat: Version 7.50
  • Ncat: Connection refused.
  • Connection refused.连接拒绝,表示对方没有打开81端口或者中间防火墙不允许81端口。

3. 使用nc传输文件

大部分时间中,我们都在试图通过网络或者其他工具传输文件。有很多种方法,比如FTP,SCP,SMB等等,但是当你只是需要临时或者一次传输文件,真的值得浪费时间来安装配置一个软件到你的机器上嘛。假设,你想要传一个文件zcwyou.txt 从A到B。A或者B都可以作为服务器或者客户端,以下,让A作为服务器,B为客户端。

Server端配置

  1. [root@zcwyou ~]# nc -l 1567 < zcwyou.txt 

Client

  1. [root@zcwyou ~]# nc -n 172.31.100.7 1567 > zcwyou.txt 

原理:Server端把zcwyou.txt输入到nc,由nc发送,Client端通过nc接收消息,把它保存到zcwyou.txt。

4. 克隆硬盘或分区

server2上进行类似的监听动作,即把接收的数据重定向给dd:

  1. [root@zcwyou ~]# nc -l -p 1234 | dd of=/dev/sda 

server1上把dd后的数据重定向给nc,即发送数据

  1. [root@zcwyou ~]# dd if=/dev/sda | nc 192.168.200.27 1234 

注意:克隆硬盘或分区的操作,不应在已经mount的的系统上进行。

5. 指定源端口

假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。

服务器端打开监听:

  1. [root@zcwyou ~]# nc -l 1567 

客户端发送数据,目标端口1567,源端口25

  1. [root@zcwyou ~]# nc 172.31.100.7 1567 -p 25 

使用1024以内的端口需要root权限。

该命令将在客户端开启25端口用于通讯,否则将使用随机端口。

6. 指定源地址

使用-s选项指定源ip地址。

服务器端打开监听,把zcwyou.txt重定向给nc。

  1. [root@zcwyou ~]# nc -u -l 1567 < zcwyou.txt 

客户端

  1. [root@zcwyou ~]# nc -u 192.168.100.1 1567 -s 192.168.88.20 > file.txt 

当服务器有多个IP时,指定使用192.168.88.20作为源IP。

7. 目录传输

发送一个文件很简单,但是如果我们想要发送多个文件,或者整个目录,一样很简单,只需要使用压缩工具tar,压缩后发送压缩包。

如果你想要通过网络传输一个目录从A到B。

Server端,打包abc目录,并重定向到nc

  1. [root@zcwyou ~]# tar -cvf - abc | nc -l 1567 

Client端,通过nc接收数据并由tar解包

  1. [root@zcwyou ~]# nc -n 172.31.100.7 1567 | tar -xvf - 

如果想要节省带宽传输压缩包,我们可以使用bzip2或者其他工具压缩。

Server端通过bzip2压缩目录abc并重定向到nc,监听端口1567

  1. [root@zcwyou ~]# tar -cvf - abc | bzip2 -z | nc -l 1567 

Client端把接收到的数据通过交给bzip2和tar处理

  1. [root@zcwyou ~]# nc -n 172.16.26.88 1567 | bzip2 -d |tar -xvf - 

8. 加密你通过网络发送的数据

如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。

服务端,使用mcrypt工具加密数据。

  1. [root@zcwyou ~]# nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > zcwyou.txt 

客户端,使用mcrypt工具解密数据。

  1. mcrypt -flush -bare -F -q -m ecb < zcwyou.txt | nc -l 1567 

以上两个命令会提示需要密码,确保两端使用相同的密码。

这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以。

9. 传输流视频

虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用netcat,我们仍然有希望做成这件事。

服务端读取一个视频文件重定向输出到netcat客户端

  1. [root@zcwyou ~]# cat video.avi | nc -l 1567 

客户端通过nc读取内容交给mplayer播放器

  1. [root@zcwyou ~]# nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 - 

10. 使用UDP协议

默认情况下,nc创建连接时只会连接TCP端口。 不过我们可以使用-u选项来连接到 UDP 端口

  1. [root@zcwyou ~]# ncat -l -u 8888 

udp 8888端口已经打开,然后用netstat验证一下端口是否打开。

  1. [root@zcwyou ~]# netstat -tunlp | grep 1234 

udp 0 0 0.0.0.0:1234 0.0.0.0:* 17341/nc

udp6 0 0 :::1234 :::* 17341/nc

测试某服务器的UDP端口,比如检查本地是否可以使用阿里DNS服务器223.5.5.5

  1. [root@zcwyou ~]# nc -v -u 223.5.5.5 53 

Ncat: Version 7.50

Ncat: Connected to 223.5.5.5:53.

显示Connected即表明成功连接到远程DNS端口,DNS工作正常。

linux使用netcat测试服务器的UDP端口

11. 其它用途

使用-t选项模拟Telnet客户端:

HTTP客户端用于下载文件

连接到邮件服务器,使用SMTP协议检查邮件

使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。

简单来说,只要你了解协议就可以使用netcat作为网络通讯媒介,实现各种客户端。