百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

nc - 网络工具箱中的「瑞士军刀」

yuyutoo 2025-01-20 17:48 4 浏览 0 评论

nc 是 Linux下强大的网络命令行工具,主要用于 TCP、UDP、UNIX域套接字 相关的操作

它被设计成可以由其他程序灵活驱动可靠的后台工具,拥有 "瑞士军刀" 的美称,也是网络管理员常用的工具之一


安装

以下是 nc工具的安装,完成后执行 nc --version命令, 如果返回nc的版本信息表示安装成功

yum install nc
[root@ecs-centos-7 ~]# nc --version
Ncat: Version 7.50 ( https://nmap.org/ncat )


扫描端口

有时需要测试服务器的端口连通性,下面的命令是测试服务器端口是否开启

[root@ecs-centos-7 ~]# nc -z -v -w 3 10.3.3.3 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.3.3.3 22:22.
Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.
[root@ecs-centos-7 ~]# nc -z -v -w 3 10.3.3.3 22 6000
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

-z 选项是报告连接状态(只连接不发送数据)

-v 选项是输出命令结果信息,

-w 是设置超时时间,默认是秒,如果要设置毫秒的话,可以在数字后面加上 ms, 比如:上面的 -w 3 是3秒超时,-w 300ms 表示超时时间是300毫秒

从上面的结果可以看出,目标服务器上 22 端口是开启的,6000 端口是关闭的

例子中扫描的是 TCP 协议的端口,如果要扫描 UDP 协议的端口,需要加上 -u 选项,如果换成 UDP端口的话,上面的命令就会变成 nc -uz -v -w 3 10.3.3.3 22


聊天服务器

机器A的终端开启端口侦听,机器B连接A侦听的端口并向A发送数据。具体过程如下:



63机器相当于一个简易的命令行聊天服务器,64机器相当于客户端的功能,默认使用 TCP 协议连接服务器

可以看到,63机器在本地开启一个侦听8000端口的服务,64机器连接63机器的8000端口,连接成功之后可以互相发送数据了


传输文件

机器A和机器B之间可以通过 nc 命令传输文件,具体步骤如下:

63机器作为服务器,侦听8000端口并重定向到 out.txt 文件,64机器连接63成功之后,自动把 input.txt 文件传输到服务器


创建后门

可以在系统中创建后门执行bash命令的服务,因为涉及到系统安全性问题,所以生产环境要慎用,不过平时在内网开发环境中用来测试的话就很方便了,具体的使用步骤如下:

上面的例子中,63机器开启端口 8000 的本地服务,服务会使用 /bin/bash 执行收到的命令,64机器客户端连上63机器后,输入任意的命令,都相当于在63机器上执行,命令结果返回给64机器

说明:-e 选项默认使用的是 /bin/bash 执行命令, 这里的 -e 也可以换成 -c ,唯一区别是 -c 默认使用的是 /bin/sh 执行命令

远程执行脚本

nc 支持远程执行 shell 脚本和 lua 脚本

  • shell 脚本 脚本 s.sh 脚本内容如下:
#!/bin/sh

echo "this is a shell programming..."

服务器端

nc -l 192.168.70.63 8000 --sh-exec ./s.sh  

客户端

[cgyx@cghost35 ~]$ nc 192.168.70.63 8000
this is a shell programming...
  • lua 脚本 脚本 t.lua 内容如下:
x = 5
y = 3
h = x + y
print('this is a lua test..h:',h)

服务器端

nc -l 192.168.70.63 8000 --lua-exec t.lua 

客户端

[cgyx@cghost35 ~]$ nc 192.168.70.63 8000
this is a lua test..h:  8

Web服务器

nc 可以当做简易的 web 服务器,现服务器本地有一个 index.html 文件,内容如下

HTTP/1.0 200 OK
<html>
        <head>
              <title>Test Page</title>
        </head>
        <body>
                <p>This is a Netcat Basic HTTP server!</p>
        </body>
</html>

服务器执行 nc -k -l 192.168.70.63 8080 < index.html 命令监听8080端口

打开浏览器,地址栏输入 192.168.70.63:8080,具体效果如下图:



此时,服务器端的输出如下:


注意:-k 选项是指监听模式接受多个连接,如果没有指定 -k 选项的话,浏览器访问一次,服务器就会退出了


作为浏览器

nc 不仅可以当作web服务器,还可以当作浏览器发送HTTP请求

以百度首页为例, 输入 nc www.baidu.com 80,回车之后,再次输入 GET / HTTP/1.0 再次敲击两次回车,即可获得百度首页的 HTML 文档内容,由于百度首页HTML太长,下面的例子只是文档的部分内容

[cgyx@cghost35 ~]$ nc www.baidu.com 80
GET / HTTP/1.0

HTTP/1.0 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 14615
Content-Type: text/html
Date: Thu, 16 Jul 2020 06:49:16 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


查找运行在端口上的服务

nc 可以扫描指定IP上指定端口是否开启,那能否查找到指定IP上运行于指定端口上的服务呢? 答案是肯定的,以下的例子是获取指定IP上 22 号端口上运行的服务

[root@ecs-centos-7 ~]# nc -v -n 10.3.3.3 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.3.3.3 22.
SSH-2.0-OpenSSH_6.6.1

从上面的例子中可以看出,机器(IP:10.3.3.3)上22号端口上运行的是SSH服务


访问控制

服务器端可以只接受指定的IP的连接或者只拒绝指定IP的连接

注意 :

1、下面的例子中 增加 -k 选项是让服务器接受多个连接,避免接受一个客户端连接就退出了

2、--lua-exec t.lua 为了客户端连上服务器之后返回一个打印字符串,来表示连接服务器成功

  • 只允许指定的IP

只允许IP为 192.168.62 客户端连接

nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62

只允许IP为 192.168.62 和 192.168.64 的客户端连接

nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62 --allow 192.168.64

只允许内网IP段的客户端连接

nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62-64

从文件中获取允许访问的IP地址列表

[cgyx@cghost35 ~]$ cat allow.txt 
192.168.70.62
192.168.70.64
[cgyx@cghost35 ~]$ nc -k -l 8000 --lua-exec t.lua  --allowfile allow.txt
  • 只拒绝指定的IP

只拒绝IP为 192.168.62 的客户端

nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62

只拒绝IP为 192.168.62 和 192.168.64 的客户端连接

nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62 --deny 192.168.64

只拒绝内网IP段的客户端连接

nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62-64

从文件中获取deny访问的IP地址列表

[cgyx@cghost35 ~]$ cat deny.txt 
192.168.70.62
192.168.70.64
[cgyx@cghost35 ~]$ nc -k -l 8000 --lua-exec t.lua  --denyfile deny.txt

相关推荐

.NET 奇葩问题调试经历之3——使用了grpc通讯类库后,内存一直增长......

...

全局和隐式 using 指令详解(全局命令)

1.什么是全局和隐式using?在.NET6及更高版本中,Microsoft引入了...

请停止微服务,做好单体的模块化才是王道:Spring Modulith介绍

1、介绍模块化单体是一种架构风格,代码是根据模块的概念构成的。对于许多组织而言,模块化单体可能是一个很好的选择。它有助于保持一定程度的独立性,这有助于我们在需要的时候轻松过渡到微服务架构。Spri...

ASP.NET程序集引用之痛:版本冲突、依赖地狱等解析与实战

我是一位多年后端经验的工程师,其中前几年用ASP.NET...

.NET AOT 详解(.net 6 aot)

简介AOT(Ahead-Of-TimeCompilation)是一种将代码直接编译为机器码的技术,与传统的...

一款基于Yii2开发的免费商城系统(一款基于yii2开发的免费商城系统是什么)

哈喽,我是老鱼,一名致力于在技术道路上的终身学习者、实践者、分享者!...

asar归档解包(游戏arc文件解包)

要学习Electron逆向,首先要有一个Electron开发的程序的发布的包,这里就以其官方的electron-quick-start作为例子来进行一下逆向的过程。...

在PyCharm 中免费集成Amazon CodeWhisperer

CodeWhisperer是Amazon发布的一款免费的AI编程辅助小工具,可在你的集成开发环境(IDE)中生成实时单行或全函数代码建议,帮助你快速构建软件。简单来说,AmazonCodeWhi...

2014年最优秀JavaScript编辑器大盘点

1.WebstormWebStorm是一种轻量级的、功能强大的IDE,为Node.js复杂的客户端开发和服务器端开发提供完美的解决方案。WebStorm的智能代码编辑器支持JavaScript,...

基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享

项目简介:基于JS的超轻量级聊天软件。前端:vue、iview、electron实现的PC桌面版聊天程序,主要适用于私有云项目内部聊天,企业内部管理通讯等功能,主要通讯协议websocket。支持...

JetBrains Toolbox推出全新产品订阅授权模式

捷克知名软件开发公司JetBrains最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境IntelliJIDEA,相信很多开发者都有所了解。而近期自2015年11月2日起,JetBr...

idea最新激活jetbrains-agent.jar包,亲测有效

这里分享一个2019.3.3版本的jetbrains-agent.jar,亲测有效,在网上找了很多都不能使用,终于找到一个可以使用的了,这里分享一下具体激活步骤,此方法适用于Jebrains家所有产品...

CountDownTimer的理解(countdowntomars)

CountDownTimer是android开发常用的计时类,按照注释中的说明使用方法如下:kotlin:object:CountDownTimer(30000,1000){...

反射为什么性能会很慢?(反射时为什么会越来越长)

1.背景前段时间维护一个5、6年前的项目,项目总是在某些功能使用上不尽人意,性能上总是差一些,仔细过了一下代码发现使用了不少封装好的工具类,工具类里面用了好多的反射,反射会影响到执行效率吗?盲猜了一...

btrace 开源!基于 Systrace 高性能 Trace 工具

介绍btrace(又名RheaTrace)是抖音基础技术团队自研的一款高性能AndroidTrace工具,它基于Systrace实现,并针对Systrace不足之处加以改进,核心改进...

取消回复欢迎 发表评论: