python:验证客户端链接的合法性与socketserver

python:验证客户端链接的合法性与socketserver,第1张

概述一、验证客户端链接的合法性1 from socket import *2 import hmac,os34 secret_key=b'linhaifeng bang bang bang'5 def conn_auth(conn):6 '''7 认证客户端链接8 :param conn:9 :return:10 '''11 print('开始验证新链接的合法性')12 msg=os.urandom(32)13 conn.sendall(msg)14 h=hmac.new(secret_key,msg)15 digest=h.digest()16 respone=conn.recv(len(digest))17 return hmac.compare_digest(respone,digest)1819 def data_handler(conn,bufsize=1024):20 if not conn_auth(conn):21 print('该链接不合法,关闭')22 conn.close()23 return24 print('链接合法,开始通信')25 while True:26 data=conn.recv(bufsize)27 if not data:break28 conn.sendall(data.upper())2930 def server_handler(ip_port,bufsize,backlog=5):31 '''32 只处理链接33 :param ip_port:34 :return:35 '''36 tcp_socket_server=socket(AF_INET,SOCK_STREAM)37 tcp_socket_server.bind(ip_port)38 tcp_socket_server.listen(backlog)39 while True:40 conn,addr=tcp_socket_server.accept()41 print('新连接[%s:%s]' %(addr[0],addr[1]))42 data_handler(conn,bufsize)4344 if __name__ == '__main__':45 ip_port=('127.0.0.1',9999)46 bufsize=102447 server_handler(ip_port,bufsize)服务端1 __author__ = 'Linhaifeng'2 from socket import *3 import hmac,os45 secret_key=b'linhaifeng bang bang bang'6 def conn_auth(conn):7 '''8 验证客户端到服务器的链接9 :param conn:10 :return:11 '''12 msg=conn.recv(32)13 h=hmac.new(secret_key,msg)14 digest=h.digest()15 conn.sendall(digest)1617 def client_handler(ip_port,bufsize=1024):18 tcp_socket_client=socket(AF_INET,SOCK_STREAM)19 tcp_socket_client.connect(ip_port)2021 conn_auth(tcp_socket_client)2223 while True:24 data=input('>>: ').strip()25 if not data:continue26 if data == 'quit':break2728 tcp_socket_client.sendall(data.encode('utf-8'))29 respone=tcp_socket_client.recv(bufsize)30 print(respone.decode('utf-8'))31 tcp_socket_client.close()3233 if __name__ == '__main__':34 ip_port=('127.0.0.1',9999)35 bufsize=102436 client_handler(ip_port,bufsize)客户端二、socketserverimport socketserverclass Myserver(socketserver.BaseRequestHandler):def handle(self):self.data = self.request.recv(1024).strip()print("{} wrote:".format(self.client_address[0]))print(self.data)self.request.sendall(self.data.upper())if __name__ == "__main__":HOST, PORT = "127.0.0.1", 9999# 设置allow_reuse_address允许服务器重用地址socketserver.TCPServer.allow_reuse_address = True# 创建一个server, 将服务地址绑定到127.0.0.1:9999server = socketserver.TCPServer((HOST, PORT),Myserver)# 让server永远运行下去,除非强制停止程序server.serve_forever()server端import socketHOST, PORT = "127.0.0.1", 9999data = "hello"# 创建一个socket链接,SOCK_STREAM代表使用TCP协议with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:sock.connect((HOST, PORT)) # 链接到客户端sock.sendall(bytes(data + "n", "utf-8")) # 向服务端发送数据received = str(sock.recv(1024), "utf-8")# 从服务端接收数据print("Sent: {}".format(data))print("Received: {}".format(received))client  一、验证客户端链接的合法性 socket * secret_key=b ( msg=os.urandom(32 h= digest= respone= data_handler(conn,bufsize=1024 ( ( data= data: server_handler(ip_port,bufsize,backlog=5 tcp_socket_server= conn,addr= ( %(addr[0],addr[1 == ip_port=(,9999 bufsize=1024 server_handler(ip_port,bufsize) = socket * secret_key=b msg=conn.recv(32 h= digest= clIEnt_handler(ip_port,bufsize=1024 tcp_socket_clIEnt= data=input(>: data: data == : tcp_socket_clIEnt.sendall(data.encode( respone= (respone.decode( == ip_port=(,9999 bufsize=1024 clIEnt_handler(ip_port,bufsize)二、socketserver= self.request.recv(1024(<span >if <span >name == <span >"<span >main<span >"<span >:
HOST,PORT
= <span >"
<span >127.0.0.1
<span >"
,9999

<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000"&gt; <a href="https://m.jb51.cc/tag/shezhi/" target="_blank" >设置</a>allow_reuse_address允许<a href="https://m.jb51.cc/tag/fuwuqi/" target="_blank" >服务器</a>重用<a href="https://m.jb51.cc/tag/dizhi/" target="_blank" >地址</a></span>socketserver.T<a href="https://www.jb51.cc/tag/cps/" target="_blank" >cps</a>erver.allow_reuse_address =<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt; True</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000"&gt; <a href="https://m.jb51.cc/tag/chuangjian/" target="_blank" >创建</a><a href="https://www.jb51.cc/tag/yige/" target="_blank" >一个</a>server,将服务<a href="https://m.jb51.cc/tag/dizhi/" target="_blank" >地址</a>绑定到127.0.0.1:9999</span>server =<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt; socketserver.T<a href="https://www.jb51.cc/tag/cps/" target="_blank" >cps</a>erver((HOST,PORT),Myserver)</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000"&gt; 让server永远运行下去,除非强制停止程序</span>server.serve_forever()</pre>
HOST,9999<span >
data
= <span >"
<span >hello
<span >"

<span >#<span > 创建一个socket链接,SOCK_STREAM代表使用TCP协议
<span >with socket.socket(socket.AF_INET,socket.soCK_STREAM) as sock:
sock.connect((HOST,PORT)) <span >#<span > 链接到客户端
sock.sendall(bytes(data + <span >"<span >\n<span >",<span >"<span >utf-8<span >")) <span >#<span > 向服务端发送数据
received = str(sock.recv(1024),<span >"<span >utf-8<span >")<span >#<span > 从服务端接收数据

<span >print(<span >"<span >Sent: {}<span >"<span >.format(data))
<span >print(<span >"<span >Received: {}<span >".format(received))

总结

以上是内存溢出为你收集整理的python:验证客户端链接的合法性与socketserver全部内容,希望文章能够帮你解决python:验证客户端链接的合法性与socketserver所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1208004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存