Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mariyabytes/SocksBin

A command line pastebin, written in python
https://github.com/mariyabytes/SocksBin

Last synced: 11 days ago
JSON representation

A command line pastebin, written in python

Awesome Lists containing this project

README

        

SocksBin
=====

Command line pastebin for sharing files and command outputs.

# How to use

### Requirements
To use this, you'll need a tool called **netcat**. Try typing 'nc' or 'netcat' into the terminal, you probably have it already !

_________
### Client Side

* Self-Explanatory examples using the public server

```
echo "Hello World !" | nc domain.com 6969
```

```
cat "script.sh" | nc domain.com 6969
```

* In case you started the server on localhost

```
df | nc localhost 9999
```

____

You will receive a url to the text-only paste as a response to the above commands. e.g.

```
https://socksbin.domain.com/33fdd867
```

This has a built-in Pygment-based beautifier. add "_color" to the end of the received url, to get a beautified paste.

```
https://socksbin.domain.com/33fdd867_color
```

In case your text isn't beautified, include the *shebang* `#!` which is the first two bytes of an executable

e.g. the first line should be `#! /usr/bin/env python` for proper python formatting

-------------------------------------------------------------------------------

## Cool stuff

Make this much easier to use by adding an alias to your rc file. For example:

-------------------------------------------------------------------------------

### `skb` alias

__Linux (Bash):__

```
echo 'alias skb="nc domain.com 6969"' >> .bashrc
```

__macOS:__

```
echo 'alias skb="nc domain.com 9999"' >> .bash_profile
```

-------------------------------------------------------------------------------

### Copy output to clipboard

__Linux (Bash):__
```
echo 'alias skb="netcat domain.com 6969 | xclip -selection c"' >> .bashrc
```

```
echo less typing now! | skb
```

__macOS:__

```
echo 'alias skb="nc domain.com 6969 | pbcopy"' >> .bash_profile
```

```
echo less typing now! | skb
```

__Remember__ to reload the shell with `source ~/.bashrc` or `source ~/.bash_profile` after adding any of provided above!

-------------------------------------------------------------------------------

# Server Side

## Configration

* Clone

```
git clone https://github.com/MagnumDingusEdu/SocksBin.git
```

* Set up virtual environment

```
python3 -m venv venv

# or

virtualenv venv
```

* Install required packages

```
source venv/bin/activate
pip install -r requirements.txt
```

* Make the script executable

```
chmod +x paster.py
```

_____________________________________________

# Usage

```
usage: ./paster.py [-o output directory]
[-n listen_address] [-p port] [-s slug size]
[-l logfile] [-b buffer size][-h help]
```

These are command line arguments. None of these are required to run the server. Defaults are specified in the section below.

_____________________________________________

### Settings

-------------------------------------------------------------------------------

#### Output directory `-o` `--output_directory`

Absolute, or relative path to the directory where the pastes will be stored, as plaintext files.

```
./paster.py -o ./pastes
```

```
./paster.py -o /home/www/pastes/
```

__Default value:__ `$HOME/socksbin`

-------------------------------------------------------------------------------

#### URL `-u` `--url`

This will be used as a prefix for an url received by the client.
Value will be prepended with `$url`.

```
./paster.py -u https://domain.com/
```

```
./paster.py -u https://subdomain.domain.com/
```

```
./paster.py -u https://subdomain.domain.com/pastes/
```

__Default value:__ `http://localhost/`

-------------------------------------------------------------------------------

#### Slug size `-s` `--slug_size`

This will force slugs to be of required length:

```
./paster.py -s 6
```

__Output url with default value__: `http://localhost/********`,
where * is a randomized character

__Output url with example value 6__: `http://localhost/******`,
where * is a randomized character

__Default value:__ 8

-------------------------------------------------------------------------------

#### Buffer size `-b` `--buffer_size`

This parameter defines size of the buffer in bytes, when making a connection.
TCP has a max buffer size of 60K.
```
./paster.py -b 4096
```

__Default value:__ 32768

-------------------------------------------------------------------------------

#### Log file `-l` `--log_file`

```
./paster.py -l /home/user/socksbin.log.txt
```

The log file will only be made if you specify this argument. Make sure that this file is user writable.

__Default value:__ not set

-------------------------------------------------------------------------------

#### Queue Depth `-q` `--queue_depth`

```
./paster.py -q 10
```

The helps to properly manage simultaneous connections. The maximum value is system dependent. For example, on Linux, see /proc/sys/net/core/somaxconn

__Default value:__ 10

------------------------------------------------------------------------------

### Running as a service

If you're using systemd, follow these steps:

* Create the service file

```
sudo touch /lib/systemd/system/socksbin.service
```

* Add the following code to the file

```
[Unit]
Description=Socksbin Server
After=multi-user.target

[Service]
Type=idle
ExecStart=/home/user/socksbin/venv/bin/python /home/user/socksbin/paster.py -o /var/www/socksbin -s 8 -p 6969 -l /home/user/socklog.txt -u https://subdomain.yourdomain.com/

[Install]
WantedBy=multi-user.target
```

Replace */home/user/socksbin* with the path to your socksbin installation. Save and exit.

* Set appropriate permissions

```
sudo chmod 644 /lib/systemd/system/socksbin.service
```

* Restart the systemd daemon, and enable your service

```
sudo systemctl daemon-reload
sudo systemctl start socksbin
sudo systemctl enable socksbin
```

This will make sure it remains up even accross reboots.

To check the current status of your service:

```
sudo systemctl status socksbin
```

---------------------------------------------------------------------

## Example Server Configs

This does not have a web server built in, so you can use this with your existing web server, to make files available to the internet.

* Example apache config

```

ServerName subdomain.mysite.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/socksbin
DirectoryIndex index.html

ErrorLog ${APACHE_LOG_DIR}/socksbin_error.log
CustomLog ${APACHE_LOG_DIR}/socksbin_access.log combined

```

* Example nginx config

```
server {
listen 80;
server_name subdomain.mysite.com;
charset utf-8;

location / {
root /var/www/socksbin/;
index index.txt index.html;
}
}
```

**Please make sure that you put default file, e.g. index.html, so that people can't access all your files freely.**

__________________________________________________________________