socat安装

socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket等。
socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N
倍加强版,socat的官方网站:http://www.dest-unreach.org/socat/ 。

安装:http://www.dest-unreach.org/socat/download/

安装步骤:

1.解压
2.   ./configure 
3.   make && make install
    编译时出现:
    gcc -O -D_GNU_SOURCE -Wall -Wno-parentheses  -DHAVE_CONFIG_H -I.  -I.   -c -o nestlex.o nestlex.c
nestlex.c:14:7: error: unknown type name ‘ptrdiff_t’
       ptrdiff_t *len, 后面还有很多

解决办法:
vim nestlex.c 添加在头部 #include "stddef.h" 保存
在编译

如果出现:    

这里写图片描述

解决方法有两种:
第一种是禁用fips,使用如下命令配置:
./configure –disable-fips
第二种是安装fips,首先到网站http://www.openssl.org/source/ 下载openssl-fips安装包,然后解压安装:
./configure
make && make install

socat使用:

    工作原理:
    四个阶段:
        初始化:解析命令行以及初始化日志系统
        打开连接:先打开第一个连接,再打开第二个连接,是单步执行的,第一个失败,直接退出
        数据转发:谁有数据就转发到另外一个连接上,read/write互换
        关闭:其中一个连接掉开,执行处理另外一个连接关闭


3.2 地址类型 
参数由2部分组成,第一个连接和第二个连接,最简单的用法就是 socat - - 其效果就是输入什么,回显什么其用法主要在于地址如何描述, 下面介绍几个常用的。 
3.2.1 TCP 
TCP:: 目标机器host对应端口portTCP-LISTEN: 本机监听端口。 
3.2.2 UDP 
UDP:: 目标机器host对应端口portUDP-LISTEN: 本机监听端口。 
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
对应端口
portOPENSSL-LISTEN: 本机监听端口。 
3.2.4 TUN 
TUN[:<if-addr>/] 建立,双方都需要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:8888readline替代-,就能支持历史功能了。在这个模式下的客户端有本地一样的效果 

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.343389端口上。 

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 

apt-get install socat nohup

nohup socat TCP4-LISTEN:2333,reuseaddr,fork TCP4:233.233.233.233:6666 >> /root/socat.log 2>&1 &
nohup socat UDP4-LISTEN:2333,reuseaddr,fork UDP4:233.233.233.233:6666 >> /root/socat.log 2>&1 &

其中 TCP4/UDP4-LISTEN: 处填写转发服务器(即本机)的端口,TCP4/UDP4: 处填写被转发服务器的 IP 和对应被转发端口(即 SS 服务器)

设置完成后把 SS 的客户端的 服务器地址 和 端口 改为国内转发服务器对应的 IP 和端口即可

开机自启:
chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local

你可能感兴趣的:(Linux,工具,其他)