问题标签 [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.
segmentation-fault - socat 在信号 11 上退出
我遇到了非常奇怪的问题,没有任何理由的 socat 会出现段错误,我不知道该怎么做才能调试出来。完整的日志:
我正在做的事情如下:
socat 版本是:
任何帮助将不胜感激!
linux - 防止 socat 窃取标准输入
我socat
用于快速 telnet 横幅抓取,如下所示:
它遍历指定的 IP 地址列表,并在后台运行时,每调用socat
一个连接TCP socket
到端口 23 的stdin
(-) 并在一秒钟后断开连接。问题是所有后台进程都使用相同的stdin
,所以它们都会挂起。我尝试了readline
选项,以及stdin
用压制</dev/null
,但没有结果。netcat
,例如,行为方式相同,除非-d
指定忽略输入。
我指定的socat
行是用于其他目的的脚本的一部分,所以如果问题可以在不诉诸masscan
,nmap
或netcat
. 谢谢你。
linux - 为什么从 Jenkins 作业和终端运行时 socat 的行为会有所不同?
目标:
我想在网络上建立一个双向串行连接,即在不同的主机上有两个字符设备,h1是 Jenkins 从站,h2是由 TCP 连接绑定的。这应该作为 Jenkins 工作的一部分运行。我选择的工具是socat
.
问题:
socat
从 Jenkins 运行时行为错误。这项工作是一个“自由式”詹金斯项目,只有一个构建步骤——“执行外壳”:
这些步骤每次都会重现问题:
h2 : 运行 TCP 服务器
socat -x -d -d -d pty,link=/tmp/vmodem1,echo=0,raw tcp4-listen:54321,reuseaddr
h2:开放
/tmp/vmodem1
阅读:cat /tmp/vmodem1 > dump
开始詹金斯的工作。
h1 : 发送一些数据
dd if=/dev/zero of=/tmp/vmodem1 bs=1024 count=10
这些操作的结果可用作此要点。如您所见,即使dd
报告已发送字节,它也没有发生。当我执行完全相同的命令,但从socat
终端而不是 Jenkins 在 h1 上运行时,我可以看到两个socat
输出中都打印了零,并且dump
文件具有预期的大小。
这个设置可能看起来很做作,但我故意socat
在 Jenkins 脚本中只留下一个命令作为一个最小的示例。
socat
两台主机上的版本:1.7.2.3
- 默认 Ubuntu 14.04。
詹金斯版本:1.607
与常规的交互式 shell 相比,Jenkins shell 环境肯定有一些不同,但为什么会崩溃socat
呢?此外,如果有人知道通过网络建立此类串行连接的任何其他方式,我将不胜感激任何建议。
windows - 如何设置 Socat 以通过以太网使用 cygwin 在 rapberry pi 和 Windows 之间中继数据
我已经在我的 Windows 设备上通过 Cygwin 下载了 SoCat,并在我的 Raspberry Pi 上下载了它。我应该使用什么命令在两个设备之间中继数据。我不想中继任何复杂的数据,我现在只想能够通过以太网在两个设备之间建立连接。谢谢。
linux - socat 两个串口在一起
我正在编写一个 JUnit 测试来测试我的应用程序。该应用程序是用 Java 编写的,并使用 purejavacomm 库。为了测试串行解析器,我想设置一个虚拟串行端口,以便测试可以与解析器通信。除了简单解析之外,它还会在可用时动态连接到串行端口,所以我不想使用,比如说PipedInputStream
.
ttyS
此库仅查找以、ttyUSB
或.开头的设备文件ttyACM
。正因为如此,我不能做常规(这会产生串行端口/dev/pts/x
):
我试着做:
但它不起作用。它不会退出,也不会打印错误。我尝试/dev/ttyS20
用屏幕连接,但它只是说,[screen is terminating]
.
我查看了ttyS20
(和 21)的用户权限,他们都有组dialout
(用户:root),我的用户在(克里斯)中。
我是否忽略了具有权限的东西?有没有更好的方法可以一起完成这一切?
macos - Mac OS 与 RN42 蓝牙模块之间的串行通信
有谁知道如何从 Mac OS 和 RN42 蓝牙模块建立串行通信?
我已经通过 UART 3 将 RN42 连接到 Arduino,我希望在其中接收 Mac 中写入的内容。我用 Arduino 启动模块,向它发送启动命令模式的“$$$”命令,然后使用模块的命令建立与 de Mac 蓝牙的连接。
我已经将 RN42 和 Mac 配对,但我不能一边写一边读另一边。我尝试在文件 /dev/tty.Bluetooth-Incoming-Port 或 /dev/cu.Bluetooth-Incoming-Port 上使用 socat ,但它在蓝月亮上工作过一次。
希望有人可以帮助我。
谢谢!
c++ - UNIX域套接字C ++服务器无法向客户端返回数据
这是我正在处理的简单回显服务器,服务器将接受来自客户端的请求并返回客户端发送给它的内容。该程序可以正常工作socat
,但在使用我自己的客户端时会冻结。
我的旧代码的问题是我使用read
而不是read_some
. read
将阻塞管道,直到它读取一定数量的字节或获得损坏的管道异常,而read_some
一次读取一个块。更新版本用于read_some
读取输入流,并检查程序读取的最后一个字符是否为\0
,如果是\0
,则表示已到达命令末尾,因此会回显。这是有效的,因为我只传递字符串文字并且管道中没有二进制数据。
服务器的代码是
socat
例如,使用命令测试服务器时
它将返回所需的结果。
我的客户代码是
执行客户端时,一开始都没有输出,我杀了客户端后,服务器会输出它读取了 n 个字节并得到了一个损坏的管道异常。
这可能是由read
服务器中的功能引起的吗?如果是这样,有没有办法让它知道它应该读取多少数据而不在每条消息的开头发送数据块的大小?我也想知道为什么socat
可以毫无问题地使用此服务器?谢谢!
ssl - 稍后如何将 socat tcp4 连接更改为 SSL 连接(使用 XMPP 协议)
我正在考虑创建一个非常简单的 XMPP 代理。XMPP 协议以纯文本开始,然后在支持时将套接字转换为 SSL 并继续。
这是一个示例 XMPP 会话,我已将其精简为基本部分:检查功能:
告诉服务器开始在 SSL 中通信并交换密钥:
我们现在处于 SSL 会话中:
当我尝试创建一个 socat SSL“服务器”并使用 Pidgin 连接到它时,我得到了未知的协议:
我用 socat 非 SSL“服务器”尝试了同样的事情,它一直工作到需要更改为 SSL(为了便于阅读,我在此输出中添加了“客户端:”和“服务器:”。所有“服务器: “ 我将行粘贴到终端中):
在最后一行,客户端现在正试图在 SSL 中与我们交谈,所以我需要一种方法来告诉 socat 在那时切换到 SSL。Socat 显然对 XMPP 协议一无所知,因此它不知道何时切换。可以告诉 socat 像那样动态切换还是我应该寻找其他方法来做到这一点?
编辑:我做了更多的研究。
许多协议,例如 HTTPS 使用“始终加密”的连接。
XMPP 使用 starttls,这基本上意味着未加密的连接,直到客户端和服务器同意将连接升级为加密。
编辑:我刚刚查看了openssl,它有一个s_client的-starttls,但s_server没有,这向我表明这是一个架构问题,很难知道或被告知何时以及如何将连接升级到加密。
所以我想我真正的问题是,socat 能否处理使用 starttls 的协议,无论是否有一些手动干预来告诉它何时切换?我不认为 openssl 可以。是否有其他工具可以做到这一点,或者我当然应该使用 SSL 库编写自己的工具?
https - 用于 https 的 socat 端口转发
我可以socat
像这样使用端口转发:
在这种情况下,它可以完美运行:所有http
-requests 都localhost:8080
将被重定向到123.456.789.12:80
.
但是我怎样才能将这种转发用于https
-requests?
更新:我需要 Firefox 和远程服务器之间的单个socat
进程。socat
只是一个转发器(代理重定向器),仅此而已。像这样的东西:
python - Pyserial 不能很好地使用虚拟端口
动机
我想开始学习如何使用 python 库Pyserial。这似乎是一个非常好的图书馆,适用于很多人。我想将它用于即将进行的项目,在该项目中我必须自动化串行通信。
环境
我正在运行 Ubuntu 15.04。我正在使用 Python 2.7。
设置虚拟端口
我目前没有可以通过串行端口进行通信的设备。我正在使用socat应用程序创建两个以 9600 的波特率相互连接的虚拟端口。
伟大的!似乎端口工作!
一个简单的pyserial脚本
我使用 pip 安装 pyserial
然后我写了一点serialtest.py
这就是整个serialtest.py
运行脚本并遇到错误
那是怎么回事?
调试不成功
这家伙说他在使用python 2.6时成功了。我无法让 Pyserial 与 2.6 一起工作。
这个家伙遇到了波特率问题。我用命令仔细检查了我的波特率,$stty -F /dev/pts/2
并确认它实际上是 9600 的波特率。
这家伙还声称波特率有问题并将其归因于他的内核。那是在 2012 年,所以我认为它不再相关。
我的问题
如何让我的 serialtest.py 脚本无错误地运行?