瑞士军刀NC

nc是网络调试的一款强大的工具,是用于处理TCP或UDP数据的通用实用程序,是黑客界的瑞士军刀 看看的常规用法: > tldr nc Netcat is a versatile utility for working with TCP or UDP data. More information: https://nmap.org/ncat - Listen on a specified port and print any data received: nc -l {{port}} - Connect to a certain port (you can then write to this port): nc {{ip_address}} {{port}} - Set a timeout: nc -w {{timeout_in_seconds}} {{ipaddress}} {{port}} - Serve a file: nc -l {{port}} < {{file}} - Receive a file: nc {{ip_address}} {{port}} > {{file}} - Server stay up after client detach: nc -k -l {{port}} - Client stay up after EOF: nc -q {{timeout}} {{ip_address}} - Scan the open ports of a specified host: nc -v -z {{ip_address}} {{port}} - Act as proxy and forward data from a local TCP port to the given remote host: nc -l {{local_port}} | nc {{hostname}} {{remote_port}} nc对于网络的操作可以分为接受和发送这两种操作 区别是参数 -l, -l 是监听端口的参数,有这个参数,说明启动的是一个服务端 其他没有-l的操作,则是向其他网络端发起网络操作,是一个客户端 两个终端实时通讯 如: 开一个服务端 nc -l 1234 # 打开本地的1234端口,可以通过这个接口接受数据 开一个客户端,向上面这个服务端传数据 nc localhost 1234 然后,你在客户端里面输入的任何内容都会在跑服务端这段print出来。 服务端保存接受到的数据成文件 之前的服务端print的内容是标准输出到终端窗口,我们也可以改一下输出到一个文件 touch log.txt | nc -l 1234 > server.txt # 所有的接受到的数据会保存到server.txt 我们刚才上面是用 nc localhost 1234来向服务端发数据,其实也可以直接用telnet telnet localhost 1234 # 所有telnet命令下的敲入的数据都会被传到服务器,直到telnet客户端断开连接 传输文件 也可以直接向服务端传输文件 echo 'this is client' > client.txt nc localhost 1234 < client.txt # client.txt的重定向到nc,然后传给服务端,server.txt的内容就变成client.txt的内容 那么如果要从服务端下载内容怎么做? echo 'this is server' > server.txt nc -l 1234 < server.txt # 把server.txt重定向给nc,作为服务内容 nc localhost 1234 # server.txt的内容会在客户端打印出来 nc -n localhost 1234 > client.txt # server的内容会保持到client.txt 如果我们平时想临时搭建一个服务在两台机器间传输文件,用nc是非常方便的,那么这种传输的其他用途,大家可以发挥自己的想象力 传输整个目录 传输目录要借助压缩工具,比如tar,把目录压缩成一个文件然后通过管道流到nc tar -cvf - . | nc -l 1234 # 压缩当前目录传输出去 nc localhost 1234 > server.tar # 接受到的目录压缩包保存位server.tar nc localhost 1234 | tar -xvf - # 直接解压压缩到的目录到当前目录 加密传输 mcrypt –flush –bare -F -q -m ecb < server.txt | nc -l 1234 nc localhost 1234 | mcrypt –flush –bare -F -q -d -m ecb > server.txt 通过mcrypt加密后重定向给nc,客户端收到后,同样的解密,两端需要数同样的加密密码 反向代理 上面我们知道,可以通过命令单方面向服务端发起数据,反向代理需要我们服务端自动响应,所以我们借助命令管道来实现 mkfifo reply # 创建命名管道 replay # reply重定向给nc server, # nc server又通过管道把接收到的内容交给另外一个nc客户端 # 然后这个客户端接收到内容重定向给命名管道replay, # 由于reply已经重定向给server,所以就能接收到client请求的结果 nc -k -l 1234 < reply | nc localhost 8080 > reply 打开浏览器输入http://localhost:1234,就能看到localhost:8080的内容 结束后,记得把执行** rm reply** 把命名管道删除掉 克隆一个linux系统 借助dd来读取磁盘的原始数据重定向给server dd if=/dev/sda | nc -l 1234 # 已有机器,假设系统装在设备sda上 nc -n {ip from linux device} 1234 | dd of=/dev/sda 远程执行shell(代替ssh) 有时候,我们没有安装ssh的时候,也可以用nc来帮我们对服务器做远程的shell操作,原理也是借助命名管道来实现 rm -f /tmp/f; mkfifo /tmp/f # 先删除可能以前遗留的命名管道f(应该起一个独特的名字) # 把命名管道的内容导入到给shell, # shell启动交互模式,执行的结果错误也重新通过管道写到标准输出,标准输出又通过管道交给nc # 然后nc接收到输入命令又重定向给/tmp/f命名管道,形成闭环 cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f 在客户端输入,就会出现一个可交互的命令终端 nc localhost 1234 $ ls server.txt ... 扫描端口 nc -zv localhost 20-80 nc: connect to localhost port 20 (tcp) failed: Connection refused nc: connect to localhost port 21 (tcp) failed: Connection refused Connection to localhost 22 port [tcp/ssh] succeeded! nc: connect to localhost port 23 (tcp) failed: Connection refused 好了 最后想说,技术无知,人有分别,请大家管好自己的键(欲)盘(望). 扩展阅读: 新手该如何选择云服务器 个人玩家和中小企业云服务器选择对比

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):