SOCAT详解
概述
socat,是linux下的⼀个⼯具,其功能与有“瑞⼠军⼑”之称的netcat类似,不过据说可以看做netcat的加强版。的确如此,它有⼀些netcat所不具备却⼜很有需求的功能,例如ssl连接这种。nc可能是因为⽐较久没有维护,确实显得有些陈旧了。
安装
Ubuntu上可以直接sudo apt-get install socat,其他发⾏版没试过。
合同怎么写基本语法
1
socat [options] address address
其中这2个address就是关键了,如果要解释的话,address就类似于⼀个⽂件描述符,socat所做的⼯作就是在2个address指定的描述符间建⽴⼀个pipe⽤于发送和接收数据。
那么address的描述就是socat的精髓所在了,⼏个常⽤的描述⽅式如下:
-,STDIN,STDOUT :表⽰标准输⼊输出,可以就⽤⼀个横杠代替,这个就不⽤多说了吧….
/var/log/syslog : 也可以是任意路径,如果是相对路径要使⽤./,打开⼀个⽂件作为数据流。
TCP:: : 建⽴⼀个TCP连接作为数据流,TCP也可以替换为UDP
TCP-LISTEN: : 建⽴TCP监听端⼝,TCP也可以替换为UDP
EXEC: : 执⾏⼀个程序作为数据流。
以上规则中前⾯的TCP等都可以⼩写。
在这些描述后可以附加⼀些选项,⽤逗号隔开,如fork,reuaddr,stdin,stdout,ctty等。
socat当cat
直接回显
1
socat - -
cat⽂件宫崎骏的动画电影
1
socat - /home/ur/chuck
写⽂件
1
echo “hello” | socat - /home/ur/chuck
socat当netcat
连接远程端⼝
1
2
点烟nc localhost 80
socat - TCP:localhost:80
监听端⼝
1
第三书包网小说2
nc -lp localhost 700
怎样腌糖醋蒜socat TCP-LISTEN:700 -
正向shell
1
2
nc -lp localhost 700 -e /bin/bash
socat TCP-LISTEN:700 EXEC:/bin/bash
反弹shell
1
2
nc localhost 700 -e /bin/bash
socat tcp-connect:localhost:700 exec:‘bash -li’,pty,stderr,tsid,sigint,sane
代理与转发
将本地80端⼝转发到远程的80端⼝
1
socat TCP-LISTEN:80,fork TCP:www.domain:80
其他
其实从这⾥才是重点
SSL连接
SSL服务器
1
socat OPENSSL-LISTEN:443,cert=/cert.pem -如何用烤箱烤红薯
需要⾸先⽣成证书⽂件
SSL客户端
1
socat - OPENSSL:localhost:443
fork服务器
接下来这个例⼦,就是我认识socat的原因,可以将⼀个使⽤标准输⼊输出的单进程程序变为⼀个使⽤fork⽅法的多进程服务,⾮常⽅便。
1
socat TCP-LISTEN:1234,reuaddr,fork EXEC:./helloworld
古埃及金字塔之谜不同设备的通信
将U盘进⾏⽹络共享
1
socat -d -d /dev/ttyUSB1,raw,nonblock,ignoreeof,cr,echo=0 TCP4-LISTEN:5555,reuaddr
-d -d 指的是调试信息的级别
将终端转发到COM1
1
创新课程socat READLINE,history=$HOME/.cmd_history /dev/ttyS0,raw,echo=0,crnl
socat还有个readbyte的option,这样就可以当dd⽤了。
⼩结
因为在Linux/UNIX中,⼀切都是⽂件,⽆论是socket还是其他设备。所以从理论上来说,⼀切能够在⽂件层级访问的内容都可以成为socat的数据流的来源,2个address可以任意发挥,能够做到的事情还有很多。特别是其fork的功能,确实是netcat所不能⽐的。
参考⽂献
借鉴的⼏篇博⽂:
Some Uful Socat Commands
Socat: A very powerful networking tool
Socat Examples
其他内容,可以参考socat man page