python实现tcp daili服务
本帖最后由 SonDanmbi 于 2020-4-11 22:53 编辑好久没发帖了
问题场景:服务器A的IP能连数据库,应用放在服务器A上,但是开发调试在本地,本地无法直接连接数据库,需要在服务器A上挂个daili
用python弄了个tcp daili,源代码是在网上东拼西凑找的,但是不能用,改了改基本实现了我需要的功能,试用了下感觉没啥问题了分享给大家
import select
import socket
from concurrent.futures import ThreadPoolExecutor
BUFFER_SIZE = 2 ** 12
def ip_to_tuple(ip):
ip, port = ip.split(':')
return ip, int(port)
def process(s_src, _s_dst):
print('_s_dst==', _s_dst, type(_s_dst))
s_dst = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s_dst.connect(_s_dst)
try:
while True:
s_read, _, _ = select.select(, s_dst], [], [])
for s in s_read:
data = s.recv(BUFFER_SIZE)
if not data:
break
if s == s_src:
s_dst.sendall(data)
elif s == s_dst:
s_src.sendall(data)
except Exception as e:
print('e==', e)
try:
s_dst.shutdown(socket.SHUT_RDWR)
s_dst.close()
except Exception as e_s_dst:
print('e_s_dst==', e_s_dst)
try:
s_src.shutdown(socket.SHUT_RDWR)
s_src.close()
except Exception as e_s_src:
print('e_s_src==', e_s_src)
pass
def tcp_proxy(src, dst):
print('Starting TCP proxy...')
print('Src: %s' % src)
print('Dst: %s' % dst)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(ip_to_tuple(src))
s.listen(5)
pool = ThreadPoolExecutor(128)
while 1:
s_src, _s_dst = s.accept()
print('s_src==', s_src)
print('_s_dst==', _s_dst)
pool.submit(process, s_src, ip_to_tuple(dst))
# process(s_src, ip_to_tuple(dst))
if __name__ == '__main__':
#效果:访问127.0.0.1:11011 相当于访问127.0.0.1:3306,可用于数据库限制连接IP的情况,在能连数据库的服务器上运行这个脚本即可
tcp_proxy('127.0.0.1:11011', '127.0.0.1:3306') 楼主可以用ssh隧道。比这个方便多了 本帖最后由 games 于 2020-4-12 21:20 编辑
端口转发,ssh隧道都行
转发TCP
将本地6789端口穿透到公网的9876端口中,使用命令:#可以自行设置公网端口,这里默认6789,如果你要转发SSH端口,那就改成你的SSH端口ssh -p 3333 -R 9876:localhost:6789 moerats.com 虽然目前用不到,但还是收藏备用:handshake
页:
[1]