我知道 socat 被描述为 netcat 的“更高级”版本,但实际区别是什么?说在 netcat 中可以做的所有事情也可以在 socat 中做,是否正确?相反的呢(你可以用 socat 做的一切也可以在 netcat 中完成)?
快速提问 - 我运行两个 linux 机器,一个是我自己的桌面,另一个是我的 VPS。出于 VPS 端的安全原因,我选择了与 MySQL ( /var/run/mysqld/mysql.sock
) 的套接字连接。我知道我可以像这样ssh -L 3307:127.0.0.1:3306 user@site.com
建立隧道:如果我设置远程 sql server 来监听某个端口,但我想知道的是我可以做这样的事情:ssh -L /path/to/myremotesqlserver.sock:/var/run/mysqld/mysql.sock
从而隧道两个套接字,而不是两个端口?
一个完全可以接受的解决方案也是将本地端口转发到远程套接字文件,但在可能的情况下,我试图不在远程机器上运行 tcp 服务器。
(是的,我知道 tcp 会更容易)。
我想要一个 UDP 回显服务器来获取数据包,并准确地回复它收到的内容。我怎样才能简单地使用netcat
or做到这一点socat
?它应该永远保持活动状态并处理来自多个主机的数据包。
我有一个提供程序 (A),它想通过传入的 TCP 连接向我们发送数据。不幸的是,消费服务 (B) 无法接收入站 TCP 连接。此外,它没有静态 IP,这是另一个要求。
解决此问题的一种方法是将传入 TCP A 端口连接到另一个 TCP 端口 B 的服务,以便消费者可以与 B 建立出站连接。
这不是一个独特的问题[1] [2],使用 socat 我可以做出非常接近我想要的东西:
socat -d -d -d -u TCP4-LISTEN:PORT-A,reuseaddr TCP4-LISTEN:PORT-B,reuseaddr
但是,这存在以下问题:
TCP4-LISTEN:PORT-B,reuseaddr,fork
,可以连接但不接收数据。PORT-B
(可克服的)有没有办法调整命令,使其成为“永久”并抵抗失败?
我有点发疯了。即使我这样称呼 socat:
socat -vvvv tcp4-listen:9000 tcp4-listen:9001
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但没有通知我传入的 TCP 连接!是否有额外的详细选项使 socat 显示此信息,例如
Connection from XYZ
Run Code Online (Sandbox Code Playgroud)
不可能是这么特殊的功能吧?
描述:
我想从另一台机器访问 D-Bus 系统服务,只知道机器的 IP 地址和要连接的服务。
我最近发现的是Gabriel(通过 SSH 的 D-Bus)。我已经编译了它的 GIT 版本(托管在 Sourceforge 上),这似乎有效,但我一直遇到缺乏“保持活动”的问题。这意味着在一段时间不活动后,SSH 隧道无法将 D-Bus 请求转发到远程 PC,我必须重新启动 Gabriel。
由于 Gabriel 在它连接的 PC 上使用 socat,我刚刚有了在本地 PC 上也使用 socat 的想法(用它代替 Gabriel)。
问题:
任何意见表示赞赏。
我正在研究嵌入式 ARM 平台 Slackware。我正在使用 G24 Java 调制解调器,该调制解调器配置为在端口/dev/ttyS1
和之间转发数据/dev/ttyACM0
,因此进入任何这些端口的任何内容都可以在另一个端口上看到。我想在这些端口之一上设置终端,/dev/ttyS1
并将另一个端口转发/dev/ACM0
到 TCP 端口,以便可以通过 LAN 从其他机器访问它。
首先,我配置了/etc/inittab
:
s2:12345:respawn:/sbin/agetty -L ttyS1 115200 vt100
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过以下命令使用 socat:
socat -d -d -d TCP-l:2020,reuseaddr,fork /dev/ttyACM0,raw,nonblock,waitlock="/var/run/ttyACM0.lock",b115200,echo=1,icanon=1,crnl
然后我试图telnet 192.168.1.222 2020
从其他机器连接,结果不太好,我从客户端看到终端要求登录,但是有一个我没有输入的即时答案:^M^M^M
...等,终端回答登录不正确,然后一次又一次地回答同样的事情。
我知道这^M
意味着回车符,但我不太确定如何解决这个问题。我尝试了不同的 socat 配置,但没有一个能正常工作。
我希望我的 .NET 应用程序使用我知道如何做的代理,但 .net 不支持 sock4a/sock5。我知道如何设置我的应用程序,但是,如何设置 socat 作为 TCP 代理在端口 1234 上侦听并使用 127.0.0.1:5678 上的 socks5 服务器?
它必须转发所有 TCP 连接。我之前在 privoxy 上很幸运,但它只支持 http 连接。
PS:我在windows上但是命令应该和linux一样
我有一个 socat 运行良好,当连接进来时执行我的命令提供的参数。但是,我遇到的问题是套接字处于 EOF 并且下一次连接进入时,该过程需要 3 秒才能恢复。这个过程将永远保持下去,所以它认为有一个EOF是socat,至少这是我的理解。
我的命令是: socat -v -s -d -d tcp-listen:2600,reuseaddr,fork exec:"/usr/bin/cec-client $CEC_CLIENT_ARGS"
相关日志行:
2014/12/31 22:41:04 socat[4746] N socket 1 (fd 4) is at EOF
2014/12/31 22:41:05 socat[4746] N exiting with status 0
Run Code Online (Sandbox Code Playgroud)
ignoreeof
两端都试过了,没有效果。我也试过设置超时,-t
和-T
我有一个传入的视频流,我想设置多个进程来处理它,每个进程都在自己的地址上运行。经过一些阅读后,似乎socat是一种方法来做到这一点
socat TCP4-LISTEN:1934,fork,reuseaddr TCP4:someaddress:1935
Run Code Online (Sandbox Code Playgroud)
这会将所有内容转发到目标地址,但它只允许我绑定一个目标。有没有办法用socat绑定多个目标地址?如果我尝试多个单独的绑定,我会在后续绑定中收到“地址已在使用中”错误。我没有被迫使用 socat,如果有人知道更好的方法,任何可以让我复制传入流的东西都是好的。谢谢。
socat ×10
tcp ×4
linux ×3
netcat ×2
ssh ×2
dbus ×1
echoserver ×1
multiplexing ×1
mysql ×1
networking ×1
proxy ×1
redirection ×1
socket ×1
terminal ×1
unix ×1