Netcat 或者叫 nc 是 Linux 下的一个用于调试和检查网络工具包。可用于创建 TCP/IP 连接,最大的用途就是用来处理 TCP/UDP 套接字。

这里我们将通过一些实例来学习 netcat 命令。

1. 在服务器-客户端架构上使用 Netcat

netcat 工具可运行于服务器模式,侦听指定端口

1 $ nc -l 2389

然后你可以使用客户端模式来连接到 2389 端口:

1 $ nc localhost 2389

现在如果你输入一些文本,它将被发送到服务器端:

1 $ nc localhost 2389
2 HI, oschina

在服务器的终端窗口将会显示下面内容:

1 $ nc -l 2389
2 HI, oschina

2. 使用 Netcat 来传输文件

netcat 工具还可用来传输文件,在客户端,假设我们有一个 testfile 文件:

1 cat testfile
2 hello oschina

而在服务器端有一个空文件名为 test

然后我们使用如下命令来启用服务器端:

1 $ nc -l 2389 > test

紧接着运行客户端:

1 cat testfile | nc localhost 2389

然后你停止服务器端,你可以查看 test 内容就是刚才客户端传过来的 testfile 文件的内容:

1 cat test
2 hello oschina

3. Netcat 支持超时控制

多数情况我们不希望连接一直保持,那么我们可以使用 -w 参数来指定连接的空闲超时时间,该参数紧接一个数值,代表秒数,如果连接超过指定时间则连接会被终止。

服务器:

1 nc -l 2389

客户端:

1 $ nc -w 10 localhost 2389

该连接将在 10 秒后中断。

注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。

4. Netcat 支持 IPv6

netcat 的 -4 和 -6 参数用来指定 IP 地址类型,分别是 IPv4 和 IPv6:

服务器端:

1 $ nc -4 -l 2389

客户端:

1 $ nc -4 localhost 2389

然后我们可以使用 netstat 命令来查看网络的情况:

1 netstat grep 2389
2 tcp        0      0 localhost:2389          localhost:50851         ESTABLISHED
3 tcp        0      0 localhost:50851         localhost:2389          ESTABLISHED

接下来我们看看IPv6 的情况:

服务器端:

1 $ nc -6 -l 2389

客户端:

1 $ nc -6 localhost 2389

再次运行 netstat 命令:

1 netstat grep 2389
2 tcp6       0      0 localhost:2389          localhost:33234         ESTABLISHED
3 tcp6       0      0 localhost:33234         localhost:2389          ESTABLISHED

前缀是 tcp6 表示使用的是 IPv6 的地址。

5. 在 Netcat 中禁止从标准输入中读取数据

该功能使用 -d 参数,请看下面例子:

服务器端:

1 $ nc -l 2389

客户端:

1 $ nc -d localhost 2389
2 Hi

你输入的 Hi 文本并不会送到服务器端。

6. 强制 Netcat 服务器端保持启动状态

如果连接到服务器的客户端断开连接,那么服务器端也会跟着退出。

服务器端:

1 $ nc -l 2389

客户端:

1 $ nc localhost 2389
2 ^C

服务器端:

1 $ nc -l 2389
2 $

上述例子中,但客户端断开时服务器端也立即退出。

我们可以通过 -k 参数来控制让服务器不会因为客户端的断开连接而退出。

服务器端:

1 $ nc -k -l 2389

客户端:

1 $ nc localhost 2389
2 ^C

服务器端:

1 $ nc -k -l 2389

7. 配置 Netcat 客户端不会因为 EOF 而退出

Netcat 客户端可以通过 -q 参数来控制接收到 EOF 后隔多长时间才退出,该参数的单位是秒:

客户端使用如下方式启动:

1 nc  -q 5  localhost 2389

现在如果客户端接收到 EOF ,它将等待 5 秒后退出。

8. 使用 Netcat 来处理 UDP 协议

netcat 默认是使用 TCP 协议,但也支持 UDP,可使用 -u 参数来启用 UDP 协议通讯。

服务器端:

1 $ nc -4 -u -l 2389

客户端:

1 $ nc -4 -u localhost 2389

这样客户端和服务器端都使用了 UDP 协议,可通过 netstat 命令来查看:

1 netstat grep 2389
2 udp        0      0 localhost:42634         localhost:2389          ESTABLISHED

英文原文, OSCHINA原创翻译

8 个实用的 Linux netcat 命令示例的更多相关文章

  1. 妈咪,我找到了! -- 15个实用的Linux find命令示例

    妈咪,我找到了! -- 15个实用的Linux find命令示例 英文原文:Mommy, I found it! — 15 Practical Linux Find Command Examples ...

  2. 15个实用的Linux find命令示例

    妈咪,我找到了! -- 15个实用的Linux find命令示例 http://www.oschina.net/translate/15-practical-linux-find-command-ex ...

  3. <转>13个实用的Linux find命令示例

    注:本文摘自青崖白鹿,翻译的妈咪,我找到了! -- 15个实用的Linux find命令示例, 感谢翻译的好文. 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作, ...

  4. 15个实用的Linux find命令示例(一)

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...

  5. 30个实用的Linux find命令示例

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...

  6. 13个实用的Linux find命令示例

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...

  7. 爹地,我找到了!15个极好的Linux find命令示例

    爹地,我找到了!15个极好的Linux find命令示例 http://blog.jobbole.com/48931/ 妈咪,我找到了!15个实用的Linux find命令示例 http://blog ...

  8. 爹地,我找到了!,15个极好的Linux find命令示例

    爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...

  9. 15个极好的Linux find命令示例(二)

    前阵子,我们审查了15件实事 find命令的例子(第一部分).查找命令可以做很多比只是在寻找基于名称的文件 (第2部分)在这篇文章中,让我们来讨论15高级find命令的例子, 包括-根据它访问,修改或 ...

随机推荐

  1. QQ原创表情添加

    有时候与QQ好友聊天时会收到一些自己比较喜欢的原创表情,如果我们想把这些QQ不支持直接保存的原创表情保存到电脑上该怎么做呢?我们以原创表情图片为例简单介绍一下. 首先,先建立一个存放表情图片的文件夹. ...

  2. jQuery制作go to top按钮

    转自:http://www.w3cplus.com/jquery/scrolling-to-the-top-with-jquery 每每看到网友Blog的页面底部或中间有一个按钮回到页面顶部,羡慕死人 ...

  3. 关闭Centos的自动更新

    昨天跟老板汇报,提到我们的linux服务器每天自动更新,老板大发雷霆,说生产系统不能够这样,非常不安全,一个师兄也提到他原来在移动的时候,服务器更新也是很谨慎的事情.看来我的思维太技术了,不够全面,所 ...

  4. cat查看proc下文件帮助

    cat boot_mode 查看cpu版本 cat cmdline cat cpuinfo 查看cup详细信息 cat devices cat diskstats cat dma-mappings c ...

  5. Spark 启动过程(standalone)

    Spark启动过程 正常启动Spark集群时往往使用start-all.sh ,此脚本中通过调用start-master.sh和start-slaves.sh启动mater及workers节点. 1. ...

  6. 转:VC++获取屏幕大小第一篇 像素大小GetSystemMetrics

    VC++获取屏幕大小第一篇 像素大小 GetSystemMetrics>和<VC++获取屏幕大小第二篇物理大小GetDeviceCaps 上>和<VC++获取屏幕大小第三篇物理 ...

  7. ALTIUM 10 过孔设置开窗、不开窗

    大家或许会发现我们公司做的PCB板子,所有的过孔都开了窗,也就是说过孔没有绿油,这样会导致焊接中容易连焊.兴许大家为此吃进苦头,我是被整了好几次,查了好久却发现是个低级错误,一个过孔连焊到隔壁焊盘了. ...

  8. Android Activity整体管理和关闭工具类封装

    如何彻底退出程序,在任意位置退出程序,如何管理当前的运行栈,知道activity的堆栈结构等,本文封装了一个Activity管理类,可以方便随时退出程序. /** * 应用程序Activity管理类: ...

  9. HDOJ 1303 Doubles(简单题)

    Problem Description As part of an arithmetic competency program, your students will be given randoml ...

  10. spring aop实现原理

    通过两种代理方式,一是JDK本身的代理方式,二是CGLIB提供的代理方式,在代理类的前面加事务begin,在后面加事务commit,需要的数据库连接从ThreadLocal中取