認證客戶端的鏈結合法性

2022-09-11 14:36:25 字數 2607 閱讀 4272

摘自:

如果你想在分布式系統中實現乙個簡單的客戶端鏈結認證功能,又不像ssl那麼複雜,那麼利用hmac+加鹽的方式來實現

server.py

#

_*_coding:utf-8_*_

__author__ = '

linhaifeng

'from socket import *

import

hmac,os

secret_key=b'

linhaifeng bang bang bang

'def

conn_auth(conn):

'''認證客戶端鏈結

:param conn:

:return:

'''print('

開始驗證新鏈結的合法性')

msg=os.urandom(32)  # 隨機產生乙個32位的金鑰

conn.sendall(msg)

h=hmac.new(secret_key,msg)  # hmac類似於md5,這裡是加鹽的方式

digest=h.digest()

respone=conn.recv(len(digest))

return

hmac.compare_digest(respone,digest)

def data_handler(conn,bufsize=1024):

ifnot

conn_auth(conn):

print('

該鏈結不合法,關閉')

conn.close()

return

print('

鏈結合法,開始通訊')

while

true:

data=conn.recv(bufsize)

ifnot data:break

conn.sendall(data.upper())

def server_handler(ip_port,bufsize,backlog=5):

'''只處理鏈結

:param ip_port:

:return:

'''tcp_socket_server=socket(af_inet,sock_stream)

tcp_socket_server.bind(ip_port)

tcp_socket_server.listen(backlog)

while

true:

conn,addr=tcp_socket_server.accept()

print('

新連線[%s:%s]

' %(addr[0],addr[1]))

data_handler(conn,bufsize)

if__name__ == '

__main__':

ip_port=('

127.0.0.1

',9999)

bufsize=1024server_handler(ip_port,bufsize)

client.py

#

_*_coding:utf-8_*_

__author__ = '

linhaifeng

'from socket import *

import

hmac,os

secret_key=b'

linhaifeng bang bang bang

'def

conn_auth(conn):

'''驗證客戶端到伺服器的鏈結

:param conn:

:return:

'''msg=conn.recv(32)

h=hmac.new(secret_key,msg)

digest=h.digest()

conn.sendall(digest)

def client_handler(ip_port,bufsize=1024):

tcp_socket_client=socket(af_inet,sock_stream)

tcp_socket_client.connect(ip_port)

conn_auth(tcp_socket_client)

while

true:

data=input('

>>:

').strip()

ifnot data:continue

if data == '

quit

':break

tcp_socket_client.sendall(data.encode(

'utf-8'))

respone=tcp_socket_client.recv(bufsize)

print(respone.decode('

utf-8'))

tcp_socket_client.close()

if__name__ == '

__main__':

ip_port=('

127.0.0.1

',9999)

bufsize=1024client_handler(ip_port,bufsize)

認證客戶端鏈結合法性(Python)

服務端 from socket import import hmac,os secret key b 123456io p defconn auth conn 認證客戶端鏈結 param conn return print 開始驗證新鏈結的合法性 msg os.urandom 32 產生32位隨機數...

python驗證客戶端的合法性

python驗證客戶端的合法性 client from socket import import hmac,os secret key b pengliang def conn auth conn 驗證客戶端到伺服器的鏈結 param conn return msg conn.recv 1 h hm...

粘包 阻塞與非阻塞 驗證客戶端的合法性

tcp協議傳輸資料存在粘包現象,udp協議不存在粘包協議。1.1.1 什麼是粘包現象 1.1.2 解決粘包問題 b.再傳送報文 2.自定義協議2 專門用來做檔案傳送的協議 三次握手的過程在 中是由accept和connect共同完成的,具體的細節再socket中沒有體現出來 2.四次揮手 2.1 i...