Linux实用小程序---nc(centos7版本的文件快传功能)
nc这个小程序,基本在所有的Linux发行版里都是自带的,但,该程序在每个发行版中的版本可能都不一样。该程序的官网下载页面为:https://nmap.org/download.html 。其中有各种版本,各种平台,包括windows,linux,mac等等平台。历史版本下载地址:https://nmap.org/dist/?C=M&O=D,老版本下载地址:https://nmap.org/dist-old/。
很显然,茫茫多的版本并不适合我们学习,因此,我们仅仅基于Linux自带的版本学习它的文件快传功能即可。
nc可以迅速地以c/s 模式,传送单个文件到服务器,注意一点,是c端向s端传送,也可以简单理解为上传单个文件到服务器。下面开始讲解文件快传的实现步骤:
一,nc版本的相关介绍
[root@centos7 bin]# whereis nc
nc: /usr/bin/nc /usr/share/man/man1/nc.1.gz
[root@centos7 bin]# ls -al /usr/bin/nc
lrwxrwxrwx. 1 root root 4 Jan 23 22:38 /usr/bin/nc -> ncat
[root@centos7 bin]# rpm -qf /usr/bin/nc
nmap-ncat-6.40-7.el7.x86_64
[root@centos7 bin]# nc -version
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: You must specify a host to connect to. QUITTING.
很显然,nc命令在centos7.2里面,是一个链接文件,所属包是nmap-ncat-6.40-7.el7.x86_64,版本是6.40,并且我们使用的是ncat这个程序,而并不是另一个非常吊炸天的软件nmap,这一点,我们需要有个清醒地认识。如果想要使用nmap,请到官网下载源码并编译安装。
二,nc的帮助文档相关梳理
[root@centos7 ~]# nc --help
Ncat 6.40 ( http://nmap.org/ncat )
Usage: ncat [options] [hostname] [port]
Options taking a time assume seconds. Append 'ms' for milliseconds,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
-4 Use IPv4 only
-6 Use IPv6 only
-U, --unixsock Use Unix domain sockets only
-C, --crlf Use CRLF for EOL sequence
-c, --sh-exec <command> Executes the given command via /bin/sh
-e, --exec <command> Executes the given command
--lua-exec <filename> Executes the given Lua script
-g hop1[,hop2,...] Loose source routing hop points (8 max)
-G <n> Loose source routing hop pointer (4, 8, 12, ...)
-m, --max-conns <n> Maximum <n> simultaneous connections
-h, --help Display this help screen
-d, --delay <time> Wait between read/writes
-o, --output <filename> Dump session data to a file
-x, --hex-dump <filename> Dump session data as hex to a file
-i, --idle-timeout <time> Idle read/write timeout
-p, --source-port port Specify source port to use
-s, --source addr Specify source address to use (doesn't affect -l)
-l, --listen Bind and listen for incoming connections
-k, --keep-open Accept multiple connections in listen mode
-n, --nodns Do not resolve hostnames via DNS
-t, --telnet Answer Telnet negotiations
-u, --udp Use UDP instead of default TCP
--sctp Use SCTP instead of default TCP
-v, --verbose Set verbosity level (can be used several times)
-w, --wait <time> Connect timeout
--append-output Append rather than clobber specified output files
--send-only Only send data, ignoring received; quit on EOF
--recv-only Only receive data, never send anything
--allow Allow only given hosts to connect to Ncat
--allowfile A file of hosts allowed to connect to Ncat
--deny Deny given hosts from connecting to Ncat
--denyfile A file of hosts denied from connecting to Ncat
--broker Enable Ncat's connection brokering mode
--chat Start a simple Ncat chat server
--proxy <addr[:port]> Specify address of host to proxy through
--proxy-type <type> Specify proxy type ("http" or "socks4")
--proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server
--ssl Connect or listen with SSL
--ssl-cert Specify SSL certificate file (PEM) for listening
--ssl-key Specify SSL private key (PEM) for listening
--ssl-verify Verify trust and domain name of certificates
--ssl-trustfile PEM file containing trusted SSL certificates
--version Display Ncat's version information and exit
See the ncat(1) manpage for full options, descriptions and usage examples
可以看到nc命令的相关帮助也是很多的,但,真正有用的,常用的参数也就那么几个,比如:l,v,u,t,p,w,这里需要强调一下,z参数这个版本并没有,也就是扫描的功能该版本没有的哦。
l listen 监听某个网段 ,通常配合p指定端口,
v 打印命令执行的详细信息,如果命令有运行不正常的情况,请使用v参数,debug时常用。
w 通常仅使用w,不使用w的详细参数,也就是等待时间设定。如果指定时间(秒为单位)没有连接到目标,那么,命令将停止。
t和u是一对参数,表示使用协议是tcp还是udp
以上几个参数是常用参数,其实,也就这么几个参数就可以满足大部分的工作需求了。
三,nc命令快传的示例
实验环境:两台虚拟机。版本都为centos7.2.IP为192.168.0.16,192.168.0.17。
实验目的:将16这个服务器的一个文件快传(快速上传)到17服务器上,文件名为test.txt 内容为:my ip is 192.168.0.16
实验步骤:
(1),既然是上传,那么需要一个提供服务的服务器了,这个提供服务的服务器就应该是17啦,一定要记住,是上传!!!!!!!!!!
在192.168.0.17 这执行命令:
nc -lp 12345 >test.txt (这里需要注意,重定向后的文件名可以任意定义,该命令使用的是tcp协议传输文件,因为是默认的)
命令执行后,会是一个前台等待状态,当然,可以多开一个窗口,看看端口12345 是否开放:
[root@centos7 ~]# netstat -antup |grep 12345
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN 66244/nc
tcp6 0 0 :::12345 :::* LISTEN 66244/nc
此时,nc是以服务的名义,监听本机端口12345,可以清楚地看到,是使用的tcp协议。关于端口,请确保端口并没有并占用即可。文件传完毕,服务即刻结束。
(2),客户端的上传步骤
[root@centos6 ~]# echo -e 'my ip is 192.168.0.16' > test.txt
[root@centos6 ~]# cat test.txt
my ip is 192.168.0.16
连接服务端17,上传文件
[root@centos6 ~]# nc -v -w 2 192.168.0.17 12345 < test.txt
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.0.17:12345.
Ncat: 22 bytes sent, 0 bytes received in 0.01 seconds.
此时,我们应该可以在17上看到test.txt了,当然了,我们这个重定向< 后面写的是什么就是什么文件,在这里是test.txt,你可以任意的写,只要你知道到底是什么就行了。(也就是说具有改名功能哦~~惊不惊喜,意不意外!!~~~)
这里,使用了-v显示详细信息,可以看到上传速度,上传时间。就是这么简单,迅速,一个文件就简单的快传到网间服务器了,因为走的是tcp协议,因此,ssh协议等等其它的常规传输协议不会限制文件传输。即使ssh有写deny。还是需要注意一点,只可传输单个文件,文件夹需要打包成单一文件后才可上传。