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. springboot mybatis plus多数据源轻松搞定 (上)

    在开发中经常会遇到一个程序需要调用多个数据库的情况,总得来说分为下面的几种情况: 一个程序会调用不同结构的两个数据库. 读写分离,两个数据结构可能一样高,但是不同的操作针对不同的数据库. 混合情况,既 ...

  2. Lucene5多条件查询

    lucene是一个很强大的搜索工具,最近公司项目上用到,结合JAVA1234所讲,对多条件查询做出总结 先描述一下我的多条件需求,如果和您的类似,继续往下看. 1.我的Lucene搜索会在很多地方使用 ...

  3. redis高级命令3哨兵模式

    redis的哨兵模式 现在我们在从服务器1.222上让该从服务器作为哨兵 首先将redis安装包文件下的sentinel.conf文件复制到/usr/local/redis/etc目录下 然后修改se ...

  4. IDEA记坑之移动项目文件之后,import 找不到文件以及出现Cannot access的问题

    今天本想挪动下文件,使项目更加可观,易整理,但是挪动后出现各种问题,import xxx;全部飘红.部分切面还出现Cannot access:试过了重启idea,rebuild....各种方法都行不通 ...

  5. SpringBoot--使用Spring Cache整合redis

    一.简介 Spring Cache是Spring对缓存的封装,适用于 EHCache.Redis.Guava等缓存技术. 二.作用 主要是可以使用注解的方式来处理缓存,例如,我们使用redis缓存时, ...

  6. git和github入门指南(3.3)

    3.4.开源项目的协作方式 开源项目通常是没有写入的权限的,我们需要换一种协作方式参与到这些开源项目中 为了演示方便,我们把git-demo这个项目中nd-00002这个合作者的权限取消 接下来nd- ...

  7. Oracle 闪回总结

    一.闪回查询(Flashback Query)1.闪回查询技术1.1 闪回查询机制    闪回查询是指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或 ...

  8. 吐血推荐,想进BAT必看

    不必太纠结于当下,也不必太忧虑未来,人生没有无用的经历,当你经历过一些事情后,眼前的风景已经和从前不一样了.--村上春树 一.包含如下内容 ActiveMQ消息中间件面试专题 BAT80道面试题 BA ...

  9. Java设计模式三

    建造者模式 当我们思考通过复杂的零件来生成一个完整的产品时,就用到了今天要说的主题-建造者模式,下面我们实际的代码来分析建造者模式的设计 假设飞机起飞需要有多个步骤,但是每种型号的飞机起飞的步骤又不相 ...

  10. 【XJOI】NOIP2020模拟训练题2 总结

    得分情况: 估分: 30(T1)+100(T2)+0(T3)=130; 实际: 30(T1)+60(T2)+10(T3)=100;   QAQ 是我高看自己了   T1  友好数对: 题意: 如果一个 ...