SocksBin

A command line pastebin, written in python

Stars
11
Forks
3
Open issues
1
Closed issues
0
Last release
almost 2 years ago
Last commit
about 2 years ago
Watchers
11
Total releases
1
Total commits
30
Open PRs
1
Closed PRs
1
Repo URL
Platform
License
gpl-3.0
Category
Usecase
Technology
Python
Offers premium version?
NO
Proprietary?
NO
About

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 magnum.wtf 6969
cat "script.sh" | nc magnum.wtf 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.magnum.wtf/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.magnum.wtf/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 magnum.wtf 6969"' >> .bashrc

macOS:

echo 'alias skb="nc magnum.wtf 9999"' >> .bash_profile

Copy output to clipboard

Linux (Bash):

echo 'alias skb="netcat magnum.wtf 6969 | xclip -selection c"' >> .bashrc
echo less typing now! | skb

macOS:

echo 'alias skb="nc magnum.wtf 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

<VirtualHost *:80>
        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

</VirtualHost>

  • 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.

Alternative Projects
No projects found

Subscribe to Open Source Businees Newsletter

Twice a month we will interview people behind open source businesses. We will talk about how they are building a business on top of open source projects.

We'll never share your email with anyone else.