Skip to content

mariyabytes/SocksBin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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