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 )

扫描端口

有时需要测试服务器的端口连通性,下面是测试服务器(IP:10.3.3.3 22) 22 端口是否开启的例子

[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

nc - 网络工具箱中的「瑞士军刀」的更多相关文章

  1. 在Mac中使用「dd」指令烧录ISO镜像文件到U盘

    作者:超級efly   發布:2014-07-26 20:22   分類:電腦   閱讀:442   11條評論    大家在Windows系統下可以方便的使用UltraISO程式來燒錄「.ISO」, ...

  2. 在FreeSQL中实现「触发器」和软删除功能

    前言 最近做新项目,技术栈 AspNetCore + FreeSQL 这个ORM真的好用,文档也很完善,这里记录一下两个有关「触发器」的功能实现 修改实体时记录更新时间 模型代码 我的模型都是基于这个 ...

  3. spring cloud 入门,看一个微服务框架的「五脏六腑」

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

  4. 从 Spring Cloud 看一个微服务框架的「五脏六腑」

    原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...

  5. 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习

    在强化学习中,设计密集.定义良好的外部奖励是很困难的,并且通常不可扩展.通常增加内部奖励可以作为对此限制的补偿,OpenAI.CMU 在本研究中更近一步,提出了完全靠内部奖励即好奇心来训练智能体的方法 ...

  6. 从 Spring Cloud 看一个微服务框架的「五脏六腑」(转)

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 本文将从 Spring Cloud 出发,分两小节讲述微服务框架的「五脏六腑」: ...

  7. 【微信小程序】开发实战 之 「配置项」与「逻辑层」

    微信小程序作为微信生态重要的一环,在实际生活.工作.商业中的应用越来越广泛.想学习微信小程序开发的朋友也越来越多,本文将在小程序框架的基础上就微信小程序项目开发所必需的基础知识及语法特点进行了详细总结 ...

  8. Facebook 发布「流程」

    时不时就会在面试过程中碰到有候选人问 Facebook 是否采用 Scrum 之类的敏捷方法,偶尔也会有中国的朋友问及 Facebook 上线流程.我通常会简单说几句,然后说「如果你真感兴趣的话,去搜 ...

  9. 「技巧」如何快速安装 Sketch 插件

    Sketch拥有强大丰富的插件,但是这些插件天各一方,四处查找下载地址非常麻烦.这里提供一个技巧,通过一个入口可以安装各种插件,基本涵盖了市面上所有靠谱的插件. 准备 Sketch54 Runner ...

随机推荐

  1. Flutter学习笔记(38)--自定义控件之组合控件

    如需转载,请注明出处:Flutter学习笔记(38)--自定义控件之组合控件 在开始之前想先写点其他的,emm...就是今天在学习到自定义控件的时候,由于自定义控件这块一直是我的短板,无论是Andro ...

  2. centos 6.5 上安装jdk

    1.首先明确自己的电脑上32位还是64位,自己的电脑是32位 2.下载jdk进入到oracle公司的主页 把页面拖到最下面 点击上面这个就可以下载以前比较低的版本 这里选择 32位的源码包的方式,将源 ...

  3. Nginx基本知识,nginx安装使用方法

    Nginx 是一款高性能的Web服务器软件. - 具有极高的并发性能 - 利用Nginx与Tomcat组合使用, 搭建反向代理集群 - Nginx 反向代理集群可以解决网站的高并发问题! 1.安装 Y ...

  4. Linux安装docker笔记

    更新yum操作 yum -y update 安装docker yum install -y docker 或者yum install -y docker-engine 启动docker  servic ...

  5. webstom 汉化,激活

    1.激活 本地服务器激活: 下载 magnet:?xt=urn:btih:2289E4F8CEB346AC44E54C8C0DA706CC537301AA 得到一个压缩包IntelliJIDEALic ...

  6. 【spring boot】spring boot 拦截器

    今日份代码: 1.定义拦截器 import com.alibaba.fastjson.JSON; import org.apache.commons.collections.CollectionUti ...

  7. 二.3.token认证,jwt认证,前端框架

    一.token: 铺垫: 之前用的是通过最基本的用户名密码登录我的运维平台http://127.0.0.1:8000/---这种用的是form表单,但是这种对于前后端分离的不适合.前后端分离,应该通过 ...

  8. tomcat结合shiro无文件webshell的技术研究以及检测方法

    0x01简介 shiro结合tomcat回显,使用公开的方法,回显大多都会报错.因为生成的payload过大,而tomcat在默认情况下,接收的最大http头部大小为8192.如果超过这个大小,则to ...

  9. 微信小程序获取index索引值的方法

    功能:点击某一项,底部出现粉色边框 首先需要通过 bindtap 为每一个item项绑定一个点击事件,其次需要添加自定义属性 data-* = {{index}} ,以便在函数中获取到被点击item项 ...

  10. Promise内部实现原理

    promise内部实现原理: function $Promise(fn) { // Promise 的三种状态 this.PENDING = 'pending' this.RESOLVED = 're ...