惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
罗磊的独立博客
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
J
Java Code Geeks
L
LangChain Blog
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
G
Google Developers Blog

Jiajun的技术笔记

你好,2026! TiDB 源码阅读(六):TiDB Coprocessor 源码解析 性能优化的核心思想 TiDB 源码阅读(五):索引 TiDB 源码阅读(四):AST、逻辑计划、物理计划 CockroachDB Serverless Architecture podman 无故退出 Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal Replace docker with podman Using xmonad with xfce4 A RC script for freebsd frpc 自己动手写一个k8s controller AI 会取代你的(编程)岗位吗? 自建DERP服务器提升Tailscale连接速度(使用Nginx转发) 自动升级Docker容器 再读《程序员修炼之道-从小工到专家》 让浏览器下载文件 再读《软件随想录》/《黑客与画家》/《软技能》 HTTP 压力测试中的 Coordinated Omission 2的补码 编程语言中的 context 是什么? flutter macOS 构建出错 Flatpak 使用小记 Golang CAS 操作是怎么实现的 PostgreSQL 当MQ来使用 Clash 结合 工作VPN 的网络设计 使用 PostgreSQL 搭建 JuiceFS PostgreSQL 配置优化和日志分析 有GitHub Copilot?那就可以搭建你的ChatGPT4服务 窗口函数的使用(以PG为例)
Linux常用命令(一):netcat
Jiajun Huang · 2020-09-19 · via Jiajun的技术笔记

netcat是常见的用于网络相关的工具,比如连接,监听,扫描端口等。和所有的UNIX命令一样,netcat也是一把瑞士军刀。接下来我们 来学习如何使用。

常见版本

使用之前我们要先了解一下netcat的几个版本:

  • 原版netcat sudo apt install netcat-traditional 安装。这是最初的版本。
  • GNU版netcat sudo apt install netcat 这是GNU为了符合GPL协议,重写的版本。
  • OpenBSD版netcat sudo apt install netcat-openbsd 这是openbsd的版本。也是用的比较多的版本,我们也使用这个版本。

接下来我们了解一下netcat的命令行如何使用。它的参数有两种方式:

  • 分开描述,比如 nc -h, nc -w -v -z
  • 放在一起描述,比如 nc -zu

当然,上述的参数方式是可以组合的,比如:

$ nc -zv baidu.com -w 3 80
Connection to baidu.com 80 port [tcp/http] succeeded!

一般是,如果参数里还要带值的话,就用分开描述,否则就放在一起好了。

剩下的选项,我根据功能把它们划分开来:

网络模式和代理相关

  • -l 监听,作服务器。不填时作客户端。
  • -u UDP模式。不填时默认TCP模式。
  • -X-x 是代理相关的选项

其余常用选项

  • -v verbose模式,打印更多日志
  • -z 连接以后就断开,用于测试网络连接是否连通
  • -w 超时时间,单位是秒
  • -s 指定source addr
  • -p 指定source port
  • -n 不查询DNS
  • -k 处理完一个请求之后,继续监听下一个

常见的例子及其释义

了解了常见的参数之后,我们就来用用它:

  • 最简单的echo server和echo client:一个终端里执行 nc -l 8080, 另外一个终端里执行 nc 127.0.0.1 8080,他们就通过 TCP 连接了,解释一下上面的参数,nc -l 8080 就是监听在8080端口,本来应该是 nc -l 127.0.0.1 8080,这样的格式,但是如果默认不写监听的地址的话, 那么就是使用默认的 127.0.0.1。而第二个终端里的 nc 127.0.0.1 8080 就不能省略地址了,作为客户端的 时候,必须指明IP地址和端口。如果我们加上 -u 参数,那么就是UDP版本的echo server和client了。

  • 测试某个地址是否能连通。一般我们会用telnet,不过telnet还需要通过 Ctrl-] 来退出。用nc更简单:

    $ nc -zv baidu.com 80
    Connection to baidu.com 80 port [tcp/http] succeeded!
    
    

解释一下参数,-v 就是打印日志的意思。如果不加的话,nc不会打印下面的这一行 Connection ...,而 -z 则是建立TCP连接之后就断开的意思。所以我们就可以通过这两个命令组合,来快速判断某个地址是否可以连通。

  • 端口扫描。有时候我们想要范围扫描一下端口,那么就可以这样:

    $ nc -vz 127.0.0.1 20-25
    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
    Connection to 127.0.0.1 25 port [tcp/smtp] succeeded!
    
    

总结

这就是netcat的常见选项和使用方法了,通过这个工具,结合其它Linux命令还可以发挥更强大的功能。