首页 程序笔记 Linux中命令行网络工具Netcat 介绍及使用

Linux中命令行网络工具Netcat 介绍及使用

前沿

Netcat 是一款简单的 Unix 工具,使用 UDP 和 TCP 协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。内建有很多实用的工具。可以用来在两台机器之间建立TCP/UDP连接,并通过标准的输入输出进行数据的读写

Netcat 的安装

大部分的Linux发行版会都会自带Netcat,可以使用nc命令查看系统中是否有安装Netcat

$ nc
usage: nc [-46AacCDdEFhklMnOortUuvz] [-K tc] [-b boundif] [-i interval] [-p source_port]
	  [--apple-recv-anyif] [--apple-awdl-unres]
	  [--apple-boundif ifbound]
	  [--apple-no-cellular] [--apple-no-expensive]
	  [--apple-no-flowadv] [--apple-tcp-timeout conntimo]
	  [--apple-tcp-keepalive keepidle] [--apple-tcp-keepintvl keepintvl]
	  [--apple-tcp-keepcnt keepcnt] [--apple-tclass tclass]
	  [--tcp-adp-rtimo num_probes] [--apple-initcoproc-allow]
	  [--apple-tcp-adp-wtimo num_probes]
	  [--setsockopt-later] [--apple-no-connectx]
	  [--apple-delegate-pid pid] [--apple-delegate-uuid uuid]
	  [--apple-kao] [--apple-ext-bk-idle]
	  [--apple-netsvctype svc] [---apple-nowakefromsleep]
	  [--apple-notify-ack] [--apple-sockev]
	  [--apple-tos tos] [--apple-tos-cmsg]
	  [-s source_ip_address] [-w timeout] [-X proxy_version]
	  [-x proxy_address[:port]] [hostname] [port[s]]

出现上面提示信息说明系统中已经安装了Netcat,如果没有安装,可以使用下面命令进行安装

$ wget https://sourceforge.NET/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
$ tar zxvf netcat-0.7.1.tar.gz
$ cd netcat-0.7.1
$ ./configure
$ make
$ make install

快速开始

我们可以使用Netcat与HTTP服务器建立连接,以百度为例,使用下面命令与百度建立TCP连接

$ nc www.baidu.com 80

第一个参数为要建立连接的服务器地址,第二个参数为连接端口。成功建立连接后,会进入输入/输出界面,在该界面能向TCP连接发送/接收数据。如百度服务器发送GET请求,模拟浏览器访问百度首页,输入GET / HTTP/1.0并按两次回车

$ nc www.baidu.com 80
GET / HTTP/1.0
(Enter)
(Enter)

发送请求后,会收到如下HTTP响应

HTTP/1.0 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 14332
Content-Type: text/html
......

完整流程如下

[root@ferris#nc www.baidu.com 80
GET HTTP/1.0
HTTP/1.02000K
Accept-Ranges:bytes
Cache-Control:no-cache
Content-Length:14332
Content-Type:text/html
Date:Mon,20 Feb 2023 20:11:38 GMT
P3p:CP=OTI DSP COR IVA OUR IND COM
P3p:CP=OTI DSP COR IVA OUR IND COM
Pragma:no-cache
Server:BWS/1.1
Set-Cookie:BAIDUID=3D34E92B258EF4BF327B4FCC92AF5F02:FG=1;expires=Thu,31-Dec-37 23:55:55
GMT;max-age=2147483647;path=/;domain=.baidu.com
Set-Cookie:BIDUPSID=3D34E92B258EF4BF327B4FCC92AF5F02;expires=Thu,31-Dec-37 23:55:55 GMT;
max-age=2147483647;path=/;domain=.baidu.com
Set-Cookie:PSTM=1613812859;expires=Thu,31-Dec-37 23:55:55 GMT;max-age=2147483647;path=
/domain=.baidu.com
Set-Cookie:BAIDUID=3D34E92B258EF4BF8570821B49FA9D08:FG=1;max-age=31536000;expires=Sun,2
0-Feb-22 09:20:59 GMT;domain=.baidu.com;path=/;version=1;comment=bd
Traceid:161381285905795658349934945070579850255
Vary:Accept-Encoding
X-Ua-Compatible:IE=Edge,chrome=1
!DOCTYPE html!--STATUS OK--

更多用法

端口扫描

Netcat可以做端口扫描,用来发现一些机器上开放的端口

$ nc -zv localhost 9995-9999
nc: connect to localhost port 9995 (tcp) failed: Connection refused
nc: connect to localhost port 9995 (tcp) failed: Connection refused
nc: connect to localhost port 9996 (tcp) failed: Connection refused
nc: connect to localhost port 9996 (tcp) failed: Connection refused
nc: connect to localhost port 9997 (tcp) failed: Connection refused
nc: connect to localhost port 9997 (tcp) failed: Connection refused
nc: connect to localhost port 9998 (tcp) failed: Connection refused
nc: connect to localhost port 9998 (tcp) failed: Connection refused
nc: connect to localhost port 9999 (tcp) failed: Connection refused
Connection to localhost 9999 port [tcp/*] succeeded!

-z参数表示使用Zero-I/O模式,即连接的时候禁止输入输出,仅查看端口是否开启,很适合用于做端口扫描。-v参数用来显示网络连接中的详细输出信息。根据输出信息可以看出,9999端口能连上,证明9999端口开发着

简易聊天工具

如果用C编写一个简单点对点聊天程序,至少需要几十行代码,使用Netcat让两台机器建立TCP连接,只需要执行两行命令,就能实现简单的聊天功能,如在服务器192.168.1.2上执行

$ nc -l 9999

-l参数,表示以监听模式运行Netcat,这里我们监听的是9999端口,接着在另外一台服务器上执行

$ nc 192.168.1.2 9999

执行成功,两台服务器就建立了TCP连接,接着就能通过该连接发送消息了,如在客户端服务器发送Hello, I’m client

$ nc 192.168.1.2 9999
Hello, Im client

服务端马上就收到该消息

$ nc -l 9999
Hello, Im client

同样的,在服务端发送的消息,客户端也能收到

传输文件

同样的,通过建立TCP连接,可以很方便的在两台主机间传输文件。如要将服务器A上的f.txt发送到服务器B(IP地址为192.168.1.2)上,在服务器B上执行

$ nc -l 9999  f.txt

然后在服务器A上执行

$ nc 192.168.1.2 9999  f.txt

这样就试用netcat实现了文件的收发。

正向 shell

这点比较有意思,使用Netcat能实现类似ssh的功能,即将目标机器的shell终端暴露在某个端口上,然后本地机器使用Netcat连接到目标机器上,就可以访问目标机器的shell终端
在目标机器上执行

$ nc -l 9999 | /bin/bash

这里使用Netcat作为服务端监听9999端口,并将接收到的数据通过管道发送给/bin/bash,相当于将/bin/bash暴露到9999端口上,接着在本地机器上执行

$ nc 192.168.1.2 9999

通过Netcat建立连接,就能在本地机器上访问目标机器的/bin/bash终端啦,比如在本地机器上执行ls命令

$ nc 192.168.1.2 9999
ls -l

目标机器输出如下:

$ nc -l 9999 | /bin/bash
total 4
-rw-rw-r-- 1 ferris ferris 20 Feb 21 11:50 f.txt

可以看到我们在本地机器上输入的命令,已经在目标机器上成功执行了
虽然我们能使用本地机器传输命令给到目标机器执行,但与ssh连接还是有点区别,因为在本地机器上并不能看到命令的执行结果。可以使用管道巧妙的解决该问题,在目标机器上执行

$ mkfifo /tmp/pipe
$ cat /tmp/pipe | /bin/bash 21 | nc -l -p 9999  /tmp/pipe

上面两条命令主要功能如下:

  • 用mkfifo命令创建一个命名管道
  • 然后通过cat命令读取/tmp/pipe的内容,将内容通过管道发送给/bin/bash
  • 将/bin/bash的执行结果通过管道发送给nc
  • nc将从本地机器上接收到的命令保存到/tmp/pipe中
  • /tmp/pipe中的命令又被cat读取,传输到/bin/bash中,至次完成整个数据的流向

现在在本地机器上就能收到/bin/bash命令的执行结果啦

$ nc 192.168.1.2 9999
ls -l
total 4
-rw-rw-r-- 1 ferris ferris 20 Feb 21 11:50 f.txt

与 TCP 服务端交互

Netcat可以与任何使用TCP协议的服务端进行数据交互,比如使用Netcat在Redis执行PING命令

$ printf PING\r\n | nc localhost 6379
+PONG

等同于

$ nc localhost 6379
PING
+PONG

站心网

前沿 Netcat 是一款简单的 Unix 工具,使用 UDP 和 TCP 协议。 它是一个可靠的容易被其他程序所启用的后台..

为您推荐

新版彩虹工具网源码v1.9.0更新

新版彩虹工具网采用ThinkPHP6.0开发,自带70多个工具,包含站长工具、开发工具、实用工具、娱乐工具等分类,支持工具插件扩展,支持留言、用户注册登录、后台管理功能。目前已经更新到了1.9版本,新增了QQ等级查询、..

如何选择更适合你的 Linux 发行版?

很多人经常会问我这样一个问题:“嘿,你是用Linux的,对吧?我应该使用Linux的哪个版本?我有这个朋友推荐我_____,你觉得怎么样?”我通常会以这样的问题回复:这取决于你想做什么?今天我决定写一篇关于如何选择L..

7大Git实用技巧和命令总结

Git 是一个非常强大的工具,它包含丰富的工具用以维护项目。本文介绍了一些 Git 日常使用过程中的实用技巧和命令,希望这些内容能够对大家有所帮助。Git diff通常情况下,我们会在自己的独立分支中完成需求开发,此..

从0到1,网络互助起航式

随着移动互联网的快速发展,网络互助的模式已经进入起步状态,未来,网络互助行业前景一片大好。在距今2000余年前的古罗马时期,由于连年征战,士兵们大量死伤导致家中妻女无人依靠。于是,这些争战沙场的士兵们联合..

VS创建.NET Core项目使用Docker方式部署到Linux服务器

在 Visual Studio(VS) 中,使用 Docker 方式部署 .NET Core 项目 到 Linux 服务器,可以简化环境管理并提高部署效率。以下是完整教程:1. 在 VS 创建 .NET Core 项目并启用 Docker新建 ASP.NET Core 项目打开 Visu..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

C#7.0新语法介绍

一、out输出参数在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如:先定义一个方法,方法参数是out类型的输出参数:private void DoNoting(out int x, out int y){x = 1;y = 2;}以前版本的写法: /..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

C#使用 Attribute 实现 AOP 功能

在 C# 中,通过自定义 Attribute 并结合一些技术(如动态代理、反射等)可以实现 AOP(面向切面编程)。AOP 通常用于日志记录、性能监控、权限验证等横切关注点。以下是一个使用 C# Attribute 实现 AOP 功能的示例。..

ABP.Net Core使用教程(一)启动模版项目

只需要简单的3步:1,到官网下载模版项目 https://aspnetboilerplate.com/Templates2,用VS2017打开,将Web.Host设置为启动项3,在程序包管理器控制台(Nuget控制台)里设定默认项目为EntityFrameworkCore,执行命令..

C#中的线程安全的集合ConcurrentQueue使用示例

在多线程编程中,如何安全地在不同线程之间共享数据是一个非常重要的问题。C# 为我们提供了一些专门设计的线程安全集合,其中之一就是 ConcurrentQueue<T>。它是一种先进先出(FIFO)的数据结构,专门为多线程环境设..

CSS砌体布局示例和使用场景

CSS砌体布局(Masonry Layout)CSS砌体布局是一种网页布局技术,它的灵感来源于砖石墙的排列方式,类似于“拼图”或“拼砖”的效果。在砌体布局中,元素的排列并不完全遵循传统的网格布局规则,..

使用CSS columns-visibility实现砌体布局

CSS的 columns 属性(如 columns、column-count 和 column-width)通常用于多列文本布局,而不是直接用于砌体布局。然而,结合 columns 和 visibility 属性,可以在某些情况下实现类似砌体布局的效果,虽然它并不完..

使用System.Linq.Dynamic.Core扩展库动态构建 LINQ 查询

System.Linq.Dynamic.Core 是一个扩展库,用于在运行时动态构建 LINQ 查询,支持字符串形式的表达式解析和动态查询操作。它是 .NET 的一个强大工具,适合处理需要灵活定义查询逻辑的场景,例如动态过滤、排序、投影..

小米开源智能家居平台 ha_xiaomi_home 使用示例

小米近期在 GitHub 上开源了名为“ha_xiaomi_home”的项目,即 Home Assistant 米家集成组件。该组件由小米官方支持,旨在让用户在 Home Assistant 中集成和控制小米 IoT 智能设备。主要特点:官方支持:..

C#13新特性 使用System.Threading.Lock简化线程同步

C# 13 引入了新的线程同步类型 System.Threading.Lock,它通过作用域管理的方式简化了锁的使用,使代码更加清晰可靠。本文将全面介绍 System.Threading.Lock 的功能、适用场景,并提供完整的运行示例程序。1. 什么是..

微软官方Microsoft.Extensions.AI库使用示例

Microsoft.Extensions.AI 库介绍Microsoft.Extensions.AI 是一个扩展库,用于在 .NET 应用程序中轻松集成人工智能(AI)服务,例如 OpenAI、Azure OpenAI 和其他支持文本生成或语言模型的 API。通过与 Microsoft.Ext..

.Net Core中Dapper的使用详解

1.安装Dapper这里直接使用Nuget安装。安装版本是1.50.5安装完成之后,发现Nuget下已经有了Dapper。2.创建DapperHelper接下来创建一个DapperHelper帮助类,来进行读取数据库连接字符串,打开数据库等操作。public cla..

最新CentOS7安装搭建shadowsocks服务端+客户端使用图文教程

使用的CentOS版本是7.9,其他版本也可以。超级推荐的是搭建shadowsocks服务端,安装配置都很简单,几分钟就搞定,客户端支持PC移动端,下面是安装shadowsocks的过程,只要复制粘贴命令就行了,文件夹路径都不需要改..

发表回复

返回顶部