2014-10-22 15 views
16

Ich versuche, eine Verbindung mit der reference websocket echo server "manuell", um zu lernen, wie das Protokoll funktioniert (ich benutze Socat dafür). Der Server schließt jedoch die Verbindung ausnahmslos, ohne eine Antwort zu geben. Irgendeine Idee warum?Wie verbinde ich mich manuell mit netcat/socat/telnet mit einem Websocket?

Hier ist, was ich tue:

socat - TCP:echo.websocket.org:80 

Dann habe ich fügen Sie den folgenden Text im Terminal:

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 

ich die Parameter der Verbindung mit den Entwicklertools schnupperte, in firefox, auf derselben Maschine, wo das einwandfrei funktioniert: daher würde ich annehmen, dass sie richtig sind. Danach schließt der Server die Verbindung jedoch sofort, ohne eine Antwort zu geben. Warum? Wie kann ich das Protokoll "manuell" implementieren?

Ich möchte Typ Test in meinem Terminal und bekomme den Server zu antworten mit dem, was ich eingegeben habe (es funktioniert in einem Webbrowser).

Antwort

26

Ich glaube, Sie den Socket-Stream ändern möchten \ n (Zeilenvorschub) zu CRLF zu übersetzen (Carriage Return & Zeilenvorschub). info socat Dadurch erzeugt detaillierte Informationen, die diesen Schlüssel enthält:

crnl Converts the default line termination character NL ('\n', 0x0a) 
     to/from CRNL ("\r\n", 0x0d0a) when writing/reading on this chan- 
     nel (example). Note: socat simply strips all CR characters. 

Also ich denke, Sie sollten in der Lage sein, dies zu tun:

socat - TCP:echo.websocket.org:80,crnl