
un túnel TCP inverso te permite acceder al objetivo detrás de NAT o firewall
shootback es un túnel TCP inverso que te permite acceder a un objetivo detrás de NAT o firewall
Túnel TCP inverso, permite que las máquinas de red interna detrás de NAT o firewall sean accesibles desde la red externa.
Consume menos del 1% de CPU y 8 MB de memoria con 800 conexiones concurrentes.
slaver es un único archivo y solo depende de la biblioteca estándar de python (2.7/3.4+).

requisito:
descargar git clone https://github.com/aploium/shootback
(opcional) si necesitas un slaver.py de un solo archivo, ejecuta python3 build_singlefile_slaver.py
ejecuta estos comandos
# master listen :10000 for slaver, :10080 for you
python3 master.py -m 0.0.0.0:10000 -c 127.0.0.1:10080
# slaver connect to master, and use example.com as tunnel target
# ps: you can use python2 in slaver, not only py3
python3 slaver.py -m 127.0.0.1:10000 -t example.com:80
# doing request to master
curl -v -H "host: example.com" 127.0.0.1:10080
# -- some HTML content from example.com --
# -- some HTML content from example.com --
# -- some HTML content from example.com --
un ejemplo más real (con ssl):
asume que tu master es 22.33.44.55 (como en el gráfico de arriba)
# slaver_local_ssh <---> slaver <--[SSL]--> master(22.33.44.55) <--> You
# ---- master ----
python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10022 --ssl
# ---- slaver ----
# ps: the `--ssl` option is for slaver-master encryption, not for SSH
python(or python3) slaver.py -m 22.33.44.55:10000 -t 127.0.0.1:22 --ssl
# ---- YOU ----
ssh 22.33.44.55 -p 10022
para más ayuda, consulta python3 master.py --help y python3 slaver.py --help
ejecutar como daemon:
nohup python(or python3) slaver.py -m host:port -t host:port -q &
o:
# screen is a linux command
screen
python(or python3) slaver.py -m host:port -t host:port
# press ctrl-a d to detach screen
# and if necessary, use "screen -r" to reattach
CUALQUIER servicio que use TCP es compatible con shootback. HTTP/FTP/Proxy/SSH/VNC/...
shootback por sí solo solo hace el trabajo de transmisión, no maneja cifrado ni proxy.
sin embargo, puedes usar un proxy de terceros (ej: shadowsocks) como objetivo del slaver.
por ejemplo:
shadowsocks_server<-->shootback_slaver<-->shootback_master<-->shadowsocks_client(socks5)
select.select() de CPython, shootback NO puede manejar más de 512 conexiones concurrentes, puedes encontrarValueError: too many file descriptors in select()