
um túnel TCP reverso permite acessar um alvo atrás de NAT ou firewall
shootback é um túnel TCP reverso que permite acessar um destino atrás de NAT ou firewall
Túnel TCP reverso, que permite que máquinas internas atrás de NAT ou firewall sejam acessadas pela rede externa.
Consome menos de 1% de CPU e 8MB de memória sob 800 conexões simultâneas.
slaver é arquivo único e depende apenas da biblioteca padrão do Python (2.7/3.4+).

Requisitos:
Baixe com git clone https://github.com/aploium/shootback
(Opcional) Se precisar de um slaver.py em arquivo único, execute python3 build_singlefile_slaver.py
Execute estes comandos
# master escuta em :10000 para slaver, :10080 para você
python3 master.py -m 0.0.0.0:10000 -c 127.0.0.1:10080
# slaver conecta ao master e usa example.com como destino do túnel
# obs: você pode usar python2 no slaver, não apenas py3
python3 slaver.py -m 127.0.0.1:10000 -t example.com:80
# fazendo requisição ao master
curl -v -H "host: example.com" 127.0.0.1:10080
# -- algum conteúdo HTML de example.com --
# -- algum conteúdo HTML de example.com --
# -- algum conteúdo HTML de example.com --
Um exemplo mais realista (com ssl):
suponha que seu master seja 22.33.44.55 (como no gráfico acima)
# slaver_local_ssh <---> slaver <--[SSL]--> master(22.33.44.55) <--> Você
# ---- master ----
python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10022 --ssl
# ---- slaver ----
# obs: a opção `--ssl` é para criptografia slaver-master, não para SSH
python(ou python3) slaver.py -m 22.33.44.55:10000 -t 127.0.0.1:22 --ssl
# ---- VOCÊ ----
ssh 22.33.44.55 -p 10022
Para mais ajuda, veja python3 master.py --help e python3 slaver.py --help
Executar como daemon:
nohup python(ou python3) slaver.py -m host:porta -t host:porta -q &
ou:
# screen é um comando do linux
screen
python(ou python3) slaver.py -m host:porta -t host:porta
# pressione ctrl-a d para desanexar o screen
# e, se necessário, use "screen -r" para reanexar
Qualquer serviço que use TCP pode ser usado com shootback. HTTP/FTP/Proxy/SSH/VNC/...
O shootback em si apenas faz o trabalho de transmissão, não lida com criptografia ou proxy.
No entanto, você pode usar um proxy de terceiros (ex: shadowsocks) como destino do slaver.
Por exemplo:
shadowsocks_servidor<-->shootback_slaver<-->shootback_master<-->shadowsocks_cliente(socks5)
select.select() do CPython,
o shootback não pode lidar com mais de 512 conexões simultâneas, você pode encontrarValueError: too many file descriptors in select()