linux系统nc命令使用

Posted 李迟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统nc命令使用相关的知识,希望对你有一定的参考价值。

linux 系统 nc 命令使用。

安装

centos 系统安装命令:

sudo yum -y install nmap-ncat

一般使用如下:

服务端:nc -l <端口>
客户端:nc <IP> <端口>

命令说明

官方命令说明如下:

$ nc --help
Ncat 7.50 ( https://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
  -z                         Zero-I/O mode, report connection status only
      --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" or "socks5")
      --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
      --ssl-ciphers          Cipherlist containing SSL ciphers to use
      --version              Display Ncat's version information and exit

See the ncat(1) manpage for full options, descriptions and usage examples

重点如下:

-l 设置侦听模式,此时为服务端
-p 指定源端口端口,实际中似乎不使用
-s 指定源地址,有多个网卡可用之(特别是虚拟机环境中)
-u 使用UDP协议,默认为TCP
-v 输出日志,可用于调试
-w 超时秒数,后面跟数字
-o 服务端用,将接收的数据存储到文件
-x 同上,但数据会转换为十六进制(对于一些协议数据特别有用)

实例演示

如果服务端有一个客户端连接,则无法再响应其它连接。

单独作为客户端

nc <IP> <端口>

服务端由其它程序实现,可用于服务端的调试。

收发数据/文件

服务端:
nc -l 1314 -o foo

客户端:
printf "hello" | nc 192.168.28.11 1314
或 nc 192.168.28.11 1214 < test  (注:test为一个文件,其内容为 hello)
或 echo -n "hello" | nc 192.168.28.11 1314

本例中,服务端接收的数据会显示在终端,也会保存到foo文件,-o为常规形式,-x为十六进制数据,十六进制示例如下:

[0000]   68 65 6C 6C 6F                                      hello

类似的,收发文件示例如下:

服务端: nc -l 1314 > foo
客户端:nc 192.168.28.11 1314 < /tmp/foo 
注:使用重定向符实现

注:终端会显示接收的数据,如何隐藏,暂未找到方法。

模拟聊天工具(实际为收发数据)

服务端:
nc -l 1314

客户端:
nc 192.168.28.11 1314

注:在一终端输入字符,另一终端可接收到,反之亦然

测试网速

先安装dstat:
sudo yum install -y dstat 
一机器执行:
nc -l 1314 > /dev/null
另一机器执行:
nc 192.168.28.11 1314 < /dev/zero 

再执行:
dstat

以上是关于linux系统nc命令使用的主要内容,如果未能解决你的问题,请参考以下文章

linux系统ubuntu19.04使用nc命令开放(iptables以及ufw命令无效情况下)

Linux Centos7 nc探测端口命令并实时探测

Linux Centos7 nc探测端口命令并实时探测

linux怎么使用nc命令来发送一串使用udp协议的数据?或者不是NC也可以的命令

Linux下利用nc命令来监控检测服务器的端口使用情况(转载)

nc 命令使用小结