标签: socat

通过网络转发串行端口并返回到远程主机上的串行字符设备(socat?)

我正在使用一个需要与远程串行 (rs-232) 设备通信的 linux 应用程序。我已经研究出如何在远程端使用 socat 通过 IP 连接发送设备的串行数据,但是我如何将该 IP 流转换回(伪)串行设备字符设备(例如 /dev/fakesocatserial0)另一方面?

linux serial socat

6
推荐指数
1
解决办法
4737
查看次数

Socat 在多个进程之间共享串行链接

我有一个场景,同一个盒子上的多个进程想要与串行设备通信。进程A需要与串口进行双向通信,进程B只需要能够写入串口即可。串口设备不断地喷出数据,而两个进程则周期性地写入端口。环境是 Windows 上的 Cygwin(进程是 Windows 进程),但是如果有人有仅 Linux 的解决方案,则可以将串行端口移动到 *nix 虚拟机。

我的“网络图”如下:

                                         /--<->--[Process A]
[serial device]-ttyS0--<->--[socat]-udp-<
                                         \--<<<--[Process B]
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试是使用 udp-recvfrom 和 fork 选项设置 socat 实例。这适用于第一个数据包 - 一个进程从 socat 分叉,将数据发送到串行设备,并开始从串行设备读回数据。然而,这个分叉的进程现在已经为读写打开了串口,所以没有更多的分叉成功启动。

任何人都可以想出任何方法来让它发挥作用吗?我可以想到以下途径,但我还没有找到使它们工作的设置:

  • 使用 socat 的 udp-recv 选项从任何人接收,但找到一种方法让它向特定地址发送回复。
  • 使用两个单向 socat,一个写入端口,一个从端口读取。然后我需要一种方法将这两个单向流组合成一个双向流,但我不知道如何。

cygwin socat

6
推荐指数
1
解决办法
5975
查看次数

Windows/Linux socat 通过 IP 共享串行设备

我有一个场景,我向我的团队@work 演示了如何使用socat. 该小组希望能够通过以太网与串行设备建立按需双向连接。目前我有通过 Telnet 广播的设备。

socat tcp-l:23,reuseaddr,fork,crlf file:/dev/ttyUSB0,echo=0,b115200,raw,crnl,icanon=1
Run Code Online (Sandbox Code Playgroud)

我需要设置消费者端,使 Windows 用户连接到 Telnet 端口,但将 I/O 重定向到他们机器上的可用 COM 端口。我在考虑 Cygwin &socat在 Windows 方面,但我不是一个非常熟练的 Windows 人。

有任何想法吗?

windows serial telnet redirect socat

6
推荐指数
1
解决办法
2万
查看次数

socat tun 设备吞吐量非常低

我正在摆弄 socat,并尝试使用 socat 创建一个 TUN 设备,用于在两个 debianstretch 服务器之间建立隧道。然而,吞吐量似乎非常低,与本地主机上的 TCP/TCP-Listen 的 iperf 相比,TUN 的吞吐量大约低 5 个数量级。

这是一个“最小工作示例”,显示速度如何受到影响。

socat 与 TUN 设备

服务器端:

# socat
socat TUN:10.10.0.2/16,iff-up TCP4-LISTEN:54321,bind=192.168.1.2,fork
# iperf service
iperf -s -p 15001 -B 10.10.0.2
Run Code Online (Sandbox Code Playgroud)

客户端:

# socat
socat TUN:10.10.0.1/16,iff-up TCP4:192.168.1.2:54321
# iperf
iperf -c 10.10.0.2 -p 15001 -t 30
Run Code Online (Sandbox Code Playgroud)

socat 与 TCP/TCP-LISTEN

服务器端:

# socat
socat TCP4-LISTEN:12345,bind=192.168.1.2,fork TCP4:127.0.0.1:15001
# iperf service
iperf -s -p 15001 -B 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

客户端:

# socat
socat TCP4-LISTEN:54321,bind=127.0.0.1,fork TCP4:192.168.1.2:12345
# iperf
iperf -c 127.0.0.1 -p …
Run Code Online (Sandbox Code Playgroud)

iperf tcp tun network-speed socat

5
推荐指数
1
解决办法
2759
查看次数

socat 连接连接“代理”两个入站 TCP 连接以公开防火墙服务?

我正在努力尝试了解如何使用 socat(或类似的 TCP 端口重定向器)在 PC 上公开防火墙服务。

这是场景:我有一台服务器 PC,它将充当两台客户端计算机之间的侦听“代理”/重定向器。服务器可以根据需要打开任意数量的防火墙端口,并有一个公共 IP。在第一个“客户端”(如建立到代理服务器的出站连接)客户端 A 上,我在端口 4200 上托管服务。这台 PC 位于防火墙后面,该防火墙仅允许基于先前出站连接的入站 TCP 连接。Client B 后面的防火墙也是如此。

我需要做的是让客户端 B 能够通过面向 Internet 的 TCP 代理服务器访问客户端 A 上的端口 42000。问题是我只能从客户端 A 启动出站 TCP 连接。当中继的两个客户端都位于只允许出站连接的防火墙之后时,我如何通过服务器重定向 TCP 连接?请查看下图并让我知道是否需要澄清。

                  ------------
                 |   Server   |
                 |w/ public IP|
                  ------------
                 /            \
          {|<Firewall>|}    {|<Firewall>|}
                |                 |
          ----------          ----------        
         | Client A |        | Client B |
          ----------          ----------
       (hosting a service    (wanting to access
         on port 4200)         Client A port 4200)
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议,谢谢。

firewall port tcp redirection socat

4
推荐指数
1
解决办法
7063
查看次数

是否可以使用 Netcat/Socat 创建 Web 浏览器代理隧道?

关于 Netcat/Socat 实用程序。从手册页来看,似乎可以使用 netcat 创建一个安全代理,通过它我可以将我的网络浏览器指向代理服务器,它可以通过代理分叉/驱动我的网络流量。这可能吗?关于如何执行此操作有任何提示吗?Windows 上的 Socat 更好,但 Linux 上的 netcat 也可以。

http://www.dest-unreach.org/socat/doc/socat.html

netcat socat

1
推荐指数
1
解决办法
6299
查看次数

socat CREATE 返回错误的文件描述符

我正在尝试构建一个快速脚本,用于侦听一个 UDP 数据包,将其存储到文件中,然后退出。

索卡特来救援!

$ socat UDP-RECVFROM:9999 CREATE:/tmp/results_9999
2016/04/08 11:56:59 socat[1955] E read(6, 0x5220d3d0020, 8192): Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

啊?

该文件包含收到的数据包:

$ cat /tmp/results_9999
SUCCESS on Port 9999
Run Code Online (Sandbox Code Playgroud)

strace 似乎显示它试图读取写入的文件:

recvfrom(5, "SUCCESS on Port 9999\n", 8192, 0, {sa_family=AF_INET, sin_port=htons(34032), sin_addr=inet_addr("192.168.56.102")}, [16]) = 10
recvfrom(3, 0x78ea087b3700, 519, 64, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(3, 0x78ea087b3d40, 519, 64, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
write(6, "SUCCESS on Port 9999\n", 10)             = 10
recvfrom(3, 0x78ea087b3d40, 519, 64, 0, …
Run Code Online (Sandbox Code Playgroud)

socat

1
推荐指数
1
解决办法
1693
查看次数

标签 统计

socat ×7

serial ×2

tcp ×2

cygwin ×1

firewall ×1

iperf ×1

linux ×1

netcat ×1

network-speed ×1

port ×1

redirect ×1

redirection ×1

telnet ×1

tun ×1

windows ×1