国产探花免费观看_亚洲丰满少妇自慰呻吟_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')            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景洪市| 孙吴县| 闵行区| 荣昌县| 天台县| 逊克县| 凭祥市| 阳西县| 康保县| 麦盖提县| 江口县| 丰城市| 甘泉县| 辽宁省| 天祝| 汾西县| 兴义市| 嵩明县| 宜良县| 崇义县| 龙山县| 修文县| 平罗县| 博白县| 稻城县| 巫溪县| 澎湖县| 鹤山市| 五家渠市| 翁源县| 镇康县| 灵台县| 泰来县| 满城县| 吉木萨尔县| 台中市| 秭归县| 蓬莱市| 克山县| 铜梁县| 乌鲁木齐县|