Script Python que permite fazer o port forwarding de qualquer porta TCP.
```python
#!/usr/bin/env python3
"""
TCP Port Forwarder Minimalista
Uso: python3 pf.py <listen_port>:<dest_host>:<dest_port> [...]
Exemplos:
python3 pf.py 8080:127.0.0.1:80
python3 pf.py 10111:127.0.0.1:111 12049:127.0.0.1:2049 10435:127.0.0.1:60435
"""
import socket
import threading
import sys
def fwd(src, dst):
try:
while True:
d = src.recv(8192)
if not d: break
dst.sendall(d)
except: pass
try: src.close()
except: pass
try: dst.close()
except: pass
def handle(c, dh, dp):
try:
s = socket.socket()
s.connect((dh, dp))
threading.Thread(target=fwd, args=(c, s), daemon=True).start()
fwd(s, c)
except Exception as e:
print(f"[!] Erro conectando {dh}:{dp}: {e}")
try: c.close()
except: pass
def listen(lp, dh, dp):
try:
srv = socket.socket()
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind(("0.0.0.0", lp))
srv.listen(50)
print(f"[*] {lp} -> {dh}:{dp}")
while True:
c, a = srv.accept()
threading.Thread(target=handle, args=(c, dh, dp), daemon=True).start()
except Exception as e:
print(f"[!] Erro porta {lp}: {e}")
if len(sys.argv) < 2:
print("Uso: python3 pf.py <lport>:<dhost>:<dport> [...]")
print("Ex: python3 pf.py 8080:127.0.0.1:80")
print("Ex: python3 pf.py 10111:127.0.0.1:111 12049:127.0.0.1:2049")
sys.exit(1)
for arg in sys.argv[1:]:
p = arg.split(":")
if len(p) == 3:
lp, dh, dp = int(p[0]), p[1], int(p[2])
elif len(p) == 2:
lp, dh, dp = int(p[0]), "127.0.0.1", int(p[1])
else:
print(f"[!] Formato invalido: {arg}")
continue
threading.Thread(target=listen, args=(lp, dh, dp), daemon=True).start()
print("[*] Ctrl+C para sair")
try:
while True: threading.Event().wait(60)
except KeyboardInterrupt:
print("\n[*] Encerrando...")
```
Versão Mini:
```python
#!/usr/bin/env python3
# Mini TCP Forwarder - Uso: python3 pf_mini.py lport:dhost:dport [...]
import socket,threading,sys
def f(a,b):
try:
while 1:
d=a.recv(8192)
if not d:break
b.sendall(d)
except:pass
def h(c,dh,dp):
try:s=socket.socket();s.connect((dh,dp));threading.Thread(target=f,args=(c,s),daemon=1).start();f(s,c)
except:pass
def l(lp,dh,dp):
s=socket.socket();s.setsockopt(1,2,1);s.bind(("",lp));s.listen(9);print(f"[*]{lp}->{dh}:{dp}")
while 1:c,_=s.accept();threading.Thread(target=h,args=(c,dh,dp),daemon=1).start()
for a in sys.argv[1:]:p=a.split(":");threading.Thread(target=l,args=(int(p[0]),p[1]if len(p)>2 else"127.0.0.1",int(p[-1])),daemon=1).start()
print("[*]Running");exec("while 1:__import__('time').sleep(99)")
```
Diminuindo ainda mais:
```
cat /tmp/pf_mini.py | base64 -w0
```