我试图"手动" 连接到参考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浏览器中工作).
我试图了解浏览器和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服务器连接不能正常工作?
我一直在尝试使用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版本一起使用的解决方案.
我有一个带有开放端口的服务器,每秒接收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)
有办法:
提前谢谢了
我一直在尝试按照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)
有没有人知道错误意味着什么和/或如何解决它?
动机
我想开始学习如何使用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) 我想知道如何在我的Mac(狮子)上安装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
在上面命令的末尾添加选项来解决这个问题.但随后多个客户端将能够连接.但我想只接受一个连接.
任何想法如何实现这一目标?
我有两个程序,一个服务器和一个客户端.服务器打开文件,向其写入数据,然后通过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) 我看过一个使用 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 连接进行连接。
我了解这种方法的安全含义。