同步操作将从 usualheart/frp-python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: utf-8 -*-# tcp mappingimport sysimport socketimport loggingimport threading# 接收数据缓存大小PKT_BUFF_SIZE = 10240logger = logging.getLogger("Proxy Logging")formatter = logging.Formatter('%(name)-12s %(asctime)s %(levelname)-8s %(lineno)-4d %(message)s', '%Y %b %d %a %H:%M:%S',)stream_handler = logging.StreamHandler(sys.stderr)stream_handler.setFormatter(formatter)logger.addHandler(stream_handler)logger.setLevel(logging.DEBUG)# 单向流数据传递def tcp_mapping_worker(conn_receiver, conn_sender):logger.info("start ")while True:try:data = conn_receiver.recv(PKT_BUFF_SIZE)except Exception as e:logger.debug(e)logger.debug('Connection closed.')breakif not data:logger.info('No more data is received.') # 正常情况下不会到这,一般是某个连接断了breaktry:conn_sender.sendall(data)except Exception:logger.error('Failed sending data.')break# logger.info('Mapping data > %s ' % repr(data))# logger.info('Mapping > %s -> %s > %d bytes.' % (conn_receiver.getpeername(), conn_sender.getpeername(), len(data)))conn_receiver.close()conn_sender.close()return# 端口映射请求处理def join(connA, connB):threading.Thread(target=tcp_mapping_worker, args=(connA, connB)).start()threading.Thread(target=tcp_mapping_worker, args=(connB, connA)).start()returnif __name__ == '__main__':# 测试sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('0.0.0.0', 8080))# sock.setblocking(False)sock.listen(100)conn1,addr1 =sock.accept()sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock2.bind(('0.0.0.0', 7000))sock2.listen(100)# 类似frpcserver_conn = socket.create_connection(('localhost', 7000))conn2,addr2 =sock2.accept()join(conn1,conn2)target_conn = socket.create_connection(('192.168.1.101', 3389))join(server_conn,target_conn)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。