nc / netcat
跨网络读写数据 - 任意TCP和UDP连接和监听.

语法

  nc [-46AcCdDhklnrStuUvz] [-b boundif] [-i interval] [-p source_port]
        [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
           [-x proxy_address[:port]] [hostname] [port[s]]

选项



   -4     仅使用IPv4地址

   -6     仅使用IPv6地址

   -A      在socket上设置SO_RECV_ANYIF 

   -b boundif
           绑定套接字的接口.

   -c      将CRLF作为行结束发送

   -C      强制不使用蜂窝数据内容. 

   -d      不尝试从stdin读取。
           这将阻止从客户端向服务器发送任何文本

   -D      在套接字上启用调试

   -h      打印帮助

   -i interval
           指定发送和接收的文本行之间的延迟时间间隔。
           还会导致连接到多个端口之间的延迟时间

   -G conntimeout
           TCP连接超时(秒)

   -H keepidle
           初始TCP保持超时时间(以秒为单位)

   -I keepintvl
           重复TCP的时间间隔以秒为单位

   -J keepcnt
           重复TCP以保持数据包活动的次数

   -k      强制nc在当前连接完成后继续侦听另一个连接。
           在没有-l选项的情况下使用此选项是错误的。

   -l      侦听传入的连接,而不是初始化到远程主机的连接。
           将此选项与-p、-s或-z选项一起使用是错误的。
           此外,使用-w选项指定的任何超时都将被忽略。

   -L num_probes
           在声明对等点不可到达之前要发送给对等点的探测数,并生成一个adpative超时读写事件。

   -n      跳过地址、主机名或端口上的所有DNS或服务查找

   -p source_port
           指定源端口nc应该使用的端口,受权限限制和可用性限制。
           将此选项与-l选项一起使用是错误的。

   -r      随机选择源端口和/或目标端口

   -s source_ip_address
           用于发送数据包的接口的IP。
           将此选项与-l选项结合使用是错误的。

   -S      启用RFC 2385 TCP MD5 签名选项

   -t      发送RFC 854 DON'T 和 WON'T responses 到 RFC 854 DO 和 WILL 请求.
           这使得使用nc编写telnet会话脚本成为可能

   -T ToS  指定连接的IP服务类型(ToS)

   -U      Use Unix Domain Sockets.

   -u      使用UDP

   -v      提供更详细的输出

   -w timeout
           如果连接和stdin空闲时间超过超时秒,则该连接将关闭。
           -w标志对-l选项没有影响,也就是说,
           nc将永远监听连接,无论是否有-w标志。默认无超时。

   -X proxy_version
           请求nc在与代理服务器通信时应使用指定的协议。
           支持的协议有“4”(SOCKS v.4)、“5”(SOCKS v.5)和“connect”(HTTPS proxy)。
           如果没有指定协议,则使用SOCKS version 5。

   -x proxy_address[:port]
           在proxy_address和端口使用代理连接到主机名。
           如果没有指定端口,则使用代理协议的已知端口(SOCKS为1080,HTTPS为3128)。

   -z      只扫描侦听守护进程,而不向它们发送任何数据。将此选项与-l选项一起使用是错误的。

常见用途包括:

简单的TCP代理
基于Shell脚本的HTTP客户端和服务器
网络守护进程测试
用于ssh的SOCKS或HTTP代理命令

客户/服务器模型

Netcat可以执行基本的客户端/服务器功能,允许机器之间“聊天”.
在一个控制台,启动nc监听连接的特定端口:

# 在IP 10.10.10.10的计算机a上,我们在端口64上监听
$ nc -l -p 64

nc现在正在监听端口64的连接。在第二个控制台(或第二台机器)上,连接到正在监听的机器和端口: 
$ nc 127.0.0.1 64

现在应该在端口之间建立连接。
在第二个控制台输入的任何内容都将连接到第一个控制台,反之亦然。
在建立连接之后,nc并不真正关心哪一方被用作“服务器”以及哪一方被用作“客户端”。
可以使用EOF(^ D)终止连接

数据传输

可以扩展上一面的示例以构建基本数据传输模型,输入到连接一端的任何信息都将输出到另一端,并且可以轻松捕获输入和输出以模拟文件传输。.

首先使用nc监听特定端口,并将输出捕获到文件中
$ nc -l 64 > filename.out

使用第二台机器,连接到侦听nc进程,向其传送要传输的文件
$ nc host.example.com 64 < filename.in
or
$ cat filename.in | nc host.example.com -p 64

传输文件后,连接将自动关闭.

与服务器’交谈’

有时可以“手动”而不是通过用户界面与服务器通信。当可能需要验证服务器响应客户端发出的命令时发送的数据时,它可以帮助进行故障排除。

例如,检索网站的主页:

   $ echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

请注意,这还会显示Web服务器发送的标头。如有必要,可以使用sed等工具对其进行过滤。当用户知道服务器所需的请求格式时,可以构建更复杂的示例。作为另一个示例,可以使用以下方式将电子邮件提交给SMTP服务器:

  $ nc localhost 25 << EOF
  HELO host.example.com
  MAIL FROM: <user@host.example.com>
  RCPT TO: <user2@host.example.com>
  DATA
  Body of email.
  .
  QUIT
  EOF

端口扫描

了解哪些端口在目标计算机上打开并运行服务可能很有用。-z标志可用于告诉nc报告开放端口,而不是发起连接。例如:

$ nc -z host.example.com 20-30

Connection to host.example.com 22 port [tcp/ssh] succeeded! 
Connection to host.example.com 25 port [tcp/smtp] succeeded! 

指定端口范围以将搜索限制为端口20-30。

安装Netcat

sudo aptitude install netcat
sudo yum install netcat
sudo apt-get install netcat

例子

打开到host.example.com端口42的TCP连接,使用端口31337作为源端口,超时为5秒:

$ nc -p 31337 -w 5 host.example.com 42

打开与host.example.com端口53的UDP连接:

$ nc -u host.example.com 53

使用10.1.2.3作为连接本地端的IP,打开与host.example.com端口42的TCP连接:

$ nc -s 10.1.2.3 host.example.com 42

在Unix域套接字上创建和监听:

$ nc -lU /var/tmp/dsocket

通过10.2.3.4端口8080的HTTP代理连接到host.example.com的端口42…

 $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42

nc 命令实例:

linux命令:nc localhost 10000 <<< "message" "message" <<< 10000 localhost nc nc localhost 10000 <<< "message"rootopen.com
linux命令:nc localhost 10000 <<< "message" "message" <<< 10000 localhost nc nc localhost 10000 <<< "message"rootopen.com
2018-03-27 09:17:48

linux命令:nc -v -l 80 < file.ext file.ext < 80 -l -v nc nc -v -l 80 < file.extrootopen.com
linux命令:nc -v -l 80 < file.ext file.ext < 80 -l -v nc nc -v -l 80 < file.extrootopen.com
2018-04-14 13:31:48

linux命令:nc -v -n -z -w 1 127.0.0.1 22-1000 22-1000 127.0.0.1 1 -w -z -n -v nc nc -v -n -z -w 1 127.0.0.1 22-1000rootopen.com
linux命令:nc -v -n -z -w 1 127.0.0.1 22-1000 22-1000 127.0.0.1 1 -w -z -n -v nc nc -v -n -z -w 1 127.0.0.1 22-1000rootopen.com
2018-01-09 06:33:48

linux命令:nc -l -p 2000 -c "nc example.org 3000" 3000" example.org "nc -c 2000 -p -l nc nc -l -p 2000 -c "nc example.org 3000"rootopen.com
linux命令:nc -l -p 2000 -c "nc example.org 3000" 3000" example.org "nc -c 2000 -p -l nc nc -l -p 2000 -c "nc example.org 3000"rootopen.com
2018-02-02 22:36:48

linux命令:nc -l -p 2000 < song.mp3 song.mp3 < 2000 -p -l nc nc -l -p 2000 < song.mp3rootopen.com
linux命令:nc -l -p 2000 < song.mp3 song.mp3 < 2000 -p -l nc nc -l -p 2000 < song.mp3rootopen.com
2017-12-25 13:26:48

linux命令:nc -l -p 2000 -e /bin/bash /bin/bash -e 2000 -p -l nc nc -l -p 2000 -e /bin/bashrootopen.com
linux命令:nc -l -p 2000 -e /bin/bash /bin/bash -e 2000 -p -l nc nc -l -p 2000 -e /bin/bashrootopen.com
2018-02-02 20:13:48

linux命令:nc -l 8000 8000 -l nc nc -l 8000rootopen.com
linux命令:nc -l 8000 8000 -l nc nc -l 8000rootopen.com
2018-04-21 16:56:48

linux命令:ncal -e -e ncal ncal -erootopen.com
linux命令:ncal -e -e ncal ncal -erootopen.com
2018-02-16 22:15:48

linux命令:ncdu directory_name directory_name ncdu ncdu directory_namerootopen.com
linux命令:ncdu directory_name directory_name ncdu ncdu directory_namerootopen.com
2018-04-12 13:26:48

linux命令:nc $telnetserver 23 < $commandfile $commandfile < 23 $telnetserver nc nc $telnetserver 23 < $commandfilerootopen.com
linux命令:nc $telnetserver 23 < $commandfile $commandfile < 23 $telnetserver nc nc $telnetserver 23 < $commandfilerootopen.com
2018-06-11 16:24:48

linux命令:ncdu ncdu ncdurootopen.com
linux命令:ncdu ncdu ncdurootopen.com
2018-03-19 20:09:48

linux命令:nc -zw2 www.example.com 80 && echo open open echo && 80 www.example.com -zw2 nc nc -zw2 www.example.com 80 && echo openrootopen.com
linux命令:nc -zw2 www.example.com 80 && echo open open echo && 80 www.example.com -zw2 nc nc -zw2 www.example.com 80 && echo openrootopen.com
2018-06-04 00:45:48

linux命令:nc -vv $MIDDLEHOST 1234; ## nc -vv -l $IamMIDDLEHOST 1234 | nc $Targethost 1234;## nc -l $IamTargetHost 1234 -e /bin/bash; /bin/bash; -e 1234 $IamTargetHost -l nc 1234;## $Targethost nc | 1234 $IamMIDDLEHOST -l -vv nc ## 1234; $MIDDLEHOST -vv nc nc -vv $MIDDLEHOST 1234; ## nc -vv -l $IamMIDDLEHOST 1234 | nc $Targethost 1234;## nc -l $IamTargetHost 1234 -e /bin/bash;rootopen.com
linux命令:nc -vv $MIDDLEHOST 1234; ## nc -vv -l $IamMIDDLEHOST 1234 | nc $Targethost 1234;## nc -l $IamTargetHost 1234 -e /bin/bash; /bin/bash; -e 1234 $IamTargetHost -l nc 1234;## $Targethost nc | 1234 $IamMIDDLEHOST -l -vv nc ## 1234; $MIDDLEHOST -vv nc nc -vv $MIDDLEHOST 1234; ## nc -vv -l $IamMIDDLEHOST 1234 | nc $Targethost 1234;## nc -l $IamTargetHost 1234 -e /bin/bash;rootopen.com
2018-03-23 01:59:48

linux命令:ncat -l portnumber portnumber -l ncat ncat -l portnumberrootopen.com
linux命令:ncat -l portnumber portnumber -l ncat ncat -l portnumberrootopen.com
2018-01-12 11:10:48

linux命令:nc -l -p portnumber portnumber -p -l nc nc -l -p portnumberrootopen.com
linux命令:nc -l -p portnumber portnumber -p -l nc nc -l -p portnumberrootopen.com
2018-04-15 00:27:48

linux命令:nc -zw2 www.example.com 80 || echo http service is down | mail -s 'http is down' admin@example.com admin@example.com down' is 'http -s mail | down is service http echo || 80 www.example.com -zw2 nc nc -zw2 www.example.com 80 || echo http service is down | mail -s 'http is down' admin@example.comrootopen.com
linux命令:nc -zw2 www.example.com 80 || echo http service is down | mail -s 'http is down' admin@example.com admin@example.com down' is 'http -s mail | down is service http echo || 80 www.example.com -zw2 nc nc -zw2 www.example.com 80 || echo http service is down | mail -s 'http is down' admin@example.comrootopen.com
2018-01-07 11:08:48

linux命令:nc -l -p 7777 > /dev/null /dev/null > 7777 -p -l nc nc -l -p 7777 > /dev/nullrootopen.com
linux命令:nc -l -p 7777 > /dev/null /dev/null > 7777 -p -l nc nc -l -p 7777 > /dev/nullrootopen.com
2018-02-16 06:16:48

linux命令:nc <ip> <port> -v -v <port> <ip> nc nc <ip> <port> -vrootopen.com
linux命令:nc <ip> <port> -v -v <port> <ip> nc nc <ip> <port> -vrootopen.com
2018-01-29 17:16:48

linux命令:nc -z <IP> <TCP port> OR nc -zu <IP> <UDP port> port> <UDP <IP> -zu nc OR port> <TCP <IP> -z nc nc -z <IP> <TCP port> OR nc -zu <IP> <UDP port>rootopen.com
linux命令:nc -z <IP> <TCP port> OR nc -zu <IP> <UDP port> port> <UDP <IP> -zu nc OR port> <TCP <IP> -z nc nc -z <IP> <TCP port> OR nc -zu <IP> <UDP port>rootopen.com
2018-02-21 07:33:48

linux命令:ncat -l -p 1234 --sh-exec "tee -a to.log | nc machine port | tee -a from.log" from.log" -a tee | port machine nc | to.log -a "tee --sh-exec 1234 -p -l ncat ncat -l -p 1234 --sh-exec "tee -a to.log | nc machine port | tee -a from.log"rootopen.com
linux命令:ncat -l -p 1234 --sh-exec "tee -a to.log | nc machine port | tee -a from.log" from.log" -a tee | port machine nc | to.log -a "tee --sh-exec 1234 -p -l ncat ncat -l -p 1234 --sh-exec "tee -a to.log | nc machine port | tee -a from.log"rootopen.com
2018-03-14 17:44:48

linux命令:nc -zvw 1 host port port host 1 -zvw nc nc -zvw 1 host portrootopen.com
linux命令:nc -zvw 1 host port port host 1 -zvw nc nc -zvw 1 host portrootopen.com
2018-02-01 09:05:48

linux命令:nc -l $PORT | pv -b > archive.tar.bz2 archive.tar.bz2 > -b pv | $PORT -l nc nc -l $PORT | pv -b > archive.tar.bz2rootopen.com
linux命令:nc -l $PORT | pv -b > archive.tar.bz2 archive.tar.bz2 > -b pv | $PORT -l nc nc -l $PORT | pv -b > archive.tar.bz2rootopen.com
2018-04-19 23:13:48

linux命令:ncftpget -u Us3r -p Passw0rd ftp.backups.com . 'site.com.tar.gz' 'site.com.tar.gz' . ftp.backups.com Passw0rd -p Us3r -u ncftpget ncftpget -u Us3r -p Passw0rd ftp.backups.com . 'site.com.tar.gz'rootopen.com
linux命令:ncftpget -u Us3r -p Passw0rd ftp.backups.com . 'site.com.tar.gz' 'site.com.tar.gz' . ftp.backups.com Passw0rd -p Us3r -u ncftpget ncftpget -u Us3r -p Passw0rd ftp.backups.com . 'site.com.tar.gz'rootopen.com
2018-01-27 04:09:48

linux命令:nc -l <port-number> <port-number> -l nc nc -l <port-number>rootopen.com
linux命令:nc -l <port-number> <port-number> -l nc nc -l <port-number>rootopen.com
2018-05-12 07:08:48

linux命令:nc -w 5 -v -l -p 80 < file.ext file.ext < 80 -p -l -v 5 -w nc nc -w 5 -v -l -p 80 < file.extrootopen.com
linux命令:nc -w 5 -v -l -p 80 < file.ext file.ext < 80 -p -l -v 5 -w nc nc -w 5 -v -l -p 80 < file.extrootopen.com
2018-02-12 13:42:48

linux命令:nc -l -p 3003 -e /bin/bash /bin/bash -e 3003 -p -l nc nc -l -p 3003 -e /bin/bashrootopen.com
linux命令:nc -l -p 3003 -e /bin/bash /bin/bash -e 3003 -p -l nc nc -l -p 3003 -e /bin/bashrootopen.com
2018-05-29 09:06:48

linux命令:nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"' today?</p>"' you are "<p>How OK\r\n$(date)\r\n\r\n";echo 200 "HTTP/1.1 -e 'echo -c 5432 -kl nc nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"'rootopen.com
linux命令:nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"' today?</p>"' you are "<p>How OK\r\n$(date)\r\n\r\n";echo 200 "HTTP/1.1 -e 'echo -c 5432 -kl nc nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"'rootopen.com
2018-05-31 04:49:48

linux命令:nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"' today?</p>"' you are "<p>How OK\r\n$(date)\r\n\r\n";echo 200 "HTTP/1.1 -e 'echo -c 5432 -kl nc nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"'rootopen.com
linux命令:nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"' today?</p>"' you are "<p>How OK\r\n$(date)\r\n\r\n";echo 200 "HTTP/1.1 -e 'echo -c 5432 -kl nc nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"'rootopen.com
2018-03-22 13:05:48

linux命令:nc -k -l 5432 -c 'echo My Web Server is Alive' Alive' is Server Web My 'echo -c 5432 -l -k nc nc -k -l 5432 -c 'echo My Web Server is Alive'rootopen.com
linux命令:nc -k -l 5432 -c 'echo My Web Server is Alive' Alive' is Server Web My 'echo -c 5432 -l -k nc nc -k -l 5432 -c 'echo My Web Server is Alive'rootopen.com
2018-04-24 20:42:48

linux命令:nc -zv localhost 25 25 localhost -zv nc nc -zv localhost 25rootopen.com
linux命令:nc -zv localhost 25 25 localhost -zv nc nc -zv localhost 25rootopen.com
2018-03-09 20:09:48

linux命令:nc HOST PORT | tee movie.mp4 | mplayer - - mplayer | movie.mp4 tee | PORT HOST nc nc HOST PORT | tee movie.mp4 | mplayer -rootopen.com
linux命令:nc HOST PORT | tee movie.mp4 | mplayer - - mplayer | movie.mp4 tee | PORT HOST nc nc HOST PORT | tee movie.mp4 | mplayer -rootopen.com
2018-06-11 13:40:48

linux命令:ncat -vlm 5 --ssl --chat 9876 9876 --chat --ssl 5 -vlm ncat ncat -vlm 5 --ssl --chat 9876rootopen.com
linux命令:ncat -vlm 5 --ssl --chat 9876 9876 --chat --ssl 5 -vlm ncat ncat -vlm 5 --ssl --chat 9876rootopen.com
2018-05-26 23:20:48

linux命令:nc -vz -u 8.8.8.8 53 53 8.8.8.8 -u -vz nc nc -vz -u 8.8.8.8 53rootopen.com
linux命令:nc -vz -u 8.8.8.8 53 53 8.8.8.8 -u -vz nc nc -vz -u 8.8.8.8 53rootopen.com
2018-03-08 23:16:48

Linux的Bash命令行(A-Z排序)