🤖 brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers

Overview

scheme

Main docs

brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers (plain text data). That is, although it can be accessed from a browser, brwrs will not correctly interpret the browser's GET request.

brwrs uses a request protocol similar to HTTP(S), but aims to simplify it a bit, removing unnecessary elements such as the UserAgent and browser fingerprinting. By default, the server software does not log IPs, but that can be easily achieved modifying the source code.

Protocol

A standard request that wants the contents of a particular file looks like this (server console):

(server)
GET request -> GET index.txt
Requested file -> static/index.txt
Response sent

To do so, the client sends a GET index.txt request to the server, getting a response like this:

(client)
Hello World!

Requests

GET

GET requests have the following structure. GET

NODE

NODE requests are as following. NODE

scheme

Setup

Server administrator

  • Clone or download the brwrs-server folder, build it (cargo build --release) and place the generated binary in your preferred folder.
  • Then, just start your server with ./brwrs-server . The default port is 90 if no port is supplied.

Server

The server directory structure should be:

brwrs-server
/static
    index.txt
    MOTD

MOTD is an optional but recommended file. If no MOTD file is supplied, an OK response will be sent to answer empty GET requests.

Normal user

  • First, find some cool brwrs instances you want to connect to.
  • Clone or download the brwrs-client folder, build it (cargo build --release) and place the binary generated in your preferred folder.
  • There are different ways of connecting to a server.
    • ./brwrs-client :90, just sends an empty GET request.
    • ./brwrs-client :90 , asks for a file.
    • ./brwrs-client :90 :90 , asks :90 to work as a proxy for you to reach , that is hosted in :90.

Client

The client does not need any extra configuration steps. Anyway, having an AUTO file is recommended to create NODE requests quickly. The AUTO file stores brwrs server(s) that the user trust. Whenever the user wants to proxy a request, every server (in order) stored in the AUTO file will be reached and asked to proxy the request.

(AUTO)
localhost:90
example.example:90
brwrs.brwrs:90
...

Extra docs

These docs are not needed for a normal use, but might be interesting to read to understand better the docs above.

Connection

To turn on your server, just run the binary file generated by the brwrs-client library. Create a ./static directory at the location you are running the server, so clients can request files.

Important. Before running a production server, bear in mind that the file request method (server-side) may have security bugs. You may want to restrict what the binary can read.

$ ./brwrs-server
Server listening -> 0.0.0.0:90

To get connected to a server from the client, just run the brwrs-server binary specifying the host (e.g., localhost:90) and, optionally, the path.

$ ./brwrs-client localhost:90 index.txt
Hello World!

Proxying with nodes

brwrs servers are capable of getting a NODE request from a client, pass it to another server through a GET request and give to the original client the response of the second server. That is, a simple proxy.

$ ./brwrs-client localhost:90 localhost:100 index.txt
(server:90)
NODE request -> NODE localhost:100 index.txt
Reaching destination server
Destination server reached
Sending the response to the original client

at the same time

(server:100)
GET request -> GET index.txt
Requested file -> static/index.txt
Response sent
$ ./brwrs-client localhost:90 localhost:100 index.txt
Hello World!

See NODE for a simple scheme.

To do

  • Encryption
  • Safer static server
You might also like...
An HTTP server wrapper for omnisette. Supports both V1 (Provision) and V3 of anisette servers.

omnisette-server An HTTP server wrapper for omnisette. Supports both V1 (Provision) and V3 of anisette servers. Setup First, download the Apple Music

a smol tcp/ip stack

smoltcp smoltcp is a standalone, event-driven TCP/IP stack that is designed for bare-metal, real-time systems. Its design goals are simplicity and rob

A high performance TCP SYN port scanner.

Armada A High-Performance TCP SYN scanner What is Armada? Armada is a high performance TCP SYN scanner. This is equivalent to the type of scanning tha

TCP is so widely used, however QUIC may have a better performance.

TCP is so widely used, however QUIC may have a better performance. For softwares which use protocols built on TCP, this program helps them take FULL advantage of QUIC.

Library + CLI-Tool to measure the TTFB (time to first byte) of HTTP requests. Additionally, this crate measures the times of DNS lookup, TCP connect and TLS handshake.

TTFB: CLI + Lib to Measure the TTFB of HTTP/1.1 Requests Similar to the network tab in Google Chrome or Mozilla Firefox, this crate helps you find the

Simple utility to ping a TCP port.

TcpPing Simple utility to ping a TCP port. Example tcpping 1.1.1.1 53 -b en0 -i 1 -t 4 Connected to 1.1.1.1:53 in 21 ms Connected to 1.1.1.1:53 in 3

Transforms UDP stream into (fake) TCP streams that can go through Layer 3 & Layer 4 (NAPT) firewalls/NATs.
Transforms UDP stream into (fake) TCP streams that can go through Layer 3 & Layer 4 (NAPT) firewalls/NATs.

Phantun A lightweight and fast UDP to TCP obfuscator. Table of Contents Phantun Latest release Overview Usage 1. Enable Kernel IP forwarding 2. Add re

 RedLizard - A Rust TCP Reverse Shell with SSL
RedLizard - A Rust TCP Reverse Shell with SSL

RedLizard - A Rust TCP Reverse Shell with SSL RedLizard Rust TCP Reverse Shell Server/Client This is a reverse shell in Rust called RedLizard, basical

Passive TCP/IP fingerprinting tool

This tool analyzes first stage of TCP handshake (SYN) and recognize operating system of client Build To build sp0ky, you need to install Rust git clon

Owner
daCoUSB
daCoUSB
Send files over TCP. Quick and simple. Made in Rust.

SFT Multithreaded utility to send files over TCP. The sender writes a header containing the filename, and then the contents of the file, buffered, to

Orel 0 Dec 24, 2021
Rust implementation of TCP + UDP Proxy Protocol (aka. MMProxy)

mmproxy-rs A Rust implementation of MMProxy! ?? Rationale Many previous implementations only support PROXY Protocol for either TCP or UDP, whereas thi

Saikō Technology 3 Dec 29, 2022
An handy tool that is intended to help your inventory cleanup or dump.

NeosVR Inventory Management Notes to foreign users This readme is written in Japanese. Please use external tool to translate this document into your l

Kisaragi 16 Dec 15, 2022
A versatile and efficient proxy framework with nice features suitable for various use cases.

A versatile and efficient proxy framework with nice features suitable for various use cases.

null 1.7k Jan 9, 2023
A proof of concept implementation of RTSP over Dahua P2P protocol.

RTSP Streaming with Dahua P2P Protocol Implementation This is a proof of concept implementation of RTSP over Dahua P2P protocol. It works with Dahua a

null 6 Dec 21, 2023
The classic game of Pong, in your terminal, over ICMPv6!

icmpong The classic game of Pong, in your terminal, over ICMPv6! icmpong.mov How does this work? We are basically "using the ping command to send data

Ryan 3 Nov 9, 2023
Safe Rust crate for creating socket servers and clients with ease.

bitsock Safe Rust crate for creating socket servers and clients with ease. Description This crate can be used for Client <--> Server applications of e

Lorenzo Torres 3 Nov 25, 2021
A library to quickly create OAuth2.1 compliant servers from scratch.

oauth21-server A library to easily create an OAuth 2.1 compliant authorization server. The motivation to develop this library comes from the fact that

Revanth Pothukuchi 3 Mar 14, 2022
chain nats.io servers with transformation & processing pipelines

NATS proxy service Simple tool to forward specific topics from one nats.io cluster to the same server or another. Provides support to process messages

Marquitos 8 Sep 19, 2022
Web3-proxy: a fast caching and load balancing proxy for web3 (Ethereum or similar) JsonRPC servers.

web3-proxy Web3-proxy is a fast caching and load balancing proxy for web3 (Ethereum or similar) JsonRPC servers. Signed transactions (eth_sendRawTrans

null 55 Jan 8, 2023