socat网络工具

socat网络工具

2023年7月23日发(作者:)

socat⽹络⼯具socat简介socat是⼀个多功能的⽹络⼯具,名字来由是” Socket CAT”,可以看作是netcat的N倍加强版,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等socat [参数] <地址1> <地址2>使⽤ socat 需要提供两个地址,然后 socat 做的事情就是把这两个地址的数据流串起来,把第左边地址的输出数据传给右边,同时⼜把右边输出的数据传到左边。最简单的地址就是⼀个减号“-”,代表标准输⼊输出,⽽在命令⾏输⼊:socat - - # 把标准输⼊和标准输出对接,输⼊什么显⽰什么就会对接标准输⼊和标准输出,你键盘敲什么屏幕上就显⽰什么,类似⽆参数的 cat 命令。除了减号地址外,socat 还⽀持:TCP, TCP-LISTEN, UDP, UDP-LISTEN, OPEN, EXEC, SOCKS, PROXY 等多种地址,⽤于端⼝监听、链接,⽂件和进程读写,代理桥接等等。因此使⽤ socat 其实就是学习各类地址的定义及搭配⽅法⽹络测试这个类似 nc 的连通性测试,两台主机到底⽹络能否联通:socat - TCP-LISTEN:8080 # 终端1 上启动 server 监听 TCPsocat - TCP:localhost:8080 # 终端2 上启动 client 链接 TCP在终端 1 上输⼊第⼀⾏命令作为服务端,并在终端 2 上输⼊第⼆⾏命令作为客户端去链接。联通后在终端2上随便输⼊点什么,就能显⽰在终端1上,反之亦然,因为两条命令都是把标准输⼊输出和⽹络串起来,因此把两个地址交换⼀下也是等价的:socat TCP-LISTEN:8080 - # 终端1 上启动 server 监听 TCPsocat TCP:localhost:8080 - # 终端2 上启动 client 链接 TCP因为 socat 就是把左右两个地址的输⼊输出接在⼀起,因此颠倒左右两个地址影响不⼤,除⾮前⾯指明 -u 或者 -U 显⽰指明数据“从左到右”还是“从右到左”。同 netcat ⼀样,如果客户端结束的话,服务端也会结束,但是 socat 还可以加额外参数:socat - TCP-LISTEN:8080,fork,reuseaddr # 终端1 上启动 serversocat - TCP:localhost:8080 # 终端2 上启动 client服务端在 TCP-LISTEN 地址后⾯加了 fork 的参数后,就能同时应答多个链接过来的客户端,每个客户端会 fork ⼀个进程出来进⾏通信,加上 reuseaddr 可以防⽌链接没断开玩⽆法监听的问题。刚才也说了使⽤ socat 主要就是学习描述各种地址,那么想测试 UDP 的话修改⼀下就⾏:socat - UDP-LISTEN:8080 # 终端1 上启动 server 监听 UDPsocat - UDP:localhost:8080 # 终端2 上启动 client 链接 UDP端⼝转发、映射在主机上监听⼀个 8080 端⼝,将 8080 端⼝所有流量转发给远程机器的 80 端⼝:socat TCP-LISTEN:8080,fork,reuseaddr TCP:192.168.1.3:80那么连到这台机器上 8080 端⼝的所有链接,相当于链接了 192.168.1.3 这台机器的 80 端⼝,命令中交换左右两个地址⼀样是等价的。这⾥ socat ⽐ nc 强的地⽅就体现出来了,nc 做转发时只能转发 1 次,第⼀条链接 accept 并且关闭以后 nc 就退出了,⽆法接受新链接,因此 nc 只适合单次使⽤。⽽ socat 加上 fork 以后,每次 accept ⼀个链接都会 fork 出⼀份来不影响接收其他的新连接,这样 socat 就可以当⼀个端⼝转发服务,⼀直启动在那⾥。还可以⽤ supervisor 托管起来,开机⾃动启动。还可以⽤这个功能暴露⼀些 127.0.0.1 的端⼝出来供外⾯访问,⽐起 nc 的临时救急使⽤⼀下的场景,socat 是可以当⼀个服务长期运⾏的。在⼀个NAT环境,从外部连接到内部的⼀个端⼝外部:socat tcp-listen:1234 tcp-listen:3389内部:socat tcp:outerhost:1234 tcp:192.168.12.34:3389这样,你外部机器上的3389就映射在内部⽹192.168.12.34的3389端⼝上。远程登录、vpn地址除了 TCP 和 TCP-LISTEN 外,另外⼀个重要的地址类型就是 EXEC 可以执⾏程序并且把输⼊输出和另外⼀个地址串起来,⽐如服务端:socat TCP-LISTEN:8080,fork,reuseaddr EXEC:/usr/bin/bash # 服务端提供 shellsocat - TCP:localhost:8080 # 客户端登录完善⼀点可以加些参数:socat TCP-LISTEN:8080,fork,reuseaddr EXEC:/usr/bin/bash,pty,stderr # 服务端socat file:`tty`,raw,echo=0 TCP:localhost:8080 # 客户端这样可以把 bash 的标准错误重定向给标准输出,并且⽤终端模式运⾏。客户端可以像刚才那样登录,但是还可以更⾼级点,⽤ tty 的⽅式访问,这样基本就得到了⼀个全功能的交互式终端了,可以在⾥⾯运⾏ vim, emacs 之类的程序。更⾼级⼀点,使⽤ root 运⾏:socat TCP-LISTEN:23,reuseaddr,fork,crlf exec:/bin/login,pty,setsid,setpgid,stderr,ctty相当于在 23 端⼝启动了⼀个 telnetd 的服务,可以⽤ telnet 客户端来链接。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

⽹页服务⾸先编写⼀个脚本:#! /bin/bashecho -e -n "HTTP/1.0 200rn"echo -e -n "Content-Type:text/htmlrn"echo -e -n "rn"echo ""echo "now is $(date)"echo ""这⾥我们⽤ SYSTEM 地址类型代替原来的 EXEC 执⾏命令,因为可以后⾯写 shell 命令:socat TCP-LISTEN:8080,fork,reuseaddr SYSTEM:"bash "相当于每次请求的时候,socat 都会 fork ⼀个进程出来然后执⾏后⾯的命令,启动上⾯的脚本程序,并且将脚本的标准输⼊输出重定向给⽹络链接。相当于原始的 cgi 程序了,我们可以⽤ shell 直接完成⼀个 cgi 程序并由 socat 提供 cgi 服务,偶然需要暴露⼀些服务器信息的话,可以这样弄⼀下,返回的 html ⾥搞⼀个⾃动刷新,然后打开浏览器,实时监控服务器的情况。⽂件传输临时需要传输下⽂件,⽆需 scp:socat -u TCP-LISTEN:8080 open:,create # 服务端接收⽂件socat -u open: TCP:localhost:8080 # 客户端发送⽂件这⾥⽤了 -u 参数,意思是数据从左边的地址单向传输到右边的地址,⼤写 -U 的话是从右边单向传输到左边。透明代理第⼀句是⽤于 socks 代理的,第⼆句⽤于 HTTP 代理:socat TCP-LISTEN:<本地端⼝>,reuseaddr,fork SOCKS:<代理服务器IP>:<远程地址>:<远程端⼝>,socksport=<代理服务器端⼝>socat TCP-LISTEN:<本地端⼝>,reuseaddr,fork PROXY:<代理服务器IP>:<远程地址>:<远程端⼝>,proxyport=<代理服务器端⼝>他们都可以把本地端⼝的请求转换成使⽤代理服务器访问的请求,⽐如:socat TCP-LISTEN:1234,fork SOCKS4A:127.0.0.1::80,socksport=5678那么链接本地的 1234 端⼝,相当于通过代理服务器 127.0.0.1:5678 去链接 的 80 端⼝了,这⾥⽤了 SOCKS4A ,后⾯ A 的意思是让代理服务器去解析域名。其他⽤途还有很多⾼级⽤法,⽐如⽤ socat ⼀键开启 vpn ⽹络,使⽤ socat 将 ssl 流量转化为裸的 tcp 流量等等,可以参考官⽅⽂档。不难发现,上⾯⼏个⽤法都⽐原始的 nc 要强很多,但是 nc 更⼩巧⼀些,也更容易获得:不管是路由器上,还是 busybox 的内置命令中,还是 nmap ⼯具包,都有 nc 的存在。所以很多时候条件限制可能你只有 netcat 可以使⽤,那么就⽤ netcat,其他时候看你哪个⽤的更熟练⼀些就⽤哪个。不管端⼝转发还是传⽂件,还是透明代理,每项其实都有专业的软件可以⽤,但 netcat/socat ⽤熟了以后,他们的灵活度⾮常⼤,能够搭配组合出千变万化的功能来,在你只是偶尔需要处理某件事情,⼜不想或者⽆法安装专⽤软件的情况下,完全可以使⽤这两个⼯具完成很多任务。所以,socat/netcat还有tcpdump⼀起,可以说是最值得掌握的三条⽹络命令。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

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690104690a306205.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信