人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python基于socketserver實(shí)現(xiàn)并發(fā),驗(yàn)證客戶端的合法性

發(fā)布日期:2022-08-07 14:18 | 文章來源:腳本之家

一、socketserver實(shí)現(xiàn)并發(fā)

tcp協(xié)議的socket是只能和一個(gè)客戶端通信的,使用socketserver可以實(shí)現(xiàn)和多個(gè)客戶端通信,他是在socket的基礎(chǔ)上進(jìn)行的封裝,底層還是調(diào)用的socket。

socket是底層模塊

socketserver是基于socket完成的

socketserver代碼格式:

服務(wù)端:

import socketserver  # 引入模塊
import time
​
​
# 類名隨便定義,但是必須繼承socketserver.BaseRequestHandler此類。
class Myserver(socketserver.BaseRequestHandler):
​
 def handle(self):  # handle方法,固定名字
  conn = self.request  # conn相當(dāng)于每個(gè)客戶端連接過來的,客戶端信息
  '''
  以下就是基于conn客戶端信息,對每個(gè)客戶端鏈接到服務(wù)端必須做的操作
  conn——>等于客戶端的連接信息
  以此實(shí)現(xiàn)并發(fā)連接
  '''
  while True:
try:
 content = conn.recv(1024).decode('utf-8')
 conn.send(content.upper().encode('utf-8'))
 time.sleep(1)
except ConnectionResetError:
 break
​
​
# 對 socketserver.ThreadingTCPServer 類實(shí)例化對象,將IP地址,端口號,以及自己定義的類名傳入,并返回一個(gè)對象
server = socketserver.ThreadingTCPServer(('127.0.0.1', 4444), Myserver)
server.serve_forever()# 執(zhí)行對象server_forever方法,開啟服務(wù)端

客戶端:

import socket
​
sk = socket.socket()
sk.connect(('127.0.0.1', 4444))
​
while True:
 sk.send(b'heelo')
 content = sk.recv(1024).decode('utf-8')
 print(content)

二、驗(yàn)證客戶端合法性

在分布式系統(tǒng)中實(shí)現(xiàn)一個(gè)簡單的客戶端鏈接認(rèn)證功能,又不像SSL那么復(fù)雜,那么利用hmac+加鹽的方法實(shí)現(xiàn)。

思路:

服務(wù)端發(fā)送隨機(jī)字符串(并用客戶端和服務(wù)端都知道的秘鑰對隨機(jī)字符串進(jìn)行加密)——>客戶端接收到服務(wù)端發(fā)送的隨機(jī)字符串(并用相同的秘鑰進(jìn)行加密發(fā)送回服務(wù)端)——>服務(wù)端接收到客戶端發(fā)送的加密字符串和自己加密的字符串做對比(如果一致,就是合法客戶端,不一致,就立即關(guān)閉)

使用hashlib方法:

服務(wù)端

import socket
import hashlib
import os
​
# 設(shè)置雙方都擁有的秘鑰
secret = '秘鑰'.encode('utf-8')
​
sk = socket.socket()
sk.bind(('127.0.0.1', 4444))
​
sk.listen()
conn, _ = sk.accept()
​
# 給服務(wù)端發(fā)送32位隨機(jī)字節(jié)串
count = os.urandom(32)
conn.send(count)
​
# 并對字節(jié)串進(jìn)行加鹽加密
hs = hashlib.sha1(secret)
hs.update(count)
info_server = hs.hexdigest()
​
# 接收客戶端發(fā)送的對字節(jié)串加密后的信息
info_client = conn.recv(1024).decode('utf-8')
​
# 客戶端加密后的信息和服務(wù)端加密后的信息做對比
if info_server == info_client:
 # 相等則連接合法,繼續(xù)操作
 print('合法連接')
else:
 # 不相等則斷開鏈接
 print('非合法用戶')
 conn.close()

客戶端

import socket
import hashlib
​
# 雙方共有的秘鑰
secret = '秘鑰'.encode('utf-8')
​
sk = socket.socket()
sk.connect(('127.0.0.1', 4444))
​
# 接收服務(wù)端發(fā)送的隨機(jī)字節(jié)
count = sk.recv(1024)
​
# 對隨機(jī)字節(jié)進(jìn)行加密
hs = hashlib.sha1(secret)
hs.update(count)
info = hs.hexdigest().encode('utf-8')
​
# 把加密后的字節(jié)發(fā)送回服務(wù)端做判斷
sk.send(info)

以上就是python基于socketserver實(shí)現(xiàn)并發(fā),驗(yàn)證客戶端的合法性的詳細(xì)內(nèi)容,更多關(guān)于python socketserver實(shí)現(xiàn)并發(fā)的資料請關(guān)注本站其它相關(guān)文章!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部