大数据-玩转数据-netcat

news2024/12/22 14:54:37

Netcat(简称nc)是一款强大的命令行网络工具,用来在两台机器之间建立TCP/UDP连接,并通过标准的输入输出进行数据的读写。

一、Windows 下载安装 netcat(nc)命令

1、netcat(nc)下载地址:

https://eternallybored.org/misc/netcat/
在这里插入图片描述

2、点击 netcat 1.12 链接进行下载

1、解压netcat-win32-1.12文件夹
在这里插入图片描述

3、配置环境变量

在Path里添加netcat路径:
在这里插入图片描述

4、测试

打开两个cmd窗口
第一个执行:nc -l -p 9999
第二个执行:nc localhost 9999

验证执行结果
在这里插入图片描述
第二个窗口输入 第一个窗口就会接收。

二、linux 下安装执行netcat(nc)命令

大部分的Linux发行版会都会自带Netcat,可以使用nc命令查看系统中是否有安装Netcat

$ nc
usage: nc [-46AacCDdEFhklMnOortUuvz] [-K tc] [-b boundif] [-i interval] [-p source_port]
	  [--apple-recv-anyif] [--apple-awdl-unres]
	  [--apple-boundif ifbound]
	  [--apple-no-cellular] [--apple-no-expensive]
	  [--apple-no-flowadv] [--apple-tcp-timeout conntimo]
	  [--apple-tcp-keepalive keepidle] [--apple-tcp-keepintvl keepintvl]
	  [--apple-tcp-keepcnt keepcnt] [--apple-tclass tclass]
	  [--tcp-adp-rtimo num_probes] [--apple-initcoproc-allow]
	  [--apple-tcp-adp-wtimo num_probes]
	  [--setsockopt-later] [--apple-no-connectx]
	  [--apple-delegate-pid pid] [--apple-delegate-uuid uuid]
	  [--apple-kao] [--apple-ext-bk-idle]
	  [--apple-netsvctype svc] [---apple-nowakefromsleep]
	  [--apple-notify-ack] [--apple-sockev]
	  [--apple-tos tos] [--apple-tos-cmsg]
	  [-s source_ip_address] [-w timeout] [-X proxy_version]
	  [-x proxy_address[:port]] [hostname] [port[s]]

出现上面提示信息说明系统中已经安装了Netcat,如果没有安装,可以使用下面命令进行安装

$ wget https://sourceforge.NET/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
$ tar zxvf netcat-0.7.1.tar.gz
$ cd netcat-0.7.1
$ ./configure
$ make
$ make instal

快速开始
我们可以使用Netcat与HTTP服务器建立连接,以百度为例,使用下面命令与百度建立TCP连接

$ nc www.baidu.com 80

第一个参数为要建立连接的服务器地址,第二个参数为连接端口。成功建立连接后,会进入输入/输出界面,在该界面能向TCP连接发送/接收数据。如百度服务器发送GET请求,模拟浏览器访问百度首页,输入GET / HTTP/1.0并按两次回车

$ nc www.baidu.com 80
GET / HTTP/1.0
(回车)
(回车)

发送完请求后,会收到如下HTTP响应

HTTP/1.0 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 14615
Content-Type: text/html

其他使用场景
端口扫描
Netcat还可以用来做端口扫描,用来发现一些机器上开放的端口

$ nc -zv localhost 9995-9999
nc: connect to localhost port 9995 (tcp) failed: Connection refused
nc: connect to localhost port 9995 (tcp) failed: Connection refused
nc: connect to localhost port 9996 (tcp) failed: Connection refused
nc: connect to localhost port 9996 (tcp) failed: Connection refused
nc: connect to localhost port 9997 (tcp) failed: Connection refused
nc: connect to localhost port 9997 (tcp) failed: Connection refused
nc: connect to localhost port 9998 (tcp) failed: Connection refused
nc: connect to localhost port 9998 (tcp) failed: Connection refused
nc: connect to localhost port 9999 (tcp) failed: Connection refused
Connection to localhost 9999 port [tcp/*] succeeded!

-z参数表示使用Zero-I/O模式,即连接的时候禁止输入输出,仅查看端口是否开启,很适合用于做端口扫描。-v参数用来显示网络连接中的详细输出信息。根据输出信息可以看出,9999端口能连上,证明9999端口开发着

聊天工具
如果用C编写一个简单点对点聊天程序,至少需要60-70行代码,使用Netcat让两台机器建立TCP连接,只需要执行两行命令,就能实现简单的聊天功能,如在服务器172.16.0.4上执行

$ nc -l 9999

-l参数,表示以监听模式运行Netcat,这里我们监听的是9999端口,接着在另外一台服务器上执行

$ nc 172.16.0.4 9999

执行成功,两台服务器就建立了TCP连接,接着就能通过该连接发送消息了,如在客户端服务器发送Hello, I’m client

$ nc 172.16.0.4 9999
Hello, I'm client

服务端就能马上收到该消息

$ nc -l 9999
Hello, I'm client

同样的,在服务端发送的消息,客户端也能收到

传输文件
同样的,通过建立TCP连接,可以很方便的在两台主机间传输文件。如要将服务器A上的test.txt发送到服务器B(IP地址为172.16.0.4)上,在服务器B上执行

$ nc -l 9999 > test.txt

然后在服务器A上执行

$ nc 172.16.0.4 9999 < test.txt

这样就能实现文件发送了

正向 shell
这点比较有意思,使用Netcat能实现类似ssh的功能,即将目标机器的shell终端暴露在某个端口上,然后本地机器使用Netcat连接到目标机器上,就可以访问目标机器的shell终端

在目标机器上执行

$ nc -l 9999 | /bin/bash

这里使用Netcat作为服务端监听9999端口,并将接收到的数据通过管道发送给/bin/bash,相当于将/bin/bash暴露到9999端口上,接着在本地机器上执行

$ nc 172.16.0.4 9999

通过Netcat建立连接,就能在本地机器上访问目标机器的/bin/bash终端啦,比如在本地机器上执行ls命令

$ nc 172.16.0.4 9999
ls -l

目标机器输出如下

$ nc -l 9999 | /bin/bash
total 4
-rw-rw-r-- 1 huangxy huangxy 6 Feb 21 00:50 test.txt

可以看到我们在本地机器上输入的命令,已经在目标机器上成功执行了

虽然我们能使用本地机器传输命令给到目标机器执行,但与ssh连接还是有点区别,因为在本地机器上并不能看到命令的执行结果。可以使用管道巧妙的解决该问题,在目标机器上执行

$ mkfifo /tmp/pipe
$ cat /tmp/pipe | /bin/bash 2>&1 | nc -l -p 9999 > /tmp/pipe

上面两条命令主要功能如下:

用mkfifo命令创建一个命名管道
然后通过cat命令读取/tmp/pipe的内容,将内容通过管道发送给/bin/bash
将/bin/bash的执行结果通过管道发送给nc
nc将从本地机器上接收到的命令保存到/tmp/pipe中
/tmp/pipe中的命令又被cat读取,传输到/bin/bash中,至次完成整个数据的流向
现在在本地机器上就能收到/bin/bash命令的执行结果啦

$ nc 172.16.0.4 9999
ls -l
total 4
-rw-rw-r-- 1 huangxy huangxy 6 Feb 21 00:50 test.txt

与 TCP 服务端交互
Netcat可以与任何使用TCP协议的服务端进行数据交互,比如使用Netcat在Redis执行PING命令

$ printf "PING\r\n" | nc localhost 6379
+PONG

等同于

$ nc localhost 6379
PING
+PONG

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

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

相关文章

《程序员面试金典(第6版)》面试题 16.08. 整数的英语表示

题目描述 给定一个整数&#xff0c;打印该整数的英文描述。 示例 1: 输入: 123输出: “One Hundred Twenty Three” 示例 2: 输入: 12345输出: “Twelve Thousand Three Hundred Forty Five” 示例 3: 输入: 1234567输出: “One Million Two Hundred Thirty Four Thousand…

Kali 更换源(超详细,附国内优质镜像源地址)

1.进入管理员下的控制台。 2. 输入密码后点击“授权”。 3.在控制台内输入下面的内容。 vim /etc/apt/sources.list 4.敲击回车后会进入下面的页面。 5.来到这个页面后的第一部是按键盘上的“i”键&#xff0c;左下角出现“插入”后说明操作正确。 6.使用“#”将原本的源给注释…

武汉大学惯性导航课程合集【2021年秋】1.2 惯性器件的误差和标定

前提平台惯导NED与本地对齐&#xff0c;body系和navigation对齐。地表IMU感受到的是 朝天上的力【0&#xff0c;0&#xff0c;-9.8】和 赤道的【15deg/hr&#xff0c;0&#xff0c;0】或者北极 【0&#xff0c;0&#xff0c;-15deg/hr】或者【15cos纬度&#xff0c;0&#xff0…

「STM32入门」USART串口通信

通信 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 STM32常见的通信协议 本文将介绍USART 概念解释 TX、RX分别是Transmit和Receive的缩写&#xff0c…

一文把 JavaScript 中的 this 聊得明明白白

文章目录 1.this 是什么&#xff1f;2.this的指向2.1 全局上下文的 this 指向2.2 函数&#xff08;普通函数&#xff09;上下文中的 this 指向2.3 事件处理程序中的 this 指向2.4 以对象的方式调用时 this 的指向2.5 构造函数中的 this 指向2.6 在 类上下文中 this 的指向。2.7…

开源企业资源规划ERPNext的安装

往常节假日&#xff0c;都是呆在家里看别人堵&#xff0c;这回老苏也出门凑了个热闹&#xff0c;28号早上 7 点半出的门 2 点半往回走的 一天啥也没干&#xff0c;就开了 7 个小时的车去舅舅家蹭了顿饭。还别说&#xff0c;那个田园鸡味道是真不错。 车很久没开了&#xff0c;…

(详解)vue中实现 ‘换肤 / 主题切换’ 功能的三种方式

目录 一、背景 二、实现思路 方法1&#xff1a;定义全局的CSS变量 方法2&#xff1a;切换已定义好的css文件 方法3&#xff1a;切换顶级CSS类名 (需使用css处理器,如sass、less等) 一、背景 在我们开发中我们会遇到像是需要切换程序风格、主题切换啦这种应用场景。 二、实现…

JavaScript通过函数异常处理来输入圆的半径,输出圆的面积的代码

以下为实现通过函数异常处理来输入圆的半径&#xff0c;输出圆的面积的代码和运行截图 目录 前言 一、通过函数异常处理来输入圆的半径&#xff0c;输出圆的面积 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以…

【RPA开发】pymongo 使用教程

实际开发时抓取到的诸多数据如何保存是一个关键问题&#xff0c;MongoDB 相比传统关系型数据库&#xff08;比如mysql&#xff09;来说灵活度更高&#xff0c;爬虫时字段格式及数量很可能会随着需求或实际数据的变动而改变&#xff0c;因此 MongoDB 作为数据库来说最合适不过了…

2023年华中杯选题人数公布

2023年华中杯选题人数公布 经过一晚上代码的编写&#xff0c;论文的写作&#xff0c;C题完整版论文已经发布&#xff0c; 注&#xff1a;蓝色字体为说明备注解释字体&#xff0c;不能出现在大家的论文里。黑色字体为论文部分&#xff0c;大家可以根据红色字体的注记进行摘抄。…

【STM32】知识补充 分频技术深度解析: 原理、应用与实现方法

【STM32】知识补充 分频技术深度解析: 原理、应用与实现方法 概述分频概念分频原理技术器分频器触发器分频器模数计数器分频器 分频应用微控制器时钟分频通信系统中的频率合成数字电路设计中的计时与同步 分频实现方法硬件分频器软件分频器 案例总结 概述 分频 (Frequency Div…

c#笔记-创建一个项目

创建一个项目 创建控制台程序 在你安装完成Visual Studio后打开它&#xff0c;你会的到一个启动窗口 点击创建新项目&#xff0c;选择右上角c#的没有Framework的控制台应用。 项目名称&#xff0c;位置自己随意。 目标框架选择NET7.0。 项目创建完成后应该你的界面应该类似…

nvdec与vaapi与vdpau的关系

nvdec/vaapi/vdpau的关系 NVDEC&#xff1a;nvidia video decoder。 英伟达官网中有关video codec SDK的介绍&#xff0c;其中有头文件、开发API文档等。 Nvidia Video SDK中提供了NVDEC、NVENC&#xff0c;其中NVDEC以前也叫做NVCUVID&#xff08;不知道NVDEC的开发API中很…

【9.HTML入门知识-其他知识补充】

其他知识补充 1.使用Web字体和图标1.1 web fonts兼容性写法1.2 字体图标1.2.1 字体图标的使用 2.精灵图 CSS Sprite2.1 精灵图的使用 3.置鼠标指针&#xff08;光标&#xff09;样式cusor4.居中方案4.1 使用绝对定位元素居中 1.使用Web字体和图标 1.1 web fonts兼容性写法 1.2 …

软件开发团队的护网低成本应对方案

主题&#xff1a; 1、攻击方技术手段说明&#xff0c;结合攻击队手段重点关注的防御点介绍&#xff1b; 2、防守方&#xff08;软件开发团队&#xff09;的低成本应对思路&#xff1b;系统是如何被攻破的 攻防演练&#xff08;APT&#xff09;攻击路径 未知攻&#xff0c;焉知…

IGH EtherCAT主站应用层代码开发:控制驱动电机

1、安装IGH EtherCAT主站 Ubuntu18.04环境下安装igH EtherCAT Master 2、查询从站配置信息 连接从站通过网线连接主站与从站 启动主站打开终端,输入: sudo /etc/init.d/ethercat star 显示Starting EtherCAT master 1.5.2 done则说明成功。 查询从站列表终端输入: eth…

【C++】 list-map 链表与映射表的简单使用

目录 list 链表 定义链表&#xff0c;并在首、尾添加、删除元素 迭代器遍历链表 任意位置插入或删除 获取首尾节点中元素的值 使用增强的范围for循环进行遍历链表 其他常见的函数 map 映射表 定义map 添加 使用函数插入元素 迭代器遍历map 修改 删除 使用增强的范…

PMP项目管理-[第七章]成本管理

成本管理知识体系&#xff1a; 规划成本管理&#xff1a; 估算成本&#xff1a; 制定预算&#xff1a; 控制成本&#xff1a; 7.1 挣值管理新兴实践 ps&#xff1a;了解即可&#xff0c;考试考不到 7.2 规划成本管理 定义&#xff1a;确定如何估算、预算、管理、监督和控制项目…

直接插入排序

一、概念及其介绍 插入排序(InsertionSort)&#xff0c;一般也被称为直接插入排序。 对于少量元素的排序&#xff0c;它是一个有效的算法。插入排序是一种最简单的排序方法&#xff0c;它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增…

你是否曾经为自己写的代码而感到懊恼?那如何才能写出高质量代码呢?

这里写目录标题 一、 前言二、高质量代码的特征三、编程实践技巧1. 遵循编码规范2. 使用有意义的变量名和函数名3. 减少代码重复4. 使用注释5. 编写单元测试6. 使用设计模式7. 使用版本控制工具8. 保持代码简洁9. 优化代码性能10. 学习和借鉴他人的代码总结 一、 前言 写出高质…