如何将类作为非阻塞执行?

2024-09-29 23:15:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个代理来截取、解密、打印数据包并将其发送到其原始目的地,然而,我遇到了一个难题。。我可以很好地执行clienttoserver,但随后需要以非阻塞方式启动servertoclient。 似乎没有关于如何执行类似操作的资源、答案或示例,而且由于我不能,脚本失败,因为它需要接收客户端数据包,然后是服务器数据包,而不仅仅是服务器数据包

注: 我可以使用线程,因为它们需要通信数据并同时执行

代码段:

class clienttoserver:
    def __init__(self):
        self.ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.ss.connect(("place.server.end",1234))
        key = "<key>"
        self.cts = rc4.new(key)
        skip = 'a'*len(key)
        self.cts.encrypt(skip)
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.bind(('',1234))
        self.s.listen(500)
        self.client, self.addr = self.s.accept()

    def main(self):
        stcc = servertoclient()
        stcc.main(self.ss)
        while True:
            pack = self.client.recv(1500)
            decpack = self.cts.decrypt(pack[7:])
            print "Packet from Client"
            msgid = struct.unpack(">H",decpack[0:2])
            print "Msg ID: ",msgid
            print "Payload Len: ",decpack[2:4].encode("hex")
            print "Payload: ",decpack[7:]
            print ""
            self.ss.send(pack)


class servertoclient:
    def __init__(self):
        key = "<key>"
        self.stc = rc4.new(key)
        skip = 'a'*len(key)
        self.stc.encrypt(skip)

    def main(self, ss):
        while True:
            pack = ss.recv(1500)
            decpack = self.stc.decrypt(pack[7:])
            print "Packet from Server:"
            msgid = struct.unpack(">H",decpack[0:2])
            print "Msg ID: ",msgid
            print "Payload Len: ",decpack[2:5].encode("hex")
            print "Payload: ",decpack[7:]
            print ""
            self.client.send(pack)

——还有我的发射脚本

import proxy
stpr = proxy.clienttoserver()
stpr.main()

Tags: keyselfmaindefsocket数据包sspack

热门问题