7,克隆一个设备如果你已经安装配置一台Linux机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。不在需要重复配置安装的过程,只启动另一台机器的一些引导可以随身碟和克隆你的机器。 克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上 Server $dd if=/dev/sda | nc -l 1567Client $nc -n 172.31.100.7 1567 | dd of=/dev/sdadd是一个从磁盘读取原始数据的工具,我通过netcat服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。但是如果我们已经做过分区并且只需要克隆root分区,我们可以根据我们系统root分区的位置,更改sda 为sda1,sda2.等等。 8,打开一个shell我们已经用过远程shell-使用telnet和ssh,但是如果这两个命令没有安装并且我们没有权限安装他们,我们也可以使用netcat创建远程shell。 假设你的netcat支持 -c -e 参数(默认 netcat) Server $nc -l 1567 -e /bin/bash -iClient $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的一些示例。 其它用途有:
简单来说,只要你了解协议就可以使用netcat作为网络通讯媒介,实现各种客户端。 参考文档 英文原文:Linux Netcat command – The swiss army knife of networking参与翻译(5人): |