import socket
import hashlib
import subprocess
import struct phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,) #重用地址
phone.bind(('192.168.20.105',))
phone.listen()
while :
conn,addr=phone.accept()
print('线路是%s' % conn)
print('地址是',addr)
tag = True
while :
while tag:
user = conn.recv().decode('utf-8')
pwd = conn.recv().decode('utf-8')
md5_obj = hashlib.md5(user.encode('utf-8'))
s = pwd+user
print(s)
md5_obj.update(s.encode('utf-8'))
pwd = md5_obj.hexdigest()
print(pwd)
if user == 'egon'and pwd=='82bdb4164c14585f32e70ec0a37b3569':
conn.send('right'.encode('utf-8'))
tag = False
break
else:
conn.send('用户名或密码错误,请重新输入!'.encode('utf-8'))
try:
cmd = conn.recv()
res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
mes = res.stdout.read()
mesr = res.stderr.read()
ret = struct.pack('i',(len(mes)+len(mesr)))
conn.send(ret)
conn.send(mes)
conn.send(mesr)
except Exception:
break
conn.close()
phone.close()

服务端

import socket
import time
import struct phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('192.168.20.105',))
tag = True
while :
while tag:
user = input('username:')
phone.send(user.encode('utf-8'))
pwd = input('password:')
phone.send(pwd.encode('utf-8'))
time.sleep()
mes = phone.recv().decode('utf-8')
print(mes)
if mes =='right':
tag = False
break
cmd = input('>>:')
if not cmd:continue
phone.send(cmd.encode('utf-8'))
lens = phone.recv()
lens = struct.unpack('i',lens)
lens = lens[]
mes = phone.recv()
mes_size =
while mes_size<lens:
if lens-mes_size>:
mes+=phone.recv()
else:
mes+=phone.recv(lens-mes_size)
mes_size +=
print(mes.decode('gbk')) phone.close()

客户端

最新文章

  1. Kafka深度解析
  2. mysql双主复制总结
  3. window绝对路径与相对路径
  4. Oracle Database常用补丁集Patch号及各版本PSU
  5. bzoj 1934: [Shoi2007]Vote 善意的投票
  6. c++与java的优缺点
  7. LYNC2013介绍和基础架构准备角色
  8. 妙用this关键字
  9. [OC] 各型号iPhone的屏幕分辨率与开发使用的数值
  10. 将汉字转化为拼音的js插件
  11. golang协程池设计
  12. 让对象支持with语句
  13. 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法
  14. 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)
  15. ubuntu下如何查看软件安装目录以及安装版本
  16. Python开发基础-Day30多线程锁机制
  17. vue.js 知识点(四)
  18. U-Boot启动过程完全分析&lt;转&gt;
  19. EL使用技巧
  20. 安卓Eclipse开发人员的福音

热门文章

  1. 关于margin padding
  2. 论 业务系统 架构 的 简化 (一) 不需要 MQ
  3. Spring AOP + PageHelper分页
  4. Centos7安装WPS和截图工具shutter
  5. git 强行pull并覆盖本地文件
  6. ThinkPHP 3.1.2 视图 MVC-V -5
  7. java多线程找素数实例
  8. P1507 NASA的食物计划
  9. Flume的基本概念
  10. spring boot (入门简介 demo)