Python演示--UDP套接字真的无连接吗?
清华科技大讲堂免费直播课预告:
免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30
============
哔哩哔哩网站免费视频观看地址:
董老师在哔哩哔哩网站免费分享的本学期“Python编程技术”讲课录屏视频,已更新到第11次课共27小时,观看地址:
https://www.bilibili.com/video/BV137411u7tJ/
==============
推荐图书:
《Python可以这样学》,ISBN:9787302456469,董付国,清华大学出版社,第9次印刷
图书详情(京东):
董付国老师17本Python系列图书均提供配套教学资源。
===============
功能描述:
创建UDP套接字进行通信,重点演示UDP套接字对象方法connect()和bind()的作用。
首先,编写一个“服务端”代码,用来被动接收发送端的信息然后做出一定的响应,向对方连续发送10个字节串。代码如下:
这个接收端的功能很简单,就是收到消息后原路发回10个信息。如果收到的是bye就关闭套接字。
接下来我们编写一个发送端程序,代码如下:
正常情况下,这两个程序会工作的很好,如图:
但是如果这个过程被干扰,就不会这样顺利了。编写下面这个代码的人通过某个途径知道了发送端“UDP套接字调用connect_demo2.py"正在使用的端口号,然后直接向其发送信息,试图干扰1和2的工作。代码如下:
在攻击者的干扰下,原来的通信双方正常通信过程被干扰,示例如下:
如何避免demo2接收到非通信对方发来的干扰信息呢?其实不难做到,只需要在接收到信息之后检查一下对方地址就可以了,例如:
这样的话,demo3的运行过程就不会收到attack的影响了,运行过程如下:
这样处理虽然可以解决问题,但略显笨拙。实际上套接字已经提供了更好的解决方案,那就是在UDP套接字发送端调用connect()方法明确指定通信对方地址,这样的话就会在底层自动过滤其他地址发来的任何信息了,例如:
在UDP发送端调用connect()方法注册指定地址为默认通信地址之后,可以使用send()直接向默认地址发送信息,也可以使用recv()直接从对方接收信息,不再需要使用sendto()和recvfrom(),并且recv()会自动过滤其他地址发来的信息,可以避免被第三方攻击。运行过程如下:
由上可知,UDP是无连接协议这一点是一定的,没有任何疑问。但UDP套接字确实是可以调用connect()方法的,只不过调用connect()并不是真的要连接谁,只是在系统中标记一下通信对方的地址。这样的话,收发信息的代码可以简洁很多,并且可以避免来自第三方的攻击。
温馨提示
关注本公众号“Python小屋”,通过菜单“最新资源”==>“历史文章”可以快速查看分专题的1000篇原创技术文章列表(可根据关键字在页面上搜索感兴趣的文章),通过“最新资源”==>“微课专区”可以免费观看500节Python微课,通过“最新资源”==>“培训动态”可以查看近期Python培训安排,通过“最新资源”==>“教学资源”可以查看Python教学资源,海量宝藏等你来挖掘。
---董付国老师Python系列图书---
友情提示:不建议购买太多,最好先通过京东、当当、天猫查阅图书了解目录和侧重点,然后再选择购买适合自己的书。
(1)《Python程序设计(第2版)》(ISBN:978-7-302-43651-5),清华大学出版社,2016年8月出版,2019年度清华大学出版社畅销图书
(2)《Python可以这样学》(ISBN:978-7-302-45646-9),清华大学出版社,2017年2月
(3)《Python程序设计基础(第2版)》(ISBN:978-7-302-49056-2)清华大学出版社,2018年1月出版,2019年度清华大学出版社畅销图书
(4)《中学生可以这样学Python》(ISBN:978-7-302-48039-6)清华大学出版社
(5)《Python程序设计开发宝典》(ISBN:978-7-302-47210-0)清华大学出版社,2018年10月
(6)《玩转Python轻松过二级》(ISBN:978-7-302-49916-9)清华大学出版社,2018年5月
(7)《Python程序设计基础与应用》(ISBN:978-7-111-60617-8),机械工业出版社,2018年9月
(8)《Python程序设计实验指导书》(ISBN:9787302525790),清华大学出版社,2019年4月
(9)《Python编程基础与案例集锦(中学版)》(ISBN:978-7-121-35539-4),电子工业出版社,2019年4月
(10)《大数据的Python基础》(ISBN:978-7-111-62455-4),机械工业出版社,2019年5月出版
(11)译作《Python程序设计》,机械工业出版社(华章),2018年11月出版
(12)繁体版《Python也可以这样学》,台湾博硕文化股份有限公司,2017年10月出版,本书为《Python可以这样学》在台湾发行的繁体版,两本书内容一样,不建议重复购买。
(13)《Python程序设计实例教程》(ISBN:978-7-111-63198-9),机械工业出版社
(14)《Python数据分析、挖掘与可视化》(ISBN:978-7-115-52361-7),人民邮电出版社,2019年12月
《Python数据分析、挖掘与可视化》前3章书稿PDF免费阅读
相关阅读:
Python标准库socketserver使用线程混入实现异步TCP服务器
Python标准库socketserver实现UDP协议时间服务器
Python+winreg+netifaces查看网络接口信息
Python+socket+多线程实现同时应答多客户端的自助聊天机器人
Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码