python 转发端口

来源:互联网 发布:音频矩阵切换器 编辑:程序博客网 时间:2024/06/05 15:37

转发端口可以用于研究协议


import socketimport sysimport threadingimport timedef printdata(tag, data):    print tag,len(data)    align = 32    linenum = len(data) / align + 1    emptynum = linenum * align - len(data)    for i in range(0, emptynum):        data = data + "\0"    title = ""    for i in range(0, align):        title = title + "%02X " % i    print title    for i in range(0, linenum):        left = ""        right = ""        for j in range(0, align):            left = left + "%02X " % ord(data[i * align + j])            right = right + data[i * align + j]        print left, right.replace("\n","").replace("\r","")def deal_with_packet(xfrom, xto):    BUFSIZE = 20480    while True:        try:            time.sleep(2)            data = xfrom.recv(BUFSIZE)            printdata("send:", data)            xto.sendall(data)            time.sleep(2)            data = xto.recv(BUFSIZE)            printdata("recv:", data)            xfrom.sendall(data)        except Exception as e:            print eif __name__ == "__main__":    if len(sys.argv) < 3 or sys.argv[1].find(':') == -1 or sys.argv[2].find(':') == -1:        print "Usage:%s srcip:srcport dstip:dstport" % sys.argv[0]        sys.exit()    srcip, srcport = sys.argv[1].split(':')    dstip, dstport = sys.argv[2].split(':')    srcportnum = int(srcport)    dstportnum = int(dstport)    print "relay from %s:%s to %s:%s" % (srcip, srcport, dstip, dstport)    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    server.bind((srcip, srcportnum))    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    try:        client.connect((dstip, dstportnum))    except Exception:        print "couldn't connect to ", dstip, dstport        server.close()        client.close()        sys.exit()    server.listen(1)    ss, addr = server.accept()    print "got connected from ", addr    threading.Thread(target = deal_with_packet, args = (ss, client,)).start()    while True:        uin = input("")        if uin.name == "exit":            break    server.close()    client.close()




0 0