1 #_*_coding:utf-8_*_
2 __author__ = 'Linhaifeng'
3 from socket import *
4 import hmac,os
5
6 secret_key=b'linhaifeng bang bang bang'
7 def conn_auth(conn):
8 '''
9 認證客戶端連接
10 :param conn:
11 :return:
12 '''
13 print('開始驗證新連接的合法性')
14 msg=os.urandom(32)
15 conn.sendall(msg)
16 h=hmac.new(secret_key,msg)
17 digest=h.digest()
18 respone=conn.recv(len(digest))
19 return hmac.compare_digest(respone,digest)
20
21 def data_handler(conn,bufsize=1024):
22 if not conn_auth(conn):
23 print('該連接不合法,關閉')
24 conn.close()
25 return
26 print('連接合法,開始通訊')
27 while True:
28 data=conn.recv(bufsize)
29 if not data:break
30 conn.sendall(data.upper())
31
32 def server_handler(ip_port,bufsize,backlog=5):
33 '''
34 只處理連接
35 :param ip_port:
36 :return:
37 '''
38 tcp_socket_server=socket(AF_INET,SOCK_STREAM)
39 tcp_socket_server.bind(ip_port)
40 tcp_socket_server.listen(backlog)
41 while True:
42 conn,addr=tcp_socket_server.accept()
43 print('新鏈接[%s:%s]' %(addr[0],addr[1]))
44 data_handler(conn,bufsize)
45
46 if __name__ == '__main__':
47 ip_port=('127.0.0.1',9999)
48 bufsize=1024
49 server_handler(ip_port,bufsize)