- 1 老版瑞士军刀:netcat(nc)
- 部分参数:
- 示例:
- 2 新版瑞士军刀:socat
- 基本命令:
- 示例:
参考: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 # 客户端登录
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)