Linux网络瑞士军刀 nc(netcat)

1.命令简介

nc(netcat)是一个短小精悍、功能实用、简单可靠的网络工具,主要有如下作用:

(1)端口侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口;

(2)端口扫描,nc 可以作为 client 发起 TCP 或 UDP 请求;

(3)机器之间传输文件;

(4)机器之间网络测速。

2.命令格式

shell 复制代码
nc [-46DdhklnrStUuvzC] [-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 地址
  • -l:启动本地监听
  • -n:不使用 DNS 解析
  • -p:指定源端口
  • -s:指定源 IP 地址
  • -u:使用 UDP,默认是 TCP
  • -v:显示详细信息
  • -w:设定超时时间(只适合用在 Client 端)
  • -d:禁止从标准输入读取数据,也就是客户端输入数据不会发送到服务端
  • -k:让服务端保持连接,不断开

3.常用示例

模拟服务端

shell 复制代码
nc -vkl 8080

模拟客户端

shell 复制代码
nc -v 127.0.0.1 8888

连接日志

shell 复制代码
#server
root@VM-16-3-ubuntu:~# nc -vkl 8080
Listening on 0.0.0.0 8080
Connection received on localhost 42930

#client
root@VM-16-3-ubuntu:~# nc -v 127.0.0.1 8080
Connection to 127.0.0.1 8080 port [tcp/http-alt] succeeded!
#随后双方便可输入消息发送

发送文件

nc 不仅可以发送消息,还可发送文件。

假设服务端有一个 out.txt 的空文件,而客户端有一个 in.txt 文件,含有数据:hello server

Server 端接收文件:

shell 复制代码
nc localhost 6000 > out.txt

Client 端发送文件:

shell 复制代码
nc localhost 6000 < in.txt

之后,我们可以看到 Server 端的 out.txt 文件中已经有数据了:

shell 复制代码
# cat out.txt
hello server

除了可以发送文件,nc 也可以发送目录,只需要将目录压缩发送即可。

端口扫码

端口扫描是一个非常重要的功能,很多时候系统管理员会通过扫描服务器上端口,来识别系统中漏洞,nc 工具提供了非常方便的操作:

shell 复制代码
nc -vz 127.0.0.1 1-100

这条命令扫描 192.168.1.3 上 1-100 端口区间,有哪些端口是开放的。

shell 复制代码
# nc -vz 127.0.0.1 1-100
nc: connect to 127.0.0.1 port 1 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 2 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 3 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 4 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 5 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 6 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 7 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 8 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 9 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 10 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 11 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 12 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 13 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 14 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 15 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 16 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 17 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 18 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 19 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 20 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 21 (tcp) failed: Connection refused
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!
nc: connect to 127.0.0.1 port 23 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 24 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 25 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 26 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 27 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 28 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 29 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 30 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 31 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 32 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 33 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 34 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 35 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 36 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 37 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 38 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 39 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 40 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 41 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 42 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 43 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 44 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 45 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 46 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 47 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 48 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 49 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 50 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 51 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 52 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 53 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 54 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 55 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 56 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 57 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 58 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 59 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 60 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 61 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 62 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 63 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 64 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 65 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 66 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 67 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 68 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 69 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 70 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 71 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 72 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 73 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 74 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 75 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 76 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused
Connection to 127.0.0.1 80 port [tcp/http] succeeded!
nc: connect to 127.0.0.1 port 81 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 82 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 83 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 84 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 85 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 86 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 87 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 88 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 89 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 90 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 91 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 92 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 93 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 94 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 95 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 96 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 97 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 98 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 99 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 100 (tcp) failed: Connection refused

可以看到,只有 22和80号端口是开放的。

总结

nc 通过在两台机器之间建立连接来完成很多网络功能,数据传输、网络连接、端口扫描等,也有助于我们进行网络调试,排查网络故障。

相关推荐
QT 小鲜肉3 分钟前
【Linux命令大全】001.文件管理之split命令(实操篇)
linux·运维·服务器·网络·笔记
草莓熊Lotso5 分钟前
Qt 入门核心指南:从框架认知到环境搭建 + Qt Creator 实战
xml·开发语言·网络·c++·人工智能·qt·页面
寂寞恋上夜5 分钟前
边界条件检查清单:数据为空/超长/特殊字符/越界(附测试用例)
服务器·网络·测试用例·markdown转xmind·在线思维导图生成器
musk12126 分钟前
在 Win11 PowerShell 中通过 SSH 密钥实现无密码访问 Linux 服务器,公钥使用 方法2 手动复制
linux·ssh·win11
松涛和鸣7 分钟前
42、SQLite3 :字典入库与数据查询
linux·前端·网络·数据库·udp·sqlite
QT 小鲜肉7 分钟前
【Linux命令大全】001.文件管理之rcp命令(实操篇)
linux·服务器·网络·chrome·笔记
是垚不是土8 分钟前
TDengine脚本备份方案:全库/单库备份与飞书通知
大数据·运维·数据库·飞书·时序数据库·tdengine
码农小白猿11 分钟前
提升压力容器改造方案报告标准条款审核效率,IACheck助力合规与安全
运维·人工智能·安全·ai·自动化·iacheck
代码游侠11 分钟前
学习笔记——SQLite3 编程与 HTML 基础
网络·笔记·算法·sqlite·html
Tipriest_11 分钟前
Linux 下开发 C/C++ 程序为什么头文件引用路径这么多和复杂
linux·c语言·c++