wssh ("wish") is a command-line utility/shell for WebSocket inpsired by netcat.

Related tags

WebSocket wssh
Overview

wssh - websocket shell

wssh ("wish") is a command-line utility/shell for WebSocket inpsired by netcat.

Install

  • Assumes Python 2.7

It uses currently uses gevent 0.13, so you may need to install libevent. This is because it uses the great work in ws4py. My gevent websocket server+client in there could probably be generalized to work with Eventlet; then this could be trivially ported to Eventlet to drop the libevent dependency.

If you don't have libevent installed already, install it prior to running setup.py. You can install libevent using apt-get on Ubuntu or brew on a Mac.

git clone git://github.com/progrium/wssh.git
cd wssh
python setup.py install

Usage

Listen for WebSocket connections on a particular path and print messages to STDOUT:

wssh -l localhost:8000/websocket

Once connected you can use STDIN to send messages. Each line is a message. You can just as well open a peristent client connection that prints incoming messages to STDOUT and sends messages from STDIN interactively:

wssh localhost:8000/websocket

Contributing

Feel free to fork and improve.

License

MIT

Comments
  • Greatly improved netcat and general command-line tool conformity

    Greatly improved netcat and general command-line tool conformity

    Hi, I've made a number of changes (broadly rewrote client and server.py) that generally improve the tools status as a netcat-like command-line websocket utility.

    Internally I did a bunch of work to integrate more naturally with ws4py and gevent, reduce output noise, and serve only a single connection before exiting (like netcat does). I also made significant changes to support scripting (specifically using the tools with pipes), all of which designed to match netcat's interface.

    opened by jasta 2
  • How to set verbosity?

    How to set verbosity?

    i want to see "opened" messages and see... if self.opts.verbosity >= 1: in server.py. i am a python idiot.. so I'm wondering... how can one SET such verbosity.. either permanently, or on a per-run basis?

    opened by mralexgray 1
  • Added a -m option to control text vs binary frame encoding

    Added a -m option to control text vs binary frame encoding

    This changes the current default behaviour to use the auto mode (previously it was always sending binary frames).

    Also adds significance to the third level of verbosity (-vvv) to print a message each time a frame is sent or received. Useful for diagnostic purposes.

    opened by jasta 1
  • Fix ws/wss parsing so that SSL is actually used when you enter a wss URL

    Fix ws/wss parsing so that SSL is actually used when you enter a wss URL

    In the current repository, when using a wss:// URL -- even when also manually specifying port 443 -- SSL is not actually used, because in client.py it constructs the URL over again and always uses "ws".

    This commit makes the client aware of the given scheme, and adds some sane parsing rules in init.py so that it works the way it's expected in all cases -- with/without scheme and with/without port.

    opened by jefferai 0
  • Wssh3 - a version of wssh that runs on python 3.6+ and supports TLS SNI

    Wssh3 - a version of wssh that runs on python 3.6+ and supports TLS SNI

    I made a new version of wssh that supports TLS SNI. You'll have to install python3.6+, be careful you should not mess with your system installation of python, install python3.6 for the USER ONLY not as root if it is not already your system python version.

    I had to do this upgrade because one of the servers would no longer connect, and instead would give me this error:

    results in : [Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

    It was solved by modifying some flags and options within both wssh and ws4py so that it can handle python3 lib support for TLS SNI. It was a PITA, so thankfully you don't have to do it now!

    Here's my updated fork, wssh3:

    https://github.com/Tectract/wssh3

    opened by Tectract 0
  • Wssh needs an upgrade to python3, it's breaking down

    Wssh needs an upgrade to python3, it's breaking down

    I have a third wish!

    So, python2.7 support is officially ending, and I'm getting some serious errors with wssh, having to do with lack of SNI support in the request / urllib3 packages, specifically under python2.7.6. I can't really upgrade my system version of python, and I don't want to move to a different OS at the moment.

    So.... I need to figure out how to get wssh running with the assumption of python3 instead of python.

    Can you suggest how I do that?

    We need wssh3!

    Cheers!

    opened by Tectract 0
  • wssh from pip is seriously degraded, old wssh is partially broken

    wssh from pip is seriously degraded, old wssh is partially broken

    I'm a wssh user, been using it happily for a long time. I'm using version 0.1.0 from this repo. It seems that if you install wssh via pip, you get a broken, degraded version. Here is the output from this wssh:

    usage: wssh [-h] [-l] [-m {text,binary,auto}] [-n] [-q secs] [-v] URL
    positional arguments:
         URL                   URL of a WebSocket endpoint with or without ws:// or wss://
    
    optional arguments:
        -h, --help            show this help message and exit
        -l                    start in listen mode, creating a server
        -m {text,binary,auto}   specify the message transmit mode (default: auto)
        -n                    separate each received message with a newline
        -q secs               quit after EOF on stdin and delay of secs (0 allowed)
        -v                    verbose (use up to 3 times to be more verbose)
    

    and here is the output from wssh installed via pip:

    usage: wssh [-h] [--host HOST] [--port PORT] [--password [PASSWORD]]
            [--key [KEY]] [--key-passphrase [KEY_PASSPHRASE]]
            destination
    

    Why is the official pip version missing all those options, I need the -n option!

    My notes also indicate I need to use ws4py v0.2.4 (version-locked) for a working install of wssh, installed from source, and possibly also libevent library may need to be installed from source or lib-linked at compile-time for wssh.

    On my most recent install this week, I'm getting this error popping up: Exception: threading module loaded before patching!

    It's a PITA to debug this, involving changing wssh/init.py so the first lines in my init.py now read:

    import gevent.monkey; gevent.monkey.patch_thread()
    import sys
    import threading
    

    but this now causes the error/warning (which doesn't seem to affect functionality on my system, luckily):

    Exception KeyError: KeyError(140049873684592,) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored

    So, it's a boondoggle to get wssh working on a modern system anymore, is the point.

    Can we get the 'good' / working version of wssh with the full option set into python pip somehow?

    opened by Tectract 3
  • No local packages or download links found for ws4py==0.2.4

    No local packages or download links found for ws4py==0.2.4

    > python setup.py install                                                                                                                                                                                                                                                               running install
    Checking .pth file support in /Library/Python/2.7/site-packages/
    /usr/bin/python -E -c pass
    TEST PASSED: /Library/Python/2.7/site-packages/ appears to support .pth files
    running bdist_egg
    running egg_info
    creating wssh.egg-info
    writing requirements to wssh.egg-info/requires.txt
    writing wssh.egg-info/PKG-INFO
    writing top-level names to wssh.egg-info/top_level.txt
    writing dependency_links to wssh.egg-info/dependency_links.txt
    writing entry points to wssh.egg-info/entry_points.txt
    writing manifest file 'wssh.egg-info/SOURCES.txt'
    reading manifest file 'wssh.egg-info/SOURCES.txt'
    writing manifest file 'wssh.egg-info/SOURCES.txt'
    installing library code to build/bdist.macosx-10.12-intel/egg
    running install_lib
    running build_py
    creating build
    creating build/lib
    creating build/lib/wssh
    copying wssh/__init__.py -> build/lib/wssh
    copying wssh/client.py -> build/lib/wssh
    copying wssh/common.py -> build/lib/wssh
    copying wssh/server.py -> build/lib/wssh
    creating build/bdist.macosx-10.12-intel
    creating build/bdist.macosx-10.12-intel/egg
    creating build/bdist.macosx-10.12-intel/egg/wssh
    copying build/lib/wssh/__init__.py -> build/bdist.macosx-10.12-intel/egg/wssh
    copying build/lib/wssh/client.py -> build/bdist.macosx-10.12-intel/egg/wssh
    copying build/lib/wssh/common.py -> build/bdist.macosx-10.12-intel/egg/wssh
    copying build/lib/wssh/server.py -> build/bdist.macosx-10.12-intel/egg/wssh
    byte-compiling build/bdist.macosx-10.12-intel/egg/wssh/__init__.py to __init__.pyc
    byte-compiling build/bdist.macosx-10.12-intel/egg/wssh/client.py to client.pyc
    byte-compiling build/bdist.macosx-10.12-intel/egg/wssh/common.py to common.pyc
    byte-compiling build/bdist.macosx-10.12-intel/egg/wssh/server.py to server.pyc
    creating build/bdist.macosx-10.12-intel/egg/EGG-INFO
    copying wssh.egg-info/PKG-INFO -> build/bdist.macosx-10.12-intel/egg/EGG-INFO
    copying wssh.egg-info/SOURCES.txt -> build/bdist.macosx-10.12-intel/egg/EGG-INFO
    copying wssh.egg-info/dependency_links.txt -> build/bdist.macosx-10.12-intel/egg/EGG-INFO
    copying wssh.egg-info/entry_points.txt -> build/bdist.macosx-10.12-intel/egg/EGG-INFO
    copying wssh.egg-info/requires.txt -> build/bdist.macosx-10.12-intel/egg/EGG-INFO
    copying wssh.egg-info/top_level.txt -> build/bdist.macosx-10.12-intel/egg/EGG-INFO
    zip_safe flag not set; analyzing archive contents...
    creating dist
    creating 'dist/wssh-0.1.0-py2.7.egg' and adding 'build/bdist.macosx-10.12-intel/egg' to it
    removing 'build/bdist.macosx-10.12-intel/egg' (and everything under it)
    Processing wssh-0.1.0-py2.7.egg
    Copying wssh-0.1.0-py2.7.egg to /Library/Python/2.7/site-packages
    Adding wssh 0.1.0 to easy-install.pth file
    Installing wssh script to /usr/local/bin
    
    Installed /Library/Python/2.7/site-packages/wssh-0.1.0-py2.7.egg
    Processing dependencies for wssh==0.1.0
    Searching for gevent==0.13.6
    Reading https://pypi.python.org/simple/gevent/
    Best match: gevent 0.13.6
    Downloading https://pypi.python.org/packages/14/83/37f998c61406cb765264db8b68a24296e1f40d05a57b18dbfafa0883b5bd/gevent-0.13.6.tar.gz#md5=7c836ce2315d44ba0af6134efbcd38c9
    Processing gevent-0.13.6.tar.gz
    Writing /tmp/easy_install-ovRlcN/gevent-0.13.6/setup.cfg
    Running gevent-0.13.6/setup.py -q bdist_egg --dist-dir /tmp/easy_install-ovRlcN/gevent-0.13.6/egg-dist-tmp-DMqGBD
    gevent/core.c:4208:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5296:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5332:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5459:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5646:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5689:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5732:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5793:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5853:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5886:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5959:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6422:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6580:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6738:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6896:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:16161:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:21886:33: warning: unused function '__Pyx_PyIndex_AsSsize_t' [-Wunused-function]
    static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
                                    ^
    gevent/core.c:21297:36: warning: unused function '__Pyx_PyInt_AsUnsignedChar' [-Wunused-function]
    static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
                                       ^
    gevent/core.c:21335:35: warning: unused function '__Pyx_PyInt_AsUnsignedInt' [-Wunused-function]
    static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
                                      ^
    gevent/core.c:21354:27: warning: unused function '__Pyx_PyInt_AsChar' [-Wunused-function]
    static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
                              ^
    gevent/core.c:21411:34: warning: unused function '__Pyx_PyInt_AsSignedChar' [-Wunused-function]
    static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
                                     ^
    gevent/core.c:21430:35: warning: unused function '__Pyx_PyInt_AsSignedShort' [-Wunused-function]
    static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
                                      ^
    gevent/core.c:21449:33: warning: unused function '__Pyx_PyInt_AsSignedInt' [-Wunused-function]
    static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
                                    ^
    gevent/core.c:21468:26: warning: unused function '__Pyx_PyInt_AsLongDouble' [-Wunused-function]
    static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
                             ^
    gevent/core.c:21592:35: warning: function '__Pyx_PyInt_AsLongLong' is not needed and will not be emitted [-Wunneeded-internal-declaration]
    static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
                                      ^
    gevent/core.c:21662:42: warning: function '__Pyx_PyInt_AsSignedLongLong' is not needed and will not be emitted [-Wunneeded-internal-declaration]
    static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
                                             ^
    26 warnings generated.
    gevent/core.c:4208:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5296:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5332:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5459:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5646:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5689:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5732:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5793:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5853:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5886:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:5959:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6422:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6580:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6738:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:6896:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:7214:15: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
        __pyx_r = evbuffer_get_length(((struct __pyx_obj_6gevent_4core_buffer *)__pyx_v_self)->__pyx___obj);
                ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    gevent/core.c:16161:14: warning: explicitly assigning value of variable of type 'PyObject *' (aka 'struct _object *') to itself [-Wself-assign]
      __pyx_self = __pyx_self;
      ~~~~~~~~~~ ^ ~~~~~~~~~~
    gevent/core.c:21886:33: warning: unused function '__Pyx_PyIndex_AsSsize_t' [-Wunused-function]
    static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
                                    ^
    gevent/core.c:21297:36: warning: unused function '__Pyx_PyInt_AsUnsignedChar' [-Wunused-function]
    static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
                                       ^
    gevent/core.c:21335:35: warning: unused function '__Pyx_PyInt_AsUnsignedInt' [-Wunused-function]
    static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
                                      ^
    gevent/core.c:21354:27: warning: unused function '__Pyx_PyInt_AsChar' [-Wunused-function]
    static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
                              ^
    gevent/core.c:21411:34: warning: unused function '__Pyx_PyInt_AsSignedChar' [-Wunused-function]
    static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
                                     ^
    gevent/core.c:21430:35: warning: unused function '__Pyx_PyInt_AsSignedShort' [-Wunused-function]
    static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
                                      ^
    gevent/core.c:21449:33: warning: unused function '__Pyx_PyInt_AsSignedInt' [-Wunused-function]
    static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
                                    ^
    gevent/core.c:21468:26: warning: unused function '__Pyx_PyInt_AsLongDouble' [-Wunused-function]
    static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
                             ^
    gevent/core.c:21592:35: warning: function '__Pyx_PyInt_AsLongLong' is not needed and will not be emitted [-Wunneeded-internal-declaration]
    static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
                                      ^
    gevent/core.c:21662:42: warning: function '__Pyx_PyInt_AsSignedLongLong' is not needed and will not be emitted [-Wunneeded-internal-declaration]
    static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
                                             ^
    27 warnings generated.
    ld: warning: ignoring file /usr/local/lib/libevent.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/lib/libevent.dylib
    Linking /private/tmp/easy_install-ovRlcN/gevent-0.13.6/build/lib.macosx-10.12-intel-2.7/gevent/core.so to /private/tmp/easy_install-ovRlcN/gevent-0.13.6/gevent/core.so
    zip_safe flag not set; analyzing archive contents...
    Copying gevent-0.13.6-py2.7-macosx-10.12-intel.egg to /Library/Python/2.7/site-packages
    Adding gevent 0.13.6 to easy-install.pth file
    
    Installed /Library/Python/2.7/site-packages/gevent-0.13.6-py2.7-macosx-10.12-intel.egg
    Searching for ws4py==0.2.4
    Reading https://pypi.python.org/simple/ws4py/
    No local packages or download links found for ws4py==0.2.4
    error: Could not find suitable distribution for Requirement.parse('ws4py==0.2.4')
    
    opened by nwwells 0
Owner
Jeff Lindsay
Jeff Lindsay
Library for building WebSocket servers and clients in Python

What is websockets? websockets is a library for building WebSocket servers and clients in Python with a focus on correctness and simplicity. Built on

Aymeric Augustin 4.3k Jan 4, 2023
WebSocket client for Python

websocket-client The websocket-client module is a WebSocket client for Python. It provides access to low level APIs for WebSockets. All APIs are for s

null 3.1k Jan 2, 2023
Django Channels HTTP/WebSocket server

daphne Daphne is a HTTP, HTTP2 and WebSocket protocol server for ASGI and ASGI-HTTP, developed to power Django Channels. It supports automatic negotia

Django 1.9k Dec 31, 2022
Websockify is a WebSocket to TCP proxy/bridge. This allows a browser to connect to any application/server/service. Implementations in Python, C, Node.js and Ruby.

websockify: WebSockets support for any application/server websockify was formerly named wsproxy and was part of the noVNC project. At the most basic l

noVNC 3.3k Jan 3, 2023
WebSocket emulation - Python server

SockJS-tornado server SockJS-tornado is a Python server side counterpart of SockJS-client browser library running on top of Tornado framework. Simplif

Serge S. Koval 854 Nov 19, 2022
一款为 go-cqhttp 的正向 WebSocket 设计的 Python SDK

Nakuru Project 一款为 go-cqhttp 的正向 WebSocket 设计的 Python SDK 在 kuriyama 的基础上改动 项目名来源于藍月なくる,图标由せら绘制 食用方法 将 nakuru 文件夹移至 Python 的 Lib/site-packages 目录下。

null 35 Dec 21, 2022
This websocket program is for data transmission between server and client. Data transmission is for Federated Learning in Edge computing environment.

websocket-for-data-transmission This websocket program is for data transmission between server and client. Data transmission is for Federated Learning

null 9 Jul 19, 2022
Using python-binance to provide websocket data to freqtrade

The goal of this project is to provide an alternative way to get realtime data from Binance and use it in freqtrade despite the exchange used. It also uses talipp for computing

null 58 Jan 1, 2023
WebSocket implementation in Python built on top of websockets python library. Similar to Node.js's ws.

ws WebSocket implementation in Python built on top of websockets python library. Similar to Node.js's ws. Basic usage. server.py import ws server = w

AceExpert 7 Jun 27, 2022
Benchmark a WebSocket server's message throughput ⌛

?? WebSocket Benchmarker ⌚ Message throughput is how fast a WebSocket server can parse and respond to a message. Some people consider this to be a goo

Andrew Healey 24 Nov 17, 2022
Whatsapp Clone using django, django-channels and websocket

whatsapp-clone Whatsapp Clone using django, django-channels and websocket Features : Signup/Login One on One personal chat with other user Some screen

Anshu Pal 14 Dec 25, 2022
Minecraft WebSocket

Minecraft-WebSocket Pythonでマインクラフトと通信します。 紹介動画 推奨設定 Minecraft Windows Edition (Education Edition) 1.17 以上 Python 3系(3.8.2で動作確認済み) 必要なモジュール ・asyncio ・w

Roii.py 2 Jul 7, 2022
Tetri5 - Multiplayer Websocket Backend

Tetri5 - Multiplayer Websocket Backend This repository is the backend of the multiplayer portion of the Tetri5 game client. It uses the python websock

Giovani Rodriguez 1 Dec 10, 2022
alien.py - Python interface to websocket endpoint of ALICE Grid Services

alien.py - Python interface to websocket endpoint of ALICE Grid Services Quick containerized testing: singularity

Adrian Sevcenco 6 Dec 14, 2022
image stream publish server over websocket

Image Stream Push Server 简介 通过浏览器网页实时查看图像处理结果。 环境 运行程序需要安装一下python依赖: tornado: 用于创建http及websocket服务; opencv-contrib-python: 用于图像数据源获取及图像处理。 使用 进入到src目

MrError404 1 Nov 4, 2021
AWS API Gateway Websocket Asynchronous Notifications Pusher

AWS API Gateway Websocket Asynchronous Pusher Fast AWS API Gateway websockets notifications' pusher using Python AsyncIO for managing asynchronous and

OBytes 5 May 15, 2022
Discord.py Connect to Discord voice call with websocket

Discord.py Connect to Discord voice call with websocket

WoahThatsHot 3 Apr 22, 2022
A websocket client for Source Filmmaker intended to trasmit scene and frame data to other applications.

SFM SOCK A websocket client for Source Filmmaker intended to trasmit scene and frame data to other applications. This software can be used to transmit

KiwifruitDev 2 Jan 8, 2022
Synci - Learning project to create a websocket based client server messaging application

Synci Learning project to create a websocket based client server messaging appli

null 2 Jan 13, 2022