国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python簡單實現的代理服務器端口映射功能示例

2020-02-22 23:38:34
字體:
來源:轉載
供稿:網友

本文實例講述了Python簡單實現的代理服務器端口映射功能。分享給大家供大家參考,具體如下:

一 代碼

1、模擬服務端代碼

import sysimport socketimport threading#回復消息,原樣返回def replyMessage(conn):  while True:    data = conn.recv(1024)    conn.send(data)    if data.decode().lower() == 'bye':      break  conn.close()def main():  sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  sockScr.bind(('', port))  sockScr.listen(200)  while True:    try:      conn, addr = sockScr.accept()      #只允許特定主機訪問本服務器      if addr[0] != onlyYou:        conn.close()        continue      #創建并啟動線程      t = threading.Thread(target=replyMessage, args=(conn,))      t.start()    except:      print('error')if __name__ == '__main__':  try:    #獲取命令行參數    port = int(sys.argv[1])    onlyYou = sys.argv[2]    main()  except:    print('Must give me a number as port')

2、模擬代理服務器代碼

import sysimport socketimport threadingdef middle(conn, addr):  #面向服務器的Socket  sockDst = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  sockDst.connect((ipServer,portServer))  while True:    data = conn.recv(1024).decode()    print('收到客戶端消息:'+data)    if data == '不要發給服務器':      conn.send('該消息已被代理服務器過濾'.encode())      print('該消息已過濾')    elif data.lower() == 'bye':      print(str(addr)+'客戶端關閉連接')      break    else:      sockDst.send(data.encode())      print('已轉發服務器')      data_fromServer = sockDst.recv(1024).decode()      print('收到服務器回復的消息:'+data_fromServer)      if data_fromServer == '不要發給客戶端':        conn.send('該消息已被代理服務器修改'.encode())        print('消息已被篡改')      else:        conn.send(b'Server reply:'+data_fromServer.encode())        print('已轉發服務器消息給客戶端')  conn.close()  sockDst.close()def main():  sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  sockScr.bind(('', portScr))  sockScr.listen(200)  print('代理已啟動')  while True:    try:      conn, addr = sockScr.accept()      t = threading.Thread(target=middle, args=(conn, addr))      t.start()      print('新客戶:'+str(addr))    except:      passif __name__ == '__main__':  try:    #(本機IP地址,portScr)<==>(ipServer,portServer)    #代理服務器監聽端口    portScr = int(sys.argv[1])    #服務器IP地址與端口號    ipServer = sys.argv[2]    portServer = int(sys.argv[3])    main()  except:    print('Sth error')

3、模擬客戶端代碼

import sysimport socketdef main():  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  sock.connect((ip, port))  while True:    data = input('What do you want to ask:')    sock.send(data.encode())    print(sock.recv(1024).decode())    if data.lower() == 'bye':      break  sock.close()if __name__ == '__main__':  try:    #代理服務器的IP地址和端口號    ip = sys.argv[1]    port = int(sys.argv[2])    main()  except:    print('Sth error')            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵台县| 林芝县| 南皮县| 赤壁市| 龙山县| 阿勒泰市| 上林县| 沙河市| 诸暨市| 长垣县| 江安县| 新沂市| 罗山县| 那坡县| 沐川县| 乌兰浩特市| 镇雄县| 禹州市| 工布江达县| 板桥市| 衡南县| 金山区| 景洪市| 亳州市| 靖远县| 五莲县| 大新县| 南木林县| 和田市| 昌吉市| 香河县| 安龙县| 惠东县| 宜昌市| 沁阳市| 仙桃市| 菏泽市| 漳平市| 淮阳县| 寿光市| 浦北县|