Python的Socket知识2:粘包处理

案例1:简单模拟ssh交互程序

1)ssh介绍    

SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

    传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。


2)subprocess.Popen()介绍

利用subprocess.Popen()可以进入到某个输入环境,然后再执行一系列的指令。

    在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。这个时候我们就需要使用到suprocess的Popen()方法。该方法有以下参数:

  • args:shell命令,可以是字符串,或者序列类型,如list,tuple。

  • bufsize:缓冲区大小,可不用关心

  • stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误

  • shell:对于参数是字符串,需要指定shell=True

  • cwd:用于设置子进程的当前目录

  • env:用于指定子进程的环境变量。如果env=None,则默认从父进程继承环境变量

  • universal_newlines:不同系统的的换行符不同,当该参数设定为true时,则表示使用\n作为换行符

 3)程序实现  

通过控制服务端写入subprocess模块实现命令输出。

1)建立scoket_server服务器的程序

640?wx_fmt=png

2)建立socket_client客户端的程序;

640?wx_fmt=png

执行结果:

640?wx_fmt=png

640?wx_fmt=png

案例2:粘包处理

1)粘包概念    

    TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

 出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。

2)程序实现   

发送消息前,先发送消息长度,根据消息长度,循环接收服务器消息

1)建立scoket_server服务器的程序

640?wx_fmt=png

640?wx_fmt=png

2)建立scoket_client服务器的程序

640?wx_fmt=png

640?wx_fmt=png

执行结果:

640?wx_fmt=png



案例1链接:https://pan.baidu.com/s/1nwYaAOp 密码:358t

案例2链接:https://pan.baidu.com/s/1pLXGrH5 密码:zodv



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值