python 端口的转发

实现端口的转发
tcpsocket.py 对基础的socket进行了封装

import socket

class baseSocket:
    def service(host:str,port:int,maxSuspend:int)->socket: 
        service_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)            # 创建 socket 对象
        service_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)        # 允许socket地址复用,防止出现 address alread use 问题
        service_socket.bind((host,port))
        service_socket.listen(maxSuspend)
        return service_socket
    def client(host:str,port:int):
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((host, port))
        return client

portForward.py 端口转发的程序

# coding: gbk  python文件的编码格式
import tcpSocket
import socket
import threading

def forward(localSocket, localAddr ,remoteSocket,remoteAddr):
   while True:
      localdata = localSocket.recv(1024)
      if not localdata:
         exit(0)
      remoteSocket.send(localdata)
   


def connectTask(localSocket, localAddr ,remoteSocket,remoteAddr):
      thdlocal = threading.Thread(target=forward, args=(localSocket,localAddr,remoteSocket,remoteAddr))
      thdlocal.daemon=True #设置daemon=True会标记其为守护线程,如果剩下的线程只有守护线程时,整个python程序都会退出
      thdremote = threading.Thread(target=forward, args=(remoteSocket,remoteAddr,localSocket,localAddr))
      thdremote.daemon=True #设置daemon=True会标记其为守护线程,如果剩下的线程只有守护线程时,整个python程序都会退出
      thdlocal.start()
      thdremote.start()

if __name__ == "__main__":
    host = socket.gethostname()
    localPort = 8090
    remotePort = 8081
    maxlisten = 5
    localservice = tcpSocket.baseSocket.service(host,localPort,maxlisten)
    remoteservice = tcpSocket.baseSocket.service(host,remotePort,maxlisten)
    while True:
         localSocket,localAddr = localservice.accept()
         print(f"连接地址为{localAddr}")
         remoteSocket,remoteAddr = remoteservice.accept()
         print(f"连接地址为{remoteAddr}")
         thd = threading.Thread(target=connectTask, args=(localSocket,localAddr,remoteSocket,remoteAddr))
         thd.daemon=True #设置daemon=True会标记其为守护线程,如果剩下的线程只有守护线程时,整个python程序都会退出
         thd.start()

相关推荐

  1. python 端口转发

    2024-07-13 05:18:07       32 阅读
  2. python udp端口范围映射转发

    2024-07-13 05:18:07       51 阅读
  3. linux端口转发

    2024-07-13 05:18:07       51 阅读
  4. nginx配置端口转发

    2024-07-13 05:18:07       63 阅读
  5. Linux端口转发几种常用方法

    2024-07-13 05:18:07       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 05:18:07       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 05:18:07       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 05:18:07       58 阅读
  4. Python语言-面向对象

    2024-07-13 05:18:07       69 阅读

热门阅读

  1. 软设之迭代器模式

    2024-07-13 05:18:07       23 阅读
  2. 华为od 100问 持续分享-2

    2024-07-13 05:18:07       27 阅读
  3. 7-3 打怪升级(25 分)

    2024-07-13 05:18:07       25 阅读
  4. AC修炼计划( AtCoder Regular Contest 178)A~C

    2024-07-13 05:18:07       22 阅读
  5. Linux学习笔记(三)文件权限

    2024-07-13 05:18:07       28 阅读
  6. 避免 WebSocket 连接被拒绝

    2024-07-13 05:18:07       24 阅读
  7. 小程序需要做等保测评吗?

    2024-07-13 05:18:07       20 阅读
  8. wireshark与tcpdump使用

    2024-07-13 05:18:07       21 阅读
  9. 韩国裸机云大宽带服务器主要特点和优势

    2024-07-13 05:18:07       25 阅读
  10. 【日常bug记录】el-checkbox 绑定对象数组

    2024-07-13 05:18:07       20 阅读
  11. UniVue@v1.3.0版本发布

    2024-07-13 05:18:07       27 阅读