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。还是需要注意一点,只可传输单个文件,文件夹需要打包成单一文件后才可上传。