官方介绍: https://nmap.org/ncat/
使用手册: https://nmap.org/ncat/guide/index.html
概述
1 介绍
1.1 选项
1.2 exec模式的环境变量
2 使用手册
2.1 用途
2.2 基本用法
2.3 协议
2.4 连接代理
2.5 SSL
2.6 命令执行
2.7 输出选项
2.8 访问控制
2.9 代理
2.10 其它选项
2.11 文件传输
2.12 聊天
2.13 Neat Tricks(巧妙用法)
2.14 模拟诊断服务
1 介绍
ncat为nmap项目而编写
ncat是对netcat的一种改进,但它们不共享任何源代码,且ncat与netcat(包含不同分支的netcat)有着良好的兼容性
ncat支持TCP/UDP端口重定向、SOCKS4/HTTP代理、SSL等功能
1.1 选项
-4 | 仅使用IPv4 |
-6 | 仅使用IPv6 |
-U, --unixsockUse | 仅使用Unix域套接字(程序间通信) |
--vsockUse | 仅使用vsock套接字(vsock用于虚拟机与其运行的主机进行通信) |
-C, --crlf | 使用CRLF作为每行的结尾 |
-c, --sh-exec <command> | 连接建立后,使用/bin/sh执行指定的命令 |
-e, --exec <command> | 连接建立后,执行指定的程序 |
--lua-exec <filename> | 连接建立后,执行Lua脚本 |
-g hop1[,hop2,...] | 松散源路由跃点 |
-G <n> | 松散源路由跃点指针 |
-m, --max-conns <n> | 同一时间的最大连接数 |
-h, --help | 显示帮助信息 |
-d, --delay <time> | 读、写的延迟时间(间隔时间) |
-o, --output <filename> | 保存会话内容到文件 |
-x, --hex-dump <filename> | 保存会话的16进制数据到文件 |
-i, --idle-timeout <time> | 读、写等待的超时时间 |
-p, --source-port port | 指定本地端口 |
-s, --source addr | 指定本地地址(不能与-l同时使用,-l后可以指定监听地址和端口) |
-l, --listen | 绑定并侦听传入连接 |
-k, --keep-open | 在侦听模式下接受多个连接 |
-n, --nodns | 不进行DNS解析 |
-t, --telnet | 响应telnet谈判 |
-u, --udp | 使用UDP协议 |
--sctp | 使用SCTP协议 |
-v, --verbose | 显示更多详细信息(多次使用,信息更加详细) |
-w, --wait <time> | 指定连接超时时间 |
-z | Zero-I/O模式,用于端口检测 |
--append-output | Append rather than clobber specified output files |
--send-only | 仅发送数据,遇到EOF退出 |
--recv-only | 仅接收数据 |
--no-shutdown | 从stdin接收到EOF后以半双工形式继续运行(接收到EOF后不退出,仍可以接受数据,但不能在发送数据) |
--allowAllow | 允许指定的主机连接,其它主机均不可连接 |
--allowfile | 指定文件,该文件包含允许连接的主机列表 |
--deny | 拒接指定的的主机连接,其它主机均可连接 |
--denyfile | 指定文件,该文件包含拒绝连接的主机列表 |
--broker | 启动代理模式(需要与-l选项搭配使用) |
--chat | 启动一个简单聊天服务器(有身份标识) |
--proxy <addr[:port]> | 指定代理服务器地址和端口 |
--proxy-type <type> | 指定代理类型("http", "socks4", "socks5") |
--proxy-auth <auth> | HTTP或SOCKS代理身份验证 |
--proxy-dns <type> | 指定代理目标由谁解析("local", "remote", "both", "none") |
--ssl | 启用SSL |
--ssl-certSpecify | 指定监听模式下的SSL证书(PEM格式) |
--ssl-key Specify | 指定监听模式下的SSL秘钥(PEM格式) |
--ssl-verify | 验证证书和域名 |
--ssl-trustfile | 指定可信任的SSL证书(PEM格式) |
--ssl-ciphers | 指定要使用的SSL密码的密码列表 |
--ssl-alpn | 要使用的ALPN协议列表(TLS的扩展,允许在安全连接的基础上进行应用层协议的协商) |
--version | 显示版本信息 |
1.2 exec模式环境变量
NCAT_REMOTE_ADDR | 连接中对端的地址 |
NCAT_REMOTE_PORT | 连接对中端的端口 |
NCAT_LOCAL_ADDR | 连接中本端的地址 |
NCAT_LOCAL_PORT | 连接中本端的端口 |
NCAT_PROTO | 连接使用的协议 |
2 使用手册
2.1 用途
ncat是一个通用的命令行工具,用于通过网络读取、写入、重定向和加密数据
1 充当一个简单的TCP/UDP/SCTP/SSL客户端
2 充当一个简单的TCP/UDP/SCTP/SSL服务器
3 将TCP/UDP/SCTP流量重定向或代理到其他端口或主机
4 加密与SSL的通信,并通过IPv 4或IPv 6传输它。
5 充当执行系统命令的网络网关,I/O重定向到网络
6 充当连接代理,允许两个(或更多)客户端通过第三台(代理)服务器彼此连接
7 支持多种操作系统:Linux、Windows、MacOS
2.2 基本用法
连接模式
ncat <host> [<port>]
监听模式
ncat --listen [<host>] [<port>]
ncat -l [<host>] [<port>]
注意事项
1 监听模式下忽略host则绑定到0.0.0.0
2 连接模式或监听模式下忽略port则使用默认端口31337
3 -keep open/-k选项
3.1 tcp监听模式下使用--keep open或-k选项
ncat接收多个并发连接,直至达到连接限制
服务器接收每个客户端发送的所有内容,服务器发送的任何内容都会发送给所有客户端
3.2 udp监听模式下使用--keep open或-k选项
udp服务器将只与一个客户端(第一个向其发送数据的客户端)通信,因为在udp中没有“已连接”客户端的列表
4 协议选择
--udp/-u 指定udp
--sctp 指定sctp
-4 指定IPv4
-6 指定IPv6
当未指定-4或-6选项时,ncat同时监听ipv4和ipv6
HTTP协议:https://www.rfc-editor.org/rfc/inline-errata/rfc2616.html
连接模式示例-web客户端
# ncat -C www.baidu.com 80
GET / HTTP/1.0
-C选项指定CRLF作为行尾,部分协议识别CRLF
监听模式示例-模拟web服务器
# cat hello.http
HTTP/1.0 200 OK
<html>
<body>
<h1>Hello,world</h1>
</body>
</html>
# ncat -l -p 8080 < hello.http
通过浏览器访问x.x.x.x:80端口即可查看;
实际通过nc、telnet、ncat访问都可以获取信息,因为当端口连接时,ncat就将文本内容传输给对端,并没有进行http协议的处理
2.3 协议
1 ncat可以使用TCP、UDP、SCTP、SSL、IPv4、IPv6和它们的组合.默认为TCP IPv4
2 TCP可以与SSL结合使用
3 UDP仅在连接模式下支持DTLS,监听模式下不支持DTLS
4 SCTP可以与SSL结合使用
5 正确使用SSL、TLS可以为网络流量提供安全性,--ssl选项启用ssl
2.4 连接代理
代理说明:代理模式下的ncat服务端接受来自多个客户端的连接,当接收到其中一个客户端发来的数据时,会转发给其它所有的客户端。
功能启用:通过--broker选项启用代理模式,该选项必须与--listen选项组合使用,单独使用--broker选项则无效
2.5 SSL
1 选项
1.1 --ssl
启用SSL对TCP和SCTP的数据加密
1.2 --ssl-cert
指定证书文件(PEM编码)
1.3 --ssl-key
指定私钥文件(PEM编码)
1.4 --ssl-verify
验证证书和匹配域名
验证使用ncat自带的ca-bundle.crt证书以及操作系统可能提供的任何可信证书
ncat不进行证书吊销检查
1.5 --ssl-trustfile
指定信任证书,与--ssl-verify选项一起使用,验证非CA签发的证书
1.6 --ssl-ciphers
用于指定加密套件(SSL密码的密码列表)
SSL连接取决于客户端和服务器是否同意共同的加密套件:密钥交换、对称密码和消息完整性机制的组合
默认加密套件:ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!MD5:@STRENGTH
2 SSL服务器
2.1 ncat可以充当SSL服务器,但需要指定一个证书,客户端可以根据自己的选择进行验证
2.2 如果未使用--ssl-cert选项和--ssl-key选项启用SSL服务器,则ncat自动生成证书和2048位的
任何进行证书验证的应用程序都不会信任该证书,使用-v选项,秘钥的指纹信息将被打印出来,如果需要的话,可以手工验证
2.3 建议使用--ssl-cert选项和--ssl-key选项指定现有的证书和密钥来
3 示例
3.1 SSL客户端
ncat -C --ssl <server> 443
3.2 进行证书验证的SSL客户端
ncat -C --ssl-verify <server> 443
3.3 使用指定证书进行证书验证的SSL客户端
ncat -C --ssl-verify --ssl-trustfile <custom-certs.pem> <server> 443
3.4 指定加密套件的SSL客户端
ncat --ssl-ciphers <HIGH:!aNULL:!eNULL> <server> 443
3.5 自动生成证书和密钥的服务端
ncat -v --listen --ssl
3.6 使用证书文件和密钥连接
服务端
# 生成证书和密钥
# 生成证书时,commonName字段要与主机的域名/IP匹配
# openssl req -new -x509 -keyout test-key.pem -out test-cert.pem
# 使用生成的证书和密钥运行ssl服务
# ncat --listen --ssl --ssl-cert test-cert.pem --ssl-key test-key.pem
客户端
# 将服务端生成的证书复制到客户端使用
# ncat --ssl-verify --ssl-trustfile test-cert.pem
2.6 命令执行
1 说明
ncat可以在连接建立后执行外部命令
外部命令的stdin重定向到连接的inband,stdout重定向到outbound
2 运行方式
2.1 --exec 运行不带shell解释的命令(执行程序,类似nc -e)
2.2 --sh-exec 通过传递字符串给系统shell来运行命令(执行命令,类似 nc -c)
2.3 --lua-exec 使用ncat的内置Lua解释器运行Lua程序
3 示例
2.1 --exec
说明: --exec或-e选项接受要执行的命令的完整路径名及其参数,随后将直接执行该命令
示例: ncat -l --exec "/bin/echo Hello."
2.2 --sh-exec
说明: --sh-exec或-c选项的工作方式与-exec相同,只不过它通过将命令传递给Unix上的/bin/sh -c或Windows上的cmd.exe /C来执行命令
如果命令路径位于path环境变量中,则不必使用命令的完整路径名;此外,还可以访问shell工具,如管道和环境变量扩展
示例: ncat -l --sh-exec "echo `pwd`"
2.3 --lua-exec
说明: --lua-exec选项接受要运行的lua程序的文件名,随后ncat使用其内置的解释器运行程序,并重定向其输入和输出流至inbound和outbound
使用Lua程序的优点是所有平台使用相同的解释器
Lua: 学习网址 http://www.lua.org/pil/contents.html
交互脚本 https://svn.nmap.org/nmap/ncat/scripts/conditional.lua
示例: # cat hello-luaexec.lua
--This is a --lua-exec "Hello world" example. In order to send to a client,
--all you need to do is output it to the standard output.
print("Hello, world!")
# ncat -l --lua-exec hello-luaexec.lua
2.4 --keep-open --exec
说明: --exec选项可用于客户端和服务端
在服务端使用--exec选项时,ncat接受一个连接,随后执行命令,当命令结束后退出ncat;
当--exec与--keep-open选项一起使用时,ncat可以接受多个连接,并为每个连接单独执行命令;
该组合可以在UDP模式下工作,并且将打破UDP模式下仅连接一个客户端的限制;
服务器将持续运行,直到按下ctrl+C或以其他方式外部终止它。
示例: ncat -l --keep-open --exec "/bin/echo Hello."
4 环境变量
说明:
无论exec模式是什么,ncat都会在派生程序的环境中设置描述连接的环境变量
变量:
NCAT_REMOTE_ADDR | 连接中对端的地址 |
NCAT_REMOTE_PORT | 连接对中端的端口 |
NCAT_LOCAL_ADDR | 连接中本端的地址 |
NCAT_LOCAL_PORT | 连接中本端的端口 |
NCAT_PROTO | 连接使用的协议 |
示例:
服务端
# ncat -l -c "env | grep NCAT"
客户端
# ncat 192.168.8.114
NCAT_LOCAL_PORT=31337
NCAT_PROTO=TCP
NCAT_REMOTE_ADDR=192.168.8.100
NCAT_REMOTE_PORT=39474
NCAT_LOCAL_ADDR=192.168.8.114
注释
客户端显示的是服务端的环境变量
5 Lua脚本注意事项
在Windows上每当执行--lua-exec选项指定的脚本时(搭配--keep-open选项时),都会重新加载它,因此脚本可以时时刷新
在其它系统上,则不是这样,需要重新运行ncat来加载最新的脚本
2.7 输出选项
1 说明
1.1 输入、输出
ncat从stdin读取输入,写入输出到stdout
1.2 ----exec、--sh-exec
当使用--exec或--sh-exec选项时,输入与输出被重定向至连接的inbound和outbound
因此在命令行输入的内容不会影响通信内容,除非使用-C或--telnet之类的选项修改流内容
1.3 -v选项
ncat使用stderr打印诊断信息
默认情况ncat不打印诊断信息,可以使用-v或--verbose选项启用它,多次使用-v可以获得更详细的信息
2 选项
2.1 --output/-o
说明: 该选项记录发送和接收的内容到文件
示例: ncat -C --o 192.168.8.100 22
2.2 --hex-dump/-x
说明: 该选项记录发送/接收的内容以及其16进制形式的数据到文件
示例: ncat -C -x 192.168.8.100 22
2.8 访问控制
1 选项
1.1 --allow
指定允许连接的主机
1.2 --deny
指定拒绝连接的主机
1.3 --allowfile
指定文件,文件包含允许连接的主机列表
1.4 --denyfile
指定文件,文件包含拒绝连接的主机列表
1.5 --max-conns/-m
指定最大连接数
类Unix默认大连接数为100,Windows默认大连接数为60
2 参数格式
2.1 主机
1 IPv4地址
2 IPv6地址
3 主机名
4 IPv4默认子网掩码
5 CIDR网络掩码(IPv4、IPv6都支持)
使用--allow选项或--deny选项指定多个主机时,使用 , 分隔
如果主机同时匹配--allow和--deny,将执行deny
2.2 主机列表文件
该文件的每一行都是一个主机条目
3 示例
3.1 允许一个主机
ncat -l --allow 192.168.0.125
ncat -l --allow 2001:db8::7d
ncat -l --allow trusted.example.com
3.2 拒绝一个主机
ncat -l --deny 192.168.0.200
ncat -l --deny 2001:db8::c8
3.3 允许一个网络
ncat -l --allow 192.168.0.0/24
ncat -l --allow 192.168.0.0-255
ncat -l --allow 2001:db8::/32
3.4 允许文件列表中的主机
ncat -l --allowfile trusted-hosts.txt
3.5 拒绝文件列表中的主机
ncat -l --denyfile external-hosts.txt
3.6 指定最大连接数
ncat -l --max-conns 5
注意: 基于主机的访问控制容易受到欺骗攻击和其它各种可能的失败,不应依赖该机制来实现绝对安全
2.9 代理
1 客户端
1.1 语法:
ncat --proxy <proxyhost>[:<proxyport>] --proxy-type { http | socks4 | socks5 } <host> [<port>]
1.2 说明:
--proxy <proxyhost>[:<proxyport>] 指定代理的服务器和端口
--proxy-type { http | socks4 | socks5 } 指定代理的类型
<host> [<port>] 为要访问的服务
1.3 细节:
--proxy-type可以忽略,默认为http
IPv4下<proxyport>可以忽略,默认http为3128端口,socks为1080端口
IPv6必须指定<proxyport>
1.4 验证
http与socks5可以通过选项--proxy-auth <username>:<password>进行验证
socks4可以通过选项--proxy-auth <username> 进行验证
2 服务端
2.1 示例
ncat -l 3128 --proxy-type http
ncat -l 3128 --proxy-type http --proxy-auth <user>:<pass>
2.2 说明
ncat仅支持http代理服务
--proxy-auth <user>:<pass>用于身份验证
2.10 其它选项
一般选项
1 --nodns/-n
不进行DNS解析,主机需要指定为IPv4或IPv6地址
2 --telnet/-n
ncat将作为telnet客户端或服务端
3 --send-only
ncat将转换为单向通信,仅发送数据,而不接收数据
ncat会在数据发送结束后,自动退出
4 --recv-only
ncat将转换为单向通信,仅接收数据,而不发送数据
来源选项
5 --source/-s
指定用于创建连接的本地地址,该地址必须为本地已启用的地址
6 --source-port/-p
指定用于创建连接的本地端口
7 -g
为IPv4松散源路由选择跳数
8 -G
设置源路由指针
时间选项
时间单位: ms--毫秒 s--秒 m--分钟 h--小时
9 --delay/-d
指定读、写的延迟时间
10 --idle-timeout/-I
指定空闲超时
当连接成功建立后,在指定时间内没有发生读、写操作则退出ncat
11 --wait/-w
指定等待超时
在指定时间内未成功建立连接,则退出ncat,仅在客户端模式下有效
2.11 文件传输
1 提示
1.1 默认情况下,ncat不对通信数据加密,但是可以通过指定ssl相关的选项进行加密传输
1.2 默认情况下,ncat在输入完数据后不会关闭连接,直到对端关闭连接。这是因为对端可能仍有数据要发送
通过指定--send-only选项指定输入结束后关闭连接,该选项通常用于单向传输
2 示例
单文件
1 客户端发送到服务端
服务端 ncat -l > outputfile
客户端 ncat --send-only 192.168.8.100 < inputfile
2 服务端发送到客户端
服务端 ncat -l --send-only < inputfile
客户端 ncat 192.168.8.100 > outputfile
多文件: 将文件归档后发送
客户端发送到服务端
服务端 ncat -l | tar xzv
客户端 tar czv <files> | ncat --send-only 192.168.8.100
字节流
1 客户端发送到服务端(磁盘镜像)
服务端 ncat -l > host1-hda.image
客户端 ncat --send-only host2 < /dev/hda
2 客户端发送到服务端(压缩磁盘镜像)
服务端 ncat -l | bzip2 -d > host1-hda.image
客户端 cat /dev/hda | bzip2 | ncat --send-only host2
代理转发: 在接收双方都无法监听的情况下,可以使用第三台设备进行代理转发
代理端 ncat -l --broker
接收端 ncat 代理端ip > outputfile
发送端 ncat --send-only 代理端ip < inputfile
注意:
1 代理端时时转发数据,因此要注意连接顺序
2 代理端不会主动断开连接,因此接收端需要ctrl+c主动断开连接或使用-i选项
2.12 聊天
1 双人聊天
示例:
主机A ncat -l
主机B ncat 主机A
说明:
当需要双人聊天时,一端先运行ncat监听模式,随后另一端进行连接,当连接成功建立后即可聊天
2 多人聊天
2.1 无身份标识的多人聊天
示例:
代理端 ncat -l --broker
说明:
选择一台pc作为代理服务器运行ncat -l --broker,随后其他用户连接打代理服务器
代理服务器接收到任意用户的消息,都将其转发至其他用户
2.2 有身份标识的多人聊天
示例:
代理端 ncat -l --chat
说明:
--chat选项包含--broker选项,并且为每个连接分配标识 <user<n>>,<user 0>为代理服务器,其它标识无法指定
信息转发时会为其添加前缀<user<n>>,由此来区分不同用户
2.13 Neat Tricks(巧妙用法)
1 发送邮件
1.1 示例
$ ncat -C mail.example.com 25
220 mail.example.com ESMTP
HELO client.example.com
250 mail.example.com Hello client.example.com
MAIL FROM:a@example.com
250 OK
RCPT TO:b@example.com
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: a@example.com
To: b@example.com
Subject: Greetings from Ncat
Hello. This short message is being sent by Ncat.
.
250 OK
QUIT
221 mail.example.com closing connection
1.2 说明
mail.example.com替换为SMTP服务器
SMTP交互内容查看RFC文档: https://www.rfc-editor.org/rfc/rfc5321
2 简单web服务器
1 --sh-exec
示例:
Linux: ncat -lk -p 8080 --sh-exec "echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html"
Windows: ncat -lk -p 8080 --sh-exec "echo HTTP/1.1 200 OK& echo(&type index.html"
说明:
利用ncat发送一次http的响应数据
2 --lua-exec示例
示例:
ncat --lua-exec httpd.lua --listen 8080 --keep-open
说明:
httpd.lua脚本存放在ncat v6.40以后版本的ncat/scripts/目录下
该脚本适用于所有与POSIX兼容的系统和Windows系统
在脚本指定发送给用户的文件
3 警告
ncat的http服务器功能比较简单,不建议用于生产环境,建议复制文件和教育等目的使用
3 ncat链
1 示例1
示例:
host3$ ncat -l > log.txt
host2$ ncat -l | ncat host3
host1$ ncat host2 < log.txt
说明:
host1文件内容,发送到host3
文件发送至host2后,通过管道输出给ncat host3
host2输入内容,发送到host1
ncat host3的stdin被重定向,因此不接收输入
ncat -l的stdin依旧存在,因此数据发送到host1
host3输入内容,发送到host2
ncat host3的stdout未被重定向,因此接收并显示数据
2 示例2
示例:
host3$ ncat -l --recv-only > log.txt
host2$ ncat -l --recv-only | ncat host3 --send-only
host1$ ncat --send-only host2 < log.txt
说明:
指定接收端仅接收,发送端仅发送,这样形成一条单向链
3 示例3
示例:
host3$ ncat -l
host2$ ncat -l --sh-exec "ncat host3"
host1$ ncat host2
说明:
host2通过'ncat host3'与host3建立连接
然后host2将'ncat host3'的输入、输出重定向到host1
host1实际上作为了'ncat host3'的输入和输出
该通信为host1与host3双向通信
4 示例4
示例:
ncat -l localhost 8080 --sh-exec "ncat example.org 80"
说明:
访问本地8080端口等于访问example.org的80
5 | 与 --sh-exec区别
1 | 需要运行两个ncat,然后将第一个ncat的输出内容写到第二个ncat的输入
2 --sh-exec仅需运行一个ncat
当连接成功建立后,--sh-exec指定的命令将执行,并将控制权交给该命令,
同时命令的输入、输出被重定向到连接的inboud和outband 逻辑上可以理解为本地操作
3 | 是第一个ncat将远端接收的数据输出到到第二个ncat的输入,然后第二个ncat将数据发送给目标
--sh-exec指定的ncat则是将远端数据作为stdin,然后发送给目标,逻辑上不就是本地操作吗
语言描述能力较差...请见谅
4 SSL展开
场景:
远端的IMAP服务器为SSL传输,本地邮件阅读器不支持SSL,通过ncat进行SSL转发
命令:
ncat -l localhost 143 --sh-exec "ncat --ssl imap.example.com 993"
说明:
邮件阅读器访问本地143端口,将数据输入到ncat,ncat通过SSL加密传输给IMAP服务器,然后将接收到数据解密后输出到邮件阅读器
注意该方法不适用于HTTP,因为HTTP通常涉及到到多个主机,而ncat同一时间仅能作用于一个主机
5 隧道
1 ncat隧道
示例:
ssh -o ProxyCommand="ssh -q 192.168.8.114 ncat %h %p" 192.168.8.116
说明:
使用192.168.8.114作为转发服务器连接192.168.8.116
1 ssh -q 192.168.8.114 ncat %h %p
ssh命令,%h %p被替换为目标主机与目标端口
该命令用于连接192.168.8.114的ssh服务,并且在成功连接后执行ncat命令,
随后ncat获取控制权,并将输入、输出重定向到连接的inbound、outbound,
即本机的发送的数据作为ncat的输入,ncat的输出作为本端接收的数据,由此来与192.168.8.116进行通信
2 -o用于指定额外操作,ProxyCommand指定用于连接到服务器的命令
2 ssh隧道
示例:
主机A
ssh 192.168.8.114 -D 8080
ncat --proxy localhost:8080 --proxy-type socks5 192.168.8.116 --ssl
主机C
ncat -l --ssl
说明:
ncat通过ssh隧道进行通信
官方文档给出的示例不需要--ssl,问题尚未解决
6 发现nmap扫描细节
示例:
# ncat -l --keep-open 5200 --hex-dump vscan.log > /dev/null
# nmap -d -sV --version-all localhost -p 5200
说明:
监听本地5200端口,丢弃stdout内容,将收发数据的二进制内容保存
使用nmap扫描本地5200端口,ncat将扫描时发送的数据dump,然后查看文件分析具体的扫描过程
2.14 模拟诊断服务
1 discard
忽略任何内容
1.1 RFC
https://www.rfc-editor.org/rfc/rfc863
1.2 TCP示例
ncat -l 9 --keep-open --recv-only > /dev/null
1.3 UDP示例
ncat -l 9 --keep-open --udp --sh-exec "cat > /dev/null"
2 echo
响应所有接收到的数据,直到连接关闭为止
2.1 RFC
https://www.rfc-editor.org/rfc/rfc862
2.2 TCP示例
ncat -l 7 --keep-open --exec "/bin/cat"
2.3 UDP示例
ncat -l 7 --keep-open --udp --exec "/bin/cat"
3 daytime
响应人类可读的日期和时间字符串,忽略输入
3.1 RFC
https://www.rfc-editor.org/rfc/rfc867
3.2 TCP示例
ncat -l 13 --keep-open --send-only --exec "/bin/date"
3.3 UDP示例
ncat -l 13 --keep-open --udp --send-only --exec "/bin/date"
3.4 daytime.nse脚本
nmap附带daytime.nse脚本,作用于daytime服务
nmap -sSU -p 13 --script=daytime localhost
4 qotd (quote of the day)
忽略输入,返回一条短消息
4.1 RFC
https://www.rfc-editor.org/rfc/rfc865
4.2 TCP示例
ncat -l 17 --keep-open --send-only --exec "/usr/games/fortune"
4.3 UDP示例
do ncat -l 17 --keep-open --udp --send-only --exec "/usr/games/fortune"
5 chargen
5.1 RFC
https://www.rfc-editor.org/rfc/rfc864
5.2 TCP示例 - 忽略输入,一直发送数据
yes "chargenchargenchargen" | ncat -l --keep-open 19 --send-only
该方法导致同时连接的用户都将同步地看到相同的输出流,,如果希望每个流的内容是独立的,则使用--exec选项
5.3 UDP示例 - 接收到数据报后返回一个包含随机字符数的数据报
ncat -l 19 --keep-open --udp --send-only --sh-exec "yes chargenchargenchargen | dd count=1 bs=$(($RANDOM % 512)) 2> /dev/null"
注意使用--sh-exec而不是--exec,是因为可以shell的环境变量和算术计算。
然后将标准错误被重定向到/dev/null,以避免包括dd的摘要行(1+0记录输出),否则ncat就会显示这些内容