socat 初窥门径

socat 初窥门径,第1张

如果您的工具箱需要高级一款高级系统管理工具,那 socat 就是其中一个。 socat 允许从一个位置到另一位置的双向数据传输, socat 实用程序是用于在两个独立数据通道之间进行双向数据传输的中继。

socat可以连接许多不同类型的通道,包括:

socat 具被视为 netcat 的高级版本。 它们执行类似的 *** 作,但是 socat 具有更多森派橡其他功能,例如允许多个客户端在端口上侦听或重用连接。

有许多有效使用 socat 的方法。 这里有一些例子:

socat 的语法非常简单:

必须提供源地址和目标地址才能正常工作。 地址的语法为:

使用 socat 进行各种连接的一些基本示例:

在这种情况下, socat 在 STDIO(-)和名为 www.example.com 主机 8080 端口建立的 TCP4 连接之间进行数据传输。

侦听端口 8081,接受连接并将连接转发到远程主机. 192.168.1.10 上的 8080 端口。

侦听 3307 端口,接受连接并将连接转发到远程主机上的 Unix 套接字。

通过代理服务器访问目标主机,并在本机进行端口监听。把发到本机监听端口的数据转发到目标主机:

同时,也可以将本地端口监听改为标准输入输出,以这种方式协助 ssh 通过代理访问目标主机。

如:以通过 HTTP 代理访问

在此示例中,当客户端连接到 3334 端口时,将生成一个新的子进程。 客户端发送的所有数据都将附加到文件 /tmp/test.log 。 如果文件不存在,则 socat 会创建它。 选项 reuseaddr 允许立即重启服务器进程。

再看文件传递的例子。nc 也经常用来传递文件,但是 nc 有一个缺点,就是不知道文件什么时候传完了,一般要用Ctrl-C 来终止,或者估计一个时间,用 -w 参数来让他自动终止。用 socat 就不用这么麻烦了:

正向 Shell 就是 Server 提供网络监听以及启羡穗动 Shell,供 Client 控制

反此旁向 Shell 就是 Server 提供网络监听,Client 启动 Shell,在 Client 连接后对 Client 进行控制

以上时相对比较常用的场景,其余更复杂的应用可以翻阅相关资料,有些特定场景有更方便的实现,如:NAT 映射,更推荐使用 frp,可参考 《推荐一款很好用的内网穿透工具–frp》 。

(完)

一、概述

目前常用的端口转发工具有rinetd、Haproxy、iptables、Socat前面2种只能转发TCP,后面TCP/UDP都可以转发。如果是需要udp转发的话,只能选择iptables、Socat。iptables方面的转口转发配置这里就不多讲了,网上资料一大堆。下面分享一下Socat使用和配置。

二、安装配置

Socat可以通过rpm包的方式安装,然后配置,下面分享一个更简单的方册滚法,一键部署安装部署脚本。

2.1 系统要求及说明

系统要求:支持CentOS 6+ 、Debian 7+、Ubuntu 14+。

脚本说明:脚本默认开启UDP、TCP转发,带开机自启功能,且一次只能转发单个端口,如果想转发多个端口请重复运行本脚本。

2.2 安装配置

1、脚本安装

注:以root用户执行上面的命令

2、输入的参数说明:

输入本地端口:指定本机未被占用的端口,用户可自定义。 输入远程首磨端口:远程主机的真实的端口。 远程主机:远程主机的真实的IP地址。

3、配置保存位置

配置保存在/etc/rc.local文件中。

2.3 软件卸载

2.4 使用展示

1、环境说明

192.168.42.128:配置socat的机器,监听本地端口:13022 192.168.42.130:跳板远程连接的机州芹余器。.sh的监听端口为:22

2、配置

3、通过跳板连接到远程机器

三、小结

1、socat是继rinetd、Haproxy、iptables之后,端口转发和跳板的又一神器,同时支持tcp和udp。通过此一键配置脚本配置,非常简单便捷。

socat.sh

我们在检测远程服务是否正常时,经常会用一些工具(命令)来检测端口是否开启,来确定服务是否正常。通常可用于检测的工具有nc、socat、nmap等,基本思想是向远端指定端口发送数据,看其状态。

远端:192.168.0.15

本端:192.168.0.10

单向检测(适用于无法登录远端服务查看的情慧渗改况)

如果返回succeeded,则说明相应的UDP端口访问正常。

如果无任何返回信息,则说明相应的UDP端口访问失败。

nc -uvz $IP $Port.   //UDP

nc -vz $IP $Port   //TCP

远端不监听1777端口情况

# nc -uvz 192.168.0.15 1777

#

远端监听1777端口

# nc -ul 1777

XXXXX

# nc -uvz 192.168.0.15 1777

Connection to 192.168.0.15 1777 port [udp/powerguardian] succeeded!

如果succeeded,则无任何返回,如果failed则返回Connection refused。

echo "This socat udp test." | socat - udp-connect:$IP:$Port

远端不监听1777端口,本端发送udp数据至远端指定端口。

# echo "This socat udp test." | socat - udp-connect:192.168.0.15:1777

2017/06/18 14:26:39 socat[22195] E read(3, 0xb48a20, 8192): Connection refused

远端开启监听,本端再次发送。

# nc -ul 1777

This socat udp test.

# echo "This socat udp test." | socat - udp-connect:192.168.0.15:1777

#

用指定协议扫描远端指定端口

nmap -sU -p $Port $IP

# nmap -sU -p 1777 192.168.0.15

Starting Nmap 5.51 ( http://nmap.org ) at 2017-06-18 14:35 CST

Nmap scan report for host-192-168-0-15 (192.168.0.15)

Host is up (0.00098s latency).

PORT     STATE  SERVICE

1777/udp closed unknown

MAC Address: FA:16:3E:1A:54:30 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

可以通过传输文本及文件来测试UDP端口是否正常(先开监听,再发送)

远端:nc -ul $Port

本端: nc -u $IP $Port

在本端键入任意字符,看远端是否可以收到。

远端:nc -l $Port >$Filename

本端:nc $IP $Port <$Filename

可以执行md5sum看两端的文件md5是否相同

注:如果是检测tcp协议端口,上述nc命令中,去掉参数-u即可。另外,也可以使用telnet $IP $Port来完成

$ nc -vzw 2 180.76.148.122 22-81 //显示详细信息,包含失败的

$ nc -zw 2 180.76.148.122 22-81 //喊巧不显示详细信息,只包含成功的,如果检测udp端口,可用"前判vzw"参数,"z"参数表示连接成功后立即关闭连接

Connection to 180.76.148.122 port 22 [tcp/ssh] succeeded!

Connection to 180.76.148.122 port 80 [tcp/http] succeeded!

附全面的ncat使用方法: https://linux.cn/article-9190-1.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8148243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存