标签: socat

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

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

这是我做的:

socat - TCP:echo.websocket.org:80
Run Code Online (Sandbox Code Playgroud)

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

GET /?encoding=text HTTP/1.1
Origin: http://www.websocket.org
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ==
Upgrade: websocket
Sec-WebSocket-Version: 13
Run Code Online (Sandbox Code Playgroud)

我在同一台机器上使用firefox中的开发人员工具嗅探了连接的参数,这样可以完美地运行:因此,我认为它们是正确的.但是,之后,服务器立即关闭连接,而不提供答案.为什么?如何"手动"实施协议?

我想在我的终端中键入test并让服务器回复我输入的内容(它在Web浏览器中工作).

bash terminal socat websocket

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

为什么socat在连接到Web服务器时需要"fork"?

我试图了解浏览器和Web服务器之间的TCP连接.我在我的本地计算机上运行了一个Web服务器,并且可以使用localhost:3000或127.0.0.1:3000按预期方式浏览到它.(我正在运行"rails s"和WEBrick.)

我想在浏览器和Web服务器之间放置一个软件中介,因此开始尝试使用socat.以下工作正常:

socat TCP-LISTEN:8080,fork TCP:localhost:3000
Run Code Online (Sandbox Code Playgroud)

我可以浏览到localhost:8080,事情按预期工作.但是,如果我省略",fork"这样的参数,

socat TCP-LISTEN:8080 TCP:localhost:3000
Run Code Online (Sandbox Code Playgroud)

本地rails网站在浏览器中看起来很破碎.

为什么这个fork参数是必要的?没有它,为什么浏览器< - > Web服务器连接不能正常工作?

webserver tcp socat

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

socat假http服务器 - 使用文件作为服务器响应

我一直在尝试使用socat来响应每个连接到它正在用虚假的HTTP回复监听的套接字.我无法让它发挥作用.可能是因为我正在使用socat的cygwin版本?我不知道.

部分问题是我希望第二个参数<some_file_response>不被写入.换句话说,因为它是双向的,它会读取response.txt中的内容,然后写入同一个文件,我不希望这样.即使我这样open:response.txt,rdonly做也不重复.system:好像什么也没做.exec看起来它是有效的,例如我可以做,exec:'cat response.txt'但永远不会被发送到连接到端口1234的客户端.

socat -vv tcp-listen:1234,reuseaddr,fork <some_file_response>
Run Code Online (Sandbox Code Playgroud)

我希望它将文件读取到已连接的客户端,然后关闭连接,并反复执行(这就是我使用fork的原因).

我正在对这个问题表示赏心悦目.请仅提供与Windows命令提示符下的cygwin版本一起使用的解决方案.

socat

15
推荐指数
2
解决办法
4652
查看次数

记录使用SOCAT在端口上接收的消息

我有一个带有开放端口的服务器,每秒接收50到1000条消息.通过消息我的意思是发送一行文本.

基本上我们希望将这些消息记录在每小时(或x分钟)处理的文件中.

我创建了一个bash脚本(见下文),它在后台运行,除非我杀死socat进程(因此我可以将文件进行处理,它可以启动一个新文件),我们会收到一条消息,我确信我们在分裂的第二天就失去了消息,即socat失败了.

DELAY="3600"
while true
do  
    NEXT_STOP=`date +%s --date "$DELAY second"`
    (
        while [ "$(date +%s)" -lt "$NEXT_STOP" ]
        do
            killall socat
            socat -u TCP-LISTEN:6116,reuseaddr,keepalive,rcvbuf=131071,reuseaddr OPEN:/var/ais/out_v4.txt,creat,append
        done
    ) & sleep $DELAY ; killall socat

    mv /var/ais/out_v4.txt "/var/ais/_socat_received/"$(date +"%Y-%m-%d-%T")"__out_v4.txt"
done
Run Code Online (Sandbox Code Playgroud)

有办法:

  1. 让socat旋转其输出文件而不会终止进程
  2. 或者我们可以在SOCAT写入文件时清除文件的内容.例如,将前10000行剪切成另一个文件,因此输出文件仍然是可管理的大小?

提前谢谢了

linux bash port tcp socat

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

使用MacBookPro主机在docker容器上运行GUI应用程序

我一直在尝试按照https://learning-continuous-deployment.github.io/docker/images/dockerfile/2015/04/22/docker-gui-osx/上关于在Docker容器中运行GUI应用程序的说明进行操作MacBookPro主机(使用Docker工具).

我使用Fedora 23创建了一个简单的docker容器并安装了firefox.

我尝试运行firefox,大约一分钟后,我收到以下错误:

Unable to init server: Broadway display type not supported: 192.168.57.3:0
Error: cannot open display: 192.168.57.3:0
Run Code Online (Sandbox Code Playgroud)

有没有人知道错误意味着什么和/或如何解决它?

macos socat docker xquartz

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

Pyserial与虚拟端口不兼容

动机

我想开始学习如何使用python库pyserial.它似乎是一个非常好的图书馆,适用于很多人.我想将它用于即将开展的项目,我必须自动进行串行通信.

环境

我正在运行Ubuntu 15.04.我正在使用Python 2.7.

设置虚拟端口

我目前没有可以通过串口与之通信的设备.我正在使用socat应用程序创建两个相互连接的虚拟端口,波特率为9600.

$ socat -d -d pty,raw,echo=0,b9600 pty,raw,echo=0,b9600
2016/01/16 12:57:51 socat[18255] N PTY is /dev/pts/2
2016/01/16 12:57:51 socat[18255] N PTY is /dev/pts/4
2016/01/16 12:57:51 socat[18255] N starting data transfer loop with FDs [5,5] and [7,7]
$ echo "hello" > /dev/pts/2
$ cat /dev/pts/4
hello
Run Code Online (Sandbox Code Playgroud)

大!好像港口有效!

一个简单的pyserial脚本

我使用pip安装pyserial

$ sudo pip install pyserial
Run Code Online (Sandbox Code Playgroud)

然后我写了一个小的serialtest.py

#!/usr/bin/env python
import serial

ser = serial.Serial('/dev/pts/2', 9600)
Run Code Online (Sandbox Code Playgroud)

这是serialtest.py的全部内容

运行脚本并遇到错误

$ python serialtest.py 
Traceback (most recent call …
Run Code Online (Sandbox Code Playgroud)

python serial-port virtual-serial-port pyserial socat

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

在Mac上安装Socat

我想知道如何在我的Mac(狮子)上安装Socat?

我试图找到一个如何通过谷歌,但我没有找到任何东西.

先感谢您!

macos socat

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

Socat在关闭后终止

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

socat PTY,link=/dev/ttyV1,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,forever,reuseaddr
Run Code Online (Sandbox Code Playgroud)

但是,当连接丢失时,上述socat进程被终止,客户端无法连接.

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

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

linux socat

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

如何使用socat代理拦截Unix域套接字发送辅助数据?

我有两个程序,一个服务器和一个客户端.服务器打开文件,向其写入数据,然后通过unix域套接字将其文件描述符发送到客户端.一切正常,直到我介绍一个socat代理.

socat -x -v UNIX-LISTEN:/tmp/unixSockSendFe,mode=775,reuseaddr,fork UNIX-CONNECT:/tmp/unixSockSendFd 
Run Code Online (Sandbox Code Playgroud)

说明
服务器侦听/tmp/unixSockSendFd,socat连接到它(UNIX-CONNECT:/tmp/unixSockSendFd),并创建UNIX-LISTEN:/tmp/unixSockSendFe,mode=775,reuseaddr,fork客户端连接的另一个Unix域套接字().客户端和服务器之间的任何通信都通过中继socat,打印以二进制(-x选项)和ascii(-v选项)形式发送的字节.

如果我不使用socat,并且客户端直接连接到服务器(在 /tmp/unixSockSendFd套接字上),一切正常,但当socat用作代理时,客户端崩溃时出现分段错误.

服务器

/*Server code - sendfd.c*/
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>

char *socket_path = "/tmp/unixSockSendFd";
char *file="/tmp/abcd.txt" ;/*file whose fd is to be sent*/
int sendfd(int sock, int fd);
int recvfd(int s);
char data[]="sahil\0";

int main(int argc, char *argv[]) {
  struct sockaddr_un addr;
  char buf[100]; …
Run Code Online (Sandbox Code Playgroud)

sockets linux proxy socat unix-socket

7
推荐指数
0
解决办法
862
查看次数

socat - 如何侦听非 ssl TCP 并转发到 ssl TCP 端点?

我看过一个使用 socat 接受 ssl TCP 流量并将流量转发到非 ssl 主机的例子:

socat TCP-LISTEN:443,reuseaddr,fork "^OPENSSL-SERVER,cert=server.pem | TCP:somehost:80"
Run Code Online (Sandbox Code Playgroud)

有可能做相反的事情吗?即我有一个启用了 ssl 的远程主机并且需要一个客户端证书,但我的客户端只能通过非 ssl 连接进行连接。

我了解这种方法的安全含义。

ssl tcp socat

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