问题标签 [socat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
32252 浏览

bash - 如何使用 netcat/socat/telnet 手动连接到 websocket?

我正在尝试“手动”连接到参考 websocket 回显服务器,以了解协议是如何工作的(我为此使用了 socat)。但是,服务器总是在不提供答案的情况下关闭连接。知道为什么吗?

这是我所做的:

然后,我将以下文本粘贴到终端中:

我在同一台机器上用开发者工具嗅探连接的参数,在 Firefox 中,它完美地工作:因此,我认为它们是正确的。但是在那之后,服务器会立即关闭连接,而不提供答案。为什么?如何“手动”实施协议?

我想在我的终端中进行类型测试并让服务器回复我输入的内容(它在网络浏览器中工作)。

0 投票
1 回答
6646 浏览

linux - 使用socat连接socket,发送命令,读取单行

我有一个可以通过 UNIX 套接字(实际上是我认为特定于 Linux的抽象套接字)进行通信的进程。

我正在编写一个需要向该进程发送命令的 shell 脚本。为此,我决定尝试使用 SOCAT。我试图弄清楚如何(1)连接到抽象套接字,(2)向它发送单个命令(字符串),(3)读取响应并将响应打印到标准输出。

到目前为止,我可以简单地说:

这会将 STDIN 连接到套接字,因此如果我知道手动键入命令,套接字将读取字符串,然后将结果响应输出到控制台。

除了在脚本中运行 socat 时,我需要自动将字符串发送到 STDIN。好的,所以最直接的方法似乎是将一个字符串通过管道传输到 STDIN。所以假设我们有一个名为“ status”的命令,我会说:

这似乎工作(socat 报告没有错误),除了结果没有发送到标准输出。相反,调用只是返回而没有响应。那么我怎样才能从套接字中读取一行并将结果显示在标准输出上呢?

0 投票
1 回答
3952 浏览

bash - socat:用串口记录对话

一段时间后,我终于得到了socat与 相同的行为方式putty,使用:

我还想将对话记录到日志文件中。

编辑:

我想出了一种方法来做到这一点,(但我认为这是一个混乱),所以我回答了我自己的问题 - 这是堆栈溢出标准的有效答案。

0 投票
1 回答
6184 浏览

linux - socat 监听分配给特定网络接口的所有 IP

有谁知道我如何socat监听分配给一个特定网络接口的所有接口?我不确定这是否可能。

如果我想绑定socat到特定的IP:PORT,我总是从命令的输出中解析 IP 信息ip,然后socat像这样绑定到它:

我想我可以通过运行这样的方式来实现我所追求的socat

socat -d -d TCP4-LISTEN:1234,fork,so-bindtodevice=eth0 UNIX-CLIENT:/tmp/foo.sock

但我相信我缺少一些低级网络编程知识,因此不太了解这个选项应该做什么,我只是希望它应该做我想做的事情,但实际上它实际上绑定到所有网络接口。

0 投票
1 回答
14070 浏览

linux - Socat在连接关闭后终止

此命令(串行端口重定向器)接受 TCP:11313 上的单个连接:

但是当连接丢失时,上述socat进程被杀死,客户端无法连接。

fork我可以通过在上述命令末尾添加选项来解决这个问题。但是随后多个客户端将能够连接。但我只想接受一个连接。

任何想法如何实现这一目标?

0 投票
1 回答
1208 浏览

tcp - 接收来自多个发送者的 UDP 消息并通过 TCP 转发

我正在尝试使用socat. 我知道这个过程会丢失帧边界,但在这种情况下这不是问题。我设法使用以下命令使其部分工作:

即,socat等待客户端连接到 TCP 套接字,然后派生一个新的子进程来侦听 UDP 套接字。多个客户端应该能够使用 TCP 进行连接,并且每个客户端都应该收到每个接收到的 UDP 消息。只要只有一个端点向 UDP 套接字发送数据,这种方法就可以工作。但是,如果第二个端点正在向 UDP 套接字发送数据,则该数据将不会通过已建立的 TCP 连接转发。

似乎一旦接收到第一个数据包或过滤从其他主机发送的数据,就会在分叉子进程中socat调用UDP 套接字。connect()

有什么方法可以指示socat不过滤 UDP 流量并将数据包从发送到侦听 UDP 套接字的任何端点转发?

0 投票
1 回答
1383 浏览

udp - 在 Vagrant 和 VirtualBox 环境中使用“socat”进行多播

问题:同一网络中的每台机器都应该能够向所有成员广播,包括它自己。

这是尝试使用socat在 Vagrant 和 VirtualBox Env​​rionment 中创建的 VM 进行多播工作。似乎这里的工作方式有所不同,所以我首先尝试了解多播如何在物理机器上工作。

我有 3 台物理机,它们安装了 ubuntu 12.04 服务器并命名为pc0,pc1pc2.

在我运行的每台机器上: socat STDIO UDP-DATAGRAM:224.0.0.1:2200,bind=:2200

...当我输入hi from pc0from时pc0,它已经向自己和其他 2 台机器广播,这就是我想要的(我希望这就是多播应该如何工作):

我正在使用 IP 224.0.0.1,因为它默认用于每台机器上的多播。

接下来,我尝试使用 3 个 VM vb0vb1vb2. Github 仓库在这里

现在我尝试从以下位置进行广播vb0

...并且它不会向其他成员广播(如上面的物理机器),除了它自己。

看来,在有这个工作之前应该做一些额外的设置......

Vagrantfile

0 投票
0 回答
704 浏览

linux - 通过 socat 运行带有本地参数的远程命令?

我想在计算机 A 上设置一个 socat 套接字,它将从计算机 B 上的套接字接收一个字符串。这个字符串应该被解释为将在计算机 A 上执行的命令的参数,例如:

电脑甲:

socat TCP4-L:3334,fork SYSTEM:"./parsecommand.sh $INCOMING_STRING_OF_ARGS"

计算机 B:

socat TCP4:remote.host:3334 SYSTEM:"echo 'out going string of args'"

这是此类动议的正确语法吗?例如,在 socat 宇宙中是否有一些等效于 $@ 的变量,以便我可以用该变量替换 $INCOMING_STRING_OF_ARGS 以使其工作?

在完整的上下文中:我们想要的是用“ssh”替换正在运行的远程命令的“socat”。我们想在计算机 A 和计算机 B 之间建立双向连接,从计算机 B 向计算机 A 发送命令,在计算机 A 上执行命令,并将输出返回给计算机 B。

0 投票
1 回答
5455 浏览

bash - 无法使用 socat 连接到套接字

我正在尝试解析 rsyslog 日志。为此,我将所有日志发送到 socat,然后将它们发送到 Unix Domain Socket。该套接字是通过 perl 脚本创建的,该脚本正在侦听该套接字以解析日志。

rsyslog 向其发送所有日志的我的 bash 脚本是

/tmp/sock是使用 perl 脚本创建log_parser.pl

我从 socat 得到这个错误是

我不是插座方面的冠军,所以我无法理解这是什么。请帮忙。提前致谢。

主要问题是,当我杀死我的 perl 脚本时,假设 bash 脚本会再次调用它并启动它。实际发生的是 sript 已启动但 socat 未启动,而是给出此错误并且永远不会启动。

0 投票
1 回答
1089 浏览

windows - 处理UDP数据包并同时转发

我有一个与此问题非常相似的问题,但提供的解决方案对我不起作用。实际上我想做一些不同的事情,所以也许有更好的方法。

我希望将 UDP 单播数据包(视频流)发送到服务器。服务器会将这些数据包转发到另一台计算机。或者,登录到服务器的人将能够使用 mplayer 之类的东西观看视频流。我很确定我可以将视频从视频源流式传输到服务器和最终目的地,但我真的希望服务器能够控制它。

第一次尝试: 下载nmap获取ncat工具。以为我可以用它来下载字节并将字节传输到 mplayer 并与另一个 ncat 进程一起转发。我可以通过管道连接到 mplayer,效果很好,只是不能同时转发。如果我使用的是 Linux,显然我可以使用 tee 和进程替换,但我正在寻找 Windows 解决方案。

第二次尝试 我找到了一种解决方案,可以在 PowerShell 中隐含管道到多个程序。但我发现二进制管道不起作用。

第三次尝试 我试图编写一个类似于 tee 的可执行文件,它可以连接到两个程序。这与我得到的差不多,但视频流似乎有点损坏。我认为这更多的是性能问题。

第四次尝试 现在我发现了 socat ,这让我想到了我所链接的问题。这看起来很奇怪,但我认为一个解决方案是让我的服务器将数据包转发到目标,并将数据包转发到服务器上的不同端口,该端口将与 netcat 或 socat 一起使用以管道传输到 mplayer。我宁愿不使用服务器上的另一个端口,但如果那是我必须做的,那么好的。但就像我说的那样,另一个问题的解决方案似乎不起作用。Mplayer 开始缓冲,然后很快停止。

按此顺序在单独的 cmd 窗口中运行其中的每一个。请注意,我还没有尝试转发到目标计算机,只是想让 mplayer 在服务器上工作。

socat UDP4-LISTEN:5000 UDP-DATAGRAM:224.10.10.10:5001

socat UDP4-RECVFROM:5001,ip-add-membership=224.10.10.10:0.0.0.0,reuseaddr,fork UDP-DATAGRAM:192.168.16.33:5002

ncat -l -u -p 5002 | mplayer -vo direct3d -cache 1024 -

根据 MPlayer 的输出,我似乎收到了大约 924 个字节。

虽然我会继续学习 socat,但我的想法很新鲜。我假设我没有正确运行 socat,但我不确定问题出在哪里。如果有人能指出我的错误或提供替代解决方案,我将不胜感激。谢谢。

编辑:

我做了一些更多的测试,如果我改变第二个 socat 来做到这一点:

socat UDP4-RECVFROM:5001,ip-add-membership=224.10.10.10:0.0.0.0,reuseaddr,fork - | mplayer -vo direct3d -cache 1024 -

我发现它会从多播地址播放流。但显然转发到端口 5002 上的单播地址是行不通的。