nc - 网络工具箱中的「瑞士军刀」
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 - 网络工具箱中的「瑞士军刀」的更多相关文章
- 在Mac中使用「dd」指令烧录ISO镜像文件到U盘
作者:超級efly 發布:2014-07-26 20:22 分類:電腦 閱讀:442 11條評論 大家在Windows系統下可以方便的使用UltraISO程式來燒錄「.ISO」, ...
- 在FreeSQL中实现「触发器」和软删除功能
前言 最近做新项目,技术栈 AspNetCore + FreeSQL 这个ORM真的好用,文档也很完善,这里记录一下两个有关「触发器」的功能实现 修改实体时记录更新时间 模型代码 我的模型都是基于这个 ...
- spring cloud 入门,看一个微服务框架的「五脏六腑」
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」
原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...
- 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习
在强化学习中,设计密集.定义良好的外部奖励是很困难的,并且通常不可扩展.通常增加内部奖励可以作为对此限制的补偿,OpenAI.CMU 在本研究中更近一步,提出了完全靠内部奖励即好奇心来训练智能体的方法 ...
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」(转)
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 本文将从 Spring Cloud 出发,分两小节讲述微服务框架的「五脏六腑」: ...
- 【微信小程序】开发实战 之 「配置项」与「逻辑层」
微信小程序作为微信生态重要的一环,在实际生活.工作.商业中的应用越来越广泛.想学习微信小程序开发的朋友也越来越多,本文将在小程序框架的基础上就微信小程序项目开发所必需的基础知识及语法特点进行了详细总结 ...
- Facebook 发布「流程」
时不时就会在面试过程中碰到有候选人问 Facebook 是否采用 Scrum 之类的敏捷方法,偶尔也会有中国的朋友问及 Facebook 上线流程.我通常会简单说几句,然后说「如果你真感兴趣的话,去搜 ...
- 「技巧」如何快速安装 Sketch 插件
Sketch拥有强大丰富的插件,但是这些插件天各一方,四处查找下载地址非常麻烦.这里提供一个技巧,通过一个入口可以安装各种插件,基本涵盖了市面上所有靠谱的插件. 准备 Sketch54 Runner ...
随机推荐
- MySQL的分页存储过程
-- 创建分页存储过程-- 1 判断存在即删除DROP PROCEDURE IF EXISTS popp;-- 2 创建万能分页CREATE PROCEDURE popp(_fls VARCHAR( ...
- APP移动端测试
重点: app测试的内容 add 命令 monkey命令 次重点:模拟器的安装 雷电 夜神 android 自带的模拟器 真机测试 简单了解云测Testing 腾讯云() 了解:市场有点移动端的操 ...
- python动态柱状图图表可视化:历年软科中国大学排行
本来想参照:https://mp.weixin.qq.com/s/e7Wd7aEatcLFGgJUDkg-EQ搞一个往年编程语言动态图的,奈何找不到数据,有数据来源的欢迎在评论区留言. 这里找到了一个 ...
- IE对于input checkbox onclick方法显示不支持此对象和方法的解决方案
网站注册页,协议结束后,通过input checkbox勾选,进行下一步,FF没问题,IE一直显示不支持此对象和方法. 网上查找大部分说函数名称与系统函数重名,而事实上不是. <div name ...
- springboot集成jpa操作mybatis数据库
数据库如下 CREATE TABLE `jpa`.`Untitled` ( `cust_id` bigint() NOT NULL AUTO_INCREMENT, `cust_address` var ...
- 第七模块 :微服务监控告警Prometheus架构和实践
119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...
- python list遍历方法汇总
list=['a','b','c','d','e'] #方法1: print('#方法1:') #i值为列表的item,list为列表名,因此i值即为列表元素 for i in list: #list ...
- 微信小程序点击保存图片到本地相册——踩坑
在微信小程序中要保存图片到本地相册,需要获取相册权限. 总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.dow ...
- C#数据结构与算法系列(十五):排序算法(SortAlgorithm)
1.介绍 排序是将一组数据,以指定的顺序进行排序的过程 2.分类 内部排序法:指将需要处理的所有数据都加载到内部存储器中进行排序 外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序
- Python实用笔记 (23)面向对象高级编程——使用__slots__
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pa ...