天天热资讯!瑞士军刀:netcat(nc)、socat_瑞士军刀nc

2022-09-20 09:34:25来源:互联网  


(相关资料图)

文章目录

1 老版瑞士军刀:netcat(nc)部分参数:示例: 2 新版瑞士军刀:socat基本命令:示例:

1 老版瑞士军刀:netcat(nc)

参考:https://zhuanlan.zhihu.com/p/83959309

netcat 主要有 GNU版 和 OpenBSD版,一般软连接为nc
查看方法:readlink -f $(which nc)
/bin/nc.traditional: 默认 GNU 基础版本,一般系统自带。
/bin/nc.openbsd: openbsd 版本,强大很多。
nmap 自带的一个更好的 netcat 分支,比 openbsd 版本还强

部分参数:

-N 传输完就退出
-n 不进行dns解析
-l 侦听
-p 端口号
-u 代表udp协议
-z 代表不发送数据,仅连接
-vv 显示更多信息 -v、-vv、-vvv

示例:

# http端口测试(tcp 80):$ nc -vz 192.168.32.13 80     # 类别telnet 192.168.32.13 80# tcp端口测试:$ nc -l -p 8080         # 服务器端侦听8080端口,默认tcp协议$ nc 192.168.1.2 8080   # 连接服务器(192.168.1.2)的8080端口# udp端口测试:$ nc -u -l -p 8080        # 服务器端侦听8080端口$ nc -u 192.168.1.2 8080# 传输目录:$ nc -l -p 3333 | tar -x ./                  # 服务器端侦听3333端口。收到tar包数据流,并解包到当前目录$ tar -cO ./2018 | nc -N 192.168.32.13 3333  # 创建tar包,并输出到标准输出,再通过管道传输到服务器(192.168.32.13)的3333端口。  说明:-O 输出到标准输出。## 或压缩后传输:$ nc -l -p 3333 | tar -zx ./                 # 服务器端侦听3333端口。收到tar.gz包数据流,并解压解包到当前目录$ tar -zcO ./2018 | nc -N 192.168.32.13 3333 # 创建tar.gz包,并输出到标准输出,再通过管道传输到服务器(192.168.32.13)的3333端口。# 传输目录为tar文件:$ nc -l -p 3333 > xx.tar.gz                  # 服务器端侦听3333端口。收到tar.gz包数据流保存到xx.tar.gz$ tar -zcO ./2018 | nc -N 192.168.32.13 3333 # 创建tar.gz包,并输出到标准输出,再通过管道传输到服务器3333端口# 传输文件:$ nc -l -p 3333 > xx.tar.gz                  # 服务器端侦听3333端口。收到tar.gz包数据流保存到xx.tar.gz$ nc -N 192.168.32.13 3333  < xx.tar.gz      # 将文件xx.tar.gz输出到服务器3333端口# 网速吞吐量测试:$ nc -vv -n -l -p 3333 > /dev/null                               # 服务器端侦听3333端口。将收到的数据丢弃$ dd if=/dev/zero bs=1MB count=100 | nc -N -n 192.168.32.13 3333 # 通过dd输入 100x1MB 数据到服务器3333端口## 或方法二即时显示网速$ nc -l -p 3333 | pv         # 需要安装:sudo apt install pv$ nc 192.168.32.13 3333 < /dev/zero# 连接bash shell:$ mkfifo /tmp/f                                               # 新建管道文件$ cat /tmp/f | /bin/bash 2>&1 | nc -v -n -l -p 3333 > /tmp/f  # 这个命令要从nc命令处开始理解,首先nc收到远程传来的内容(命令),将其输出到管道,然后将管道里的内容cat到bash,然后bash执行完成后又输出到stdout,stdout又会被输出到远程的屏幕进行回显$ nc 192.168.32.13 3333## 用完注意将 /tmp/f 这个 fifo 管道文件删除。

2 新版瑞士军刀:socat

参考:https://zhuanlan.zhihu.com/p/347722248

基本命令:

socat [参数] <地址1> <地址2>

[参数]请参考help

使用 socat 需要提供两个地址,然后 socat 做的事情就是把这两个地址的数据流串起来,把第左边地址的输出数据传给右边,同时又把右边输出的数据传到左边。最简单的地址就是一个减号“-”,代表标准输入输出,例如:

$ socat - -          # 把标准输入和标准输出对接,输入什么显示什么

示例:

# 网络测试:$ socat - TCP-LISTEN:8080          # 启动 server 监听 TCP$ socat - TCP:192.168.32.13:8080   # 连接server 8080## 或:$ socat TCP-LISTEN:8080 -$ socat TCP:192.168.32.13:8080 -## 说明:上面两种方法效果一样,因为就是把左右两个地址的输入输出接在一起,除非前面指明 -u 或者 -U 显示指明数据“从左到右”还是“从右到左”。# 也可以用udp协议:$ socat - UDP-LISTEN:8080               # 终端1 上启动 server 监听 UDP$ socat - UDP:192.168.32.13:8080        # 终端2 上启动 client 链接 UDP# 一般如果客户端结束结束会话,服务端也会结束,但加额外参数可以避免:$ socat - TCP-LISTEN:8080,fork,reuseaddr      # 终端1 上启动 server$ socat - TCP:192.168.32.13:8080              # 终端2 上启动 client## 注释:## fork      能同时应答多个链接过来的客户端,每个客户端会 fork 一个进程出来进行通信## reuseaddr 地址重用,防止链接没断开玩无法监听的问题# 端口转发1:$ socat TCP-LISTEN:8080,fork,reuseaddr  TCP:www.baidu.com:443  # 转发本地端口的数据到远程www.baidu.com:443# 端口转发2:$ socat TCP-LISTEN:8080,fork,reuseaddr  EXEC:/usr/bin/bash    # 服务端提供 shell$ socat - TCP:192.168.32.13:8080                              # 客户端登录

相关阅读

精彩推荐

相关词

推荐阅读