socat的安装与使用
socat,一个多功能的网络工具,名字来源于SOcket CAT,是netcat的增强版,也就是netcat++(扩展了设计,并有新的实现)。
# debian/ubuntu apt-get install socat# centos/redhat yum install -y socat
1.socat简介
socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N
倍加强版,socat的官方网站:http://www.dest-unreach.org/socat/ 。
socat是一个两个独立数据通道之间的双向数据传输的继电器。这些数据通道包含文件、管道、设备(终端或调制解调器等)、插座(Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4客户端或代理CONNECT。
Socat支持广播和多播、抽象Unix sockets、Linux tun/tap、GNU readline 和 PTY。它提供了分叉、记录和进程间通信的不同模式。多个选项可用于调整socat和其渠道,Socat可以作为TCP中继(一次性或守护进程),作为一个守护进程基于socksifier,作为一个shell Unix套接字接口,作为IP6的继电器,或面向TCP的程序重定向到一个串行线。
socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket等。
2.socat的安装
2.1下载软件包
下载socat源代码包:http://www.dest-unreach.org/socat/download/ 。
2.2 编译安装
把下载的软件包解压后按照传统的方式编译安装:
./configure
make
make install
具体的细节可以参考安装文档 README 。 在编译的过程中可能遇到如下错误:
解决方法有两种:
第一种是禁用fips,使用如下命令配置:
./configure --disable-fips
第二种是安装fips,首先到网站http://www.openssl.org/source/ 下载openssl-fips安装包,然后解压安装:
./config
make
make install
3.socat的使用
3.1 工作机理
socat的运行有4个阶段:
3.1.1 初始化
解析命令行以及初始化日志系统。
3.1.2 打开连接
先打开第一个连接,再打开第二个连接。这个单步执行的。 如果第一个连
接失败,则会直接退出。
3.1.3 数据转发
谁有数据就转发到另外一个连接上, read/write互换。
3.1.4 关闭
其中一个连接掉开,执行处理另外一个连接。
3.2 地址类型
参数由2部分组成,第一个连接和第二个连接,最简单的用法就是 socat - - 其效果就是输入什么,回显什么其用法主要在于地址如何描述, 下面介绍几个常用的。
3.2.1 TCP
TCP:<host>:<port> 目标机器host对应端口portTCP-LISTEN:<port> 本机监听端口。
3.2.2 UDP
UDP:<host>:<port> 目标机器host对应端口portUDP-LISTEN:<port> 本机监听端口。
3.2.3 OPENSSL
需要一个证书,否则会失败提示: 2012/04/06 11:29:11 socat[1614] E SSL_connect():
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failureOPENSSL:<host>:<port> 目标机器host
对应端口
portOPENSSL-LISTEN:<port> 本机监听端口。
3.2.4 TUN
TUN[:<if-addr>/<bits>] 建立vpn,双方都需要root权限。
3.3 典型使用
3.3.1 连接目标
socat - tcp:192.168.1.18:80
这个命令等同于 nc 192.168.1.18 80。 socat里面,必须有两个流,所以第一个参数-代表标准的输入输出,第二个流连接到192.168.1.18的80端口。
socat -d -d READLINE,history=$HOME/.http_history TCP4:www.qq.com:80
这个例子支持历史记录查询,类似于bash的历史记录。
3.3.2 反向连接
再看一个反向telnet的例子: on server:
socat tcp-listen:23 exec:cmd,pty,stderr
这个命名把cmd绑定到端口23,同时把cmd的Stderr复位向到stdout。 on client:
socat readline tcp:server:23
连接到服务器的23端口,即可获得一个cmd shell。readline是gnu的命令行编辑器,具有历史功能。
3.3.3 向远处端口发数据
echo “test” | socat – tcp-connect:127.0.0.1:12345
3.3.4 本地开启端口
socat tcp-l:7777,reuseaddr,fork system:bash
同nc -l -p 7777 -e bash。
3.3.5 执行bash的完美用法
在目标上
socat tcp-l:8888 system:bash,pty,stderr
本地
socat readline tcp:$target:8888
用readline替代-,就能支持历史功能了。在这个模式下的客户端有本地一样的效果
3.3.6 文件传递
再看文件传递的例子。nc也经常用来传递文件,但是nc有一个缺点,就是不知道文件什么时候传完了,一般要用Ctrl+c来终止,或者估计一个时间,用-w参数来让他自动终止。用socat就不用这么麻烦了:
on host 1:
socat -u open:myfile.exe,binary tcp-listen:999
on host 2:
socat -u tcp:host1:999 open:myfile.exe,create,binary
这个命令把文件myfile.exe用二进制的方式,从host 1 传到host 2。-u 表示数据单向流动,从第一个参数到第二个参数,-U表示从第二个到第一个。文件传完了,自动退出。
3.3.7 转发
3.3.7.1 本地端口转向远程主机
socat TCP4-LISTEN:8888 TCP4:www.qq.com:80
如果需要使用并发连接,则加一个fork,如下:
socat TCP4-LISTEN:8888,fork TCP4:www.qq.com:80
本地监听8888端口,来自8888的连接重定向到目标www.qq.com:80
3.3.7.2 端口映射
再来一个大家喜欢用的例子。在一个NAT环境,如何从外部连接到内部的一个端口呢?只要能够在内部运行socat就可以了。
外部:
socat tcp-listen:1234 tcp-listen:3389
内部:
socat tcp:outerhost:1234 tcp:192.168.12.34:3389
这样,你外部机器上的3389就映射在内部网192.168.12.34的3389端口上。
3.3.7.3 VPN
服务端
socat -d -d TCP-LISTEN:11443,reuseaddr TUN:192.168.255.1/24,up
客户端
socat TCP:1.2.3.4:11443 TUN:192.168.255.2/24,up
3.3.8 重定向
socat TCP4-LISTEN:80,reuseaddr,fork TCP4:192.168.123.12:8080
TCP4-LISTEN:在本地建立的是一个TCP ipv4协议的监听端口; reuseaddr:绑定本地一个端口;
fork:设定多链接模式,即当一个链接被建立后,自动复制一个同样的端口再进行监听
socat启动监听模式会在前端占用一个shell,因此需使其在后台执行。
socat -d -d tcp4-listen:8900,reuseaddr,fork tcp4:10.5.5.10:3389 # 端口转发
或者
socat -d -d -lf /var/log/socat.log TCP4-LISTEN:15000,reuseaddr,fork,su=nobody TCP4:static.5iops.com:15000
“-d -d -lf /var/log/socat.log”是参数,前面两个连续的-d -d代表调试信息的输出级别,-lf则指定输出信息的保存文件。
“TCP4-LISTEN:15000,reuseaddr,fork,su=nobody”是一号地址,代表在15000端口上进行TCP4协议的监听,复用绑定的IP,每次有连接到来就fork复制一个进程进行处理,同时将执行用户设置为nobody用户。
“TCP4:static.5iops.com:15000″是二号地址,代表将socat监听到的任何请求,转发到static.5iops.com:15000上去。
3.3.9 读写分流
socat还具有一个独特的读写分流功能,比如:
socat open:read.txt!!open:write.txt,create,append tcp-listen:80,reuseaddr,fork
这个命令实现一个假的web server,客户端连过来之后,就把read.txt里面的内容发过去,同时把客户的数据保存到write.txt里面。”!!”符号用户合并读写流,前面的用于读,后面的用于写。
3.3.10 通过openssl来加密传输过程
3.3.10.1
证书生成
FILENAME=server openssl genrsa -out $FILENAME.key 1024openssl req -new -key $FILENAME.key -x509 -days 3653 -out
$FILENAME.crtcat
$FILENAME.key
$FILENAME.crt >$FILENAME.pem
在当前目录下生成 server.pem server.crt
3.3.10.2 使用
在服务端
socat openssl-listen:4433,reuseaddr,cert=srv.pem,cafile=srv.crt system:bash,pty,stderr
在本地
socat readline openssl:localhost:4433,cert=srv.pem,cafile=srv.crt
socat的安装与使用相关推荐
- linux socat rpm,RabbitMQ系列(三)RabbitMQ Server的安装(基于Linux RPM)
提示: 在Fedora和RHEL仓库中包含了RabbitMQ,但这些版本往往是滞后的且不再被支持,我们建议你使用PackageCloud或者Bintray的Yum仓库进行安装: RabbitMQ RP ...
- RabbitMQ 安装和简单测试
2019独角兽企业重金招聘Python工程师标准>>> 最近好多项目都有需要是用MQ的场景,以下是在安装过程记录的一些知识点,安装MQ需要先安装依赖环境,erlang和socat. ...
- 使用KubeKey安装K8S集群
KubeKey [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9a5Ji2nE-1625797190511)(https://github.com/kubesphere ...
- linux udp 端口映射,Linux下的UDP/TCP端口映射(netcat and socat)
原文链接: http://www.wenquan.name/?p=1158 说起来有点土,事到如今才第一次用socat. 不过今天看了一眼,netcat(nc)这东西ms已经N年没有人维护了.最先有个 ...
- 官网英文版学习——RabbitMQ学习笔记(二)RabbitMQ安装
一.安装RabbitMQ的依赖Erlang 要进行RabbitMQ学习,首先需要进行RabbitMQ服务的安装,安装我们可以根据官网指导进行http://www.rabbitmq.com/downlo ...
- ubuntu安装docker以及dockerfly
1. 安装docker. # apt-get install docker.io 2.启动docker. # service docker run 3. 获取Dockerfly镜像. # do ...
- CentOS7 安装RabbitMQ 亲测(编写中,有大神请帮忙指点下文中遇到的问题,谢谢)...
为什么80%的码农都做不了架构师?>>> CentOS7 安装RabbitMQ 亲测 我按照别的博文,使用 yum install erlang 命令安装了erlang,然后再 ...
- RabbitMQ 安装教程(CentOS版)
RabbitMQ 安装教程(CentOS版) 0.环境准备 1.准备一个干净的虚拟机Linux镜像(或者Linux服务器) 2.安装 lrzsz (文件拉取工具),方便上传本地文件,安装命令:yum ...
- Rabbitmq安装以及入门
8 RabbitMQ入门及安装 1 概述 官网:https://www.rabbitmq.com/ 什么是RabbitMQ,官方给出来这样的解释: RabbitMQ is the most widel ...
最新文章
- mysql中tonumber函数_Oracle数据库之oracle的TO_NUMBER函数
- 子域名枚举工具Sublist3r
- echarts 在两点之间画一条线_凭什么?辛辛苦苦画了三个小时,却换来一句“撕了重画”...
- Java面试题:给定一个整数,按10进制来看,计算里面包含多少个0
- boost::log::sinks::text_ostream_backend用法的测试程序
- jquery如何获取checkbox,并判断是否选中
- Java是世界上最好的语言!
- 【Java从0到架构师】项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus
- VB:将数字转换为大写中文
- 3.3 基于GMM-HMM的语音识别
- 21.5 英寸 iMac 供应减少:是新品发布的节奏吗?
- java windows 中文乱码问题_JAVA中文乱码之解决方案
- incaseformat病毒分析
- ArcGIS实验教程——实验三十:地图注记与标注(标注转注记)用法案例详解
- ABP官方文档翻译 8.1 通知系统
- DirectX11,DirectX12,OpenGL,Vulkan学习资料
- php汉字大写金额,php 数字金额转中文汉字大写金额
- SpringBoot注解整理历史笔记
- iOS逆向开发,突破微信强制升级,让低版本的iPhone也能正常使用
- 青云服务器控制台系统,青云QingCloud控制台小程序上线
热门文章
- 什么是CUDA与CUDNN
- Java虚拟机参数配置
- html语音输入功能讯飞,win10系统利用讯飞语音输入法实现电脑语音输入的方案介绍...
- 我是如何放弃投行回归技术的
- 基于Java+SSM+MySQL的高校就业创业信息管理系统
- [error] Keil:..\SYSTEM\usart\usart.c(38): error: #260-D: explicit type is missing (“int“ assumed)
- 【Linux】对于make/Makefile的编写
- Java:抽象成类找对象
- [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
- 7个你绝对没用过的超强搜索引擎