专栏首页运维之美5 分钟带你学会享有瑞士军刀之称的网络调试神器 Netcat,从此网络故障诊断不再愁!

5 分钟带你学会享有瑞士军刀之称的网络调试神器 Netcat,从此网络故障诊断不再愁!

Netcat(或 NC )是一个命令行实用程序,它使用 TCP 或 UDP 协议跨网络连接读取和写入数据。它是网络和系统管理员中最强大的工具之一,被视为网络工具的瑞士军刀。

Netcat 是跨平台的,可用于 LinuxmacOSWindowsBSD。你可以使用 Netcat 调试和监视网络连接、扫描打开的端口、传输数据、作为代理等等。Netcat 软件包已预安装在 macOS 和大多数 Linux 发行版(如:Ubuntu)上。

Netcat 语法

Netcat 命令的最基本语法采用以下形式:

nc [options] host port

在 Ubuntu 上,您可以使用 netcat 或 nc。它们都是 Netcat 的 openBSD 版本的符号链接。

默认情况下,Netcat 将尝试启动与指定主机和端口的 TCP 连接。如果要建立 UDP 连接,请使用以下 -u 选项:

$ nc -u host port

端口扫描

扫描端口是 Netcat 最常见的用途之一。您可以扫描单个端口或端口范围。

例如,要扫描范围为 20-80 的开放端口,可以使用以下命令:

$ nc -z -v 10.10.8.8 20-80

-z 选项将告诉 nc 你仅扫描打开的端口,而不向其发送任何数据,并使用 -v 提供更多详细信息。

输出将如下所示:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

如果只想打印带有开放端口的行,则可以使用 grep 命令过滤结果。

$ nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

你也可以使用 Netcat 查找服务器软件及其版本。例如,如果你在默认的 SSH 端口 22 上向服务器发送 EXIT 命令:

$ echo "EXIT" | nc 10.10.8.8 22

将输出如下所示:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

要扫描 UDP 端口,只需将 -u 选项添加到命令中,如下所示:

$ nc -z -v -u 10.10.8.8 20-80

在大多数情况下,对于复杂的端口扫描,Nmap 是比 Netcat 更好的工具。

通过 Netcat 发送文件

通过创建基本的客户端/服务器模型,可以使用 Netcat 将数据从一台主机传输到另一台主机。

通过将 Netcat 在接收主机上的特定端口上监听(使用 -l 选项),然后与其他主机建立常规 TCP 连接并通过该主机发送文件。

在接收时,运行以下命令,它将打开端口 5555 进行传入连接,并将输出重定向到文件:

$ nc -l 5555 > file_name

从发送主机连接到接收主机并发送文件:

$ nc receiving.host.com 5555 < file_name

如果要传输目录,可以使用 tar 在源主机上归档目录,并在目标主机上提取归档。

在接收主机上,设置 Netcat 工具以监听端口 5555 上的传入连接。传入数据通过管道传递到 tar 命令,该命令将提取存档:

$ nc -l 5555 | tar xzvf -

在发送主机上的目录通过连接到 nc 接收主机上的监听进程来发送数据:

$ tar czvf - /path/to/dir | nc receiving.host.com 5555

您可以在两端观察传输进度。完成后,键入 CTRL+C 以关闭连接。

创建一个简单的聊天服务器

在两个或多个主机之间创建在线聊天的过程与传输文件的方法是基本相同的。

在第一台主机上启动一个 Netcat 进程以侦听端口 5555:

$ nc -l 5555

在第二台主机上,运行以下命令以连接到侦听端口:

$ nc first.host.com 5555

现在,如果你键入一条消息并按回车,它将同时显示在两台主机上。

要关闭连接,请键入 CTRL+C

执行 HTTP 请求

尽管有许多更好的 HTTP 请求工具,例如:curl,你也可以使用 Netcat 将各种请求发送到远程服务器。

例如,要从 OpenBSD 网站检索 Netcat 的手册页,请输入:

$ printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

请求完成后,包括 HTTP 标头和 HTML 代码的完整响应将在终端中打印。

结论

在本教程中,你学习了如何使用 Netcat 实用程序建立和测试 TCP 和 UDP 连接。如果你需要更多信息,请访问 Netcat 手册页,并阅读有关 Netcat 命令的所有其他强大选项的信息。

来源:myfreax 原文:https://url.cn/5MTjaKh 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,邮箱: editor@hi-linux.com

本文分享自微信公众号 - 运维之美(Hi-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 那些必备的Mac应用程序和实用工具

    眼下我的主要办公电脑是MacBook Pro,所以它需要为我准备分派的任何任务做好准备。这意味着我为它精心配备了几款侧重性能、安全和生产力的应用程序和实用工具...

    Lemon黄
  • LWN: 在 Linux 上运行 macOS 程序

    目前有个名叫Darling的项目活跃度不断提升,这个项目是希望能在Linux上提供一个针对macOS软件的translation layer(翻译层),有点类似...

    用户6543014
  • 记一次macOS Mojave升级GCC

    SeanDepp
  • 如何优雅的远程自动同步和远程调试c++?

    ? / 机智的小熊 / 一个不愿意透露姓名的工程师,热爱读书,写文章,热爱交流,期待认识更多的大佬。 ? 摘 要 在linux上用vim写C++的时候,通常用...

    腾讯云TStack
  • Mac安装Mysql记录

    胡齐
  • 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令

    没错就是这么神奇,名字相当噶性,thefuck。当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令。

    landv
  • 开发常用的各种镜像站

    在使用 Android SDK Manager 的时候,主要会连接到两个地址 dl.google.com 和 dl-ssl.google.com,

    剑行者
  • Macbook系统环境安装wget的两种方法

    目前Macbook系统自带有Python2.7版本,但是一些组件包并不全,尤其是wget命令都无法执行。所以,需要将Macbook环境安装wget命令。

    剑行者
  • 深圳大数据培训:泛型--【千锋】

    //带有类型参数A的类定义 class Stack[A] { private var elements: List[A] = Nil //泛型方法 d...

    深圳java培训技术
  • macOS 安装 mysql

    打开下载页面 https://dev.mysql.com/downloads/mysql/5.7.html ,下载镜像安装文件。

    我是一条小青蛇

扫码关注云+社区

领取腾讯云代金券