Skip to content

Lightweight asynchronous socks proxy client for PHP

License

Notifications You must be signed in to change notification settings

Postuf/SocksProxyAsync

Repository files navigation

SocksProxyAsync

Asynchronous SOCKS5 client library

Gitpod ready-to-code

codecov

Requirements

  • PHP 7.4+
  • Composer
    • ext-sockets

Quick start

First of all, add library to your app user composer:

composer require postuf/socks-proxy-async

How it works

Say, you have a socket and an event loop:

$socket = new SocketAsync(/* ... */);
while(true) {
  // process events
  if (!$socket->ready()) {
    $socket->poll();
  } else {
    // your logic ...
  }
}

We create socket, set socket_set_nonblock, when socket is connected, isReady flag is set. Internal logic is organized as state machine. You can extend it and add more steps, so that only $socket->poll() is called on event loop, then you just check the state and process received updates.

Testing

Tests require working proxy and http server to be up and running, use node/proxy.js to start proxy, node/http/start.sh (./start.sh within its subdir) to start http server. By default, http server runs on port 8080, proxy occupies port 1080, tests use these ports.

DNS-related tests require dns server (node/named.js) to be up and running.

Make commands

  • make all - run all checks

  • make test - run tests

  • make cs - run codesniffer checks

  • make psalm - run psalm checks

  • make stan - run stan checks

  • make cs - run stan and psalm checks

  • make get-security - get security checker

  • make security - run security checker