1、命令简介
nc:Linux 和其他 Unix-like 操作系统中的网络工具,它通常用于网络调试和数据传输。nc 代表 "netcat",它是一个功能强大的命令行工具,可以用于创建 TCP 和 UDP 连接,监听端口,进行端口扫描,以及在网络中传输数据。
2、命令语法
nc .Bk -words [-46DdhklnrStUuvz] [-i interval] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol] [Xo -x proxy_address[: port]] [hostname] [port[s]] .Ek
3、命令描述
nc(或称为netcat)实用工具用于几乎涵盖了与TCP或UDP有关的各种任务。它可以建立TCP连接、发送UDP数据包、监听任意TCP和UDP端口、进行端口扫描,同时支持IPv4和IPv6。与telnet不同,nc可以很好地用于脚本编写,并将错误消息分离到标准错误输出,而不像telnet将它们发送到标准输出中。
常见用途包括:
- 简单的TCP代理
- 基于Shell脚本的HTTP客户端和服务器
- 网络守护进程测试
- 作为SSH的SOCKS或HTTP ProxyCommand
- 以及更多其他用途
4、命令选项
标签 | 描述 |
---|---|
-4 | 强制nc 仅使用IPv4地址。 |
-6 | 强制nc 仅使用IPv6地址。 |
-D | 启用套接字调试。 |
-d | 不尝试从标准输入读取数据。 |
-h | 打印nc 的帮助信息。 |
-i interval | 指定发送和接收的文本行之间的延迟时间间隔。 还导致在连接到多个端口时出现延迟时间间隔。 |
-k | 强制nc 在当前连接完成后继续监听另一个连接。使用此选项而不带 -l 选项是错误的。 |
-l | 用于指定nc 应监听传入连接,而不是发起与远程主机的连接。在与 -p 、-s 或-z 选项一起使用是错误的。此外,使用 -w 选项指定的任何超时都将被忽略。 |
-n | 在任何指定的地址、主机名或端口上不执行任何DNS或服务查找。 |
-p source_port | 指定nc 应使用的源端口,受特权限制和可用性限制。在与 -l 选项一起使用是错误的。 |
-r | 指定应随机选择源和/或目标端口, 而不是在范围内按顺序选择或按系统分配的顺序选择它们。 |
-S | 启用RFC 2385 TCP MD5签名选项。 |
-s source_ip_address | 指定用于发送数据包的接口的IP地址。 在与 -l 选项一起使用是错误的。 |
-T ToS | 指定连接的IP服务类型(ToS)。 有效值是标记“lowdelay”、“throughput”、“reliability” 或以“0x”开头的8位十六进制值。 |
-t | 导致nc 发送RFC 854的DON’T和WON’T响应给RFC 854的DO和WILL请求。 这使得可以使用 nc 来脚本化telnet会话。 |
-U | 指定使用Unix域套接字。 |
-u | 使用UDP而不是默认的TCP选项。 |
-v | 让nc 提供更详细的输出。 |
-w timeout | 如果连接和标准输入在timeout秒内空闲,则连接会被静默关闭。-w 标志对-l 选项没有影响,也就是说,nc 将永远监听连接,无论是否使用了 -w 标志。默认情况下没有超时。 |
-X proxy_version | 请求nc 在与代理服务器通信时使用指定的协议。支持的协议有“4”(SOCKS v.4) 、“5”(SOCKS v.5)和“connect”(HTTPS代理)。 如果未指定协议,将使用SOCKS版本5。 |
-x proxy_address[:port] | 请求nc 使用代理地址和端口连接主机名。如果未指定端口,将使用代理协议的知名端口(SOCKS为1080,HTTPS为3128)。 |
-z | 指定nc 只扫描正在侦听的守护进程,而不发送任何数据给它们。在与 -l 选项一起使用是错误的。 |
5、使用示例
1)创建 TCP 连接
nc -v host port
2)监听端口
nc -l -p port
3)发送文件
nc -v -w 1 host port < file.txt
4)接收文件
nc -l -p port > received_file.txt
5)端口扫描
nc -zv host start_port-end_port
6)使用 UDP 连接
nc -u -v host port
7)反向 shell
在目标主机上执行以下命令:
nc -l -p port -e /bin/bash