Python网络编程5-实现DHCP Client
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息。option字段DHCP报文中的OPTions字段可以用来存放普通协议中没有定义的控制信息和参数。如果用户在DHCP服务器端配置了Options字段,DHCP客户端在申请IP地址的时候,会通过服务器端回应的DHCP报文获得Options字段中的配置信息。获取IP地址过程实验使用的linux 主机由两个网络接口,其中ens33使用DHCP获取IP地址,ens37使用静态IP地址;因此需要使用ens33来发送数据包。Change_MAC.py用于MAC地址与Bytes类型相互转换。DHCP_Discover.py用于发送DHCP Discover报文;其中GET_MAC.py见ARP章节。DHCP_Request.py用于发送DHCP Request报文。DHCP_FULL.py用于完成DHCP Client与DHCP Server的报文交互Wireshark对远程linux主机抓包,结果如下客户端以广播发送DHCP Discover包,其中报文操作类型为1(请求报文),DHCP客户端的MAC地址设置为00:0c:29:03:a1:08,option53设置报文类型为Discover,option55(请求选项列表)中包含请求的参数。服务器以单播向客户端回复信息,其中报文操作类型为2(应答报文),分配给客户端的IP为192.168.160.146,option 53设置报文类型为offer,Option 54设置服务器标识为192.168.160.254,其他option为客户端请求列表的应答。值得注意的是,交互的四个报文中Transaction ID均为0x00000000,表明是同一次DHCP交互报文。
python 主要用来做什么
1、网络接口
:能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。
2、图形处理
:有PIL、Tkinter等图形库支持,能方便进行图形处理。
3、数学处理
:NumPy扩展提供大量与许多标准数学库的接口。
4、文本处理
:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
5、数据库编程
:程序员可通过遵循PythonDB-API(应用程序编程接口)规范的模块与MicrosoftSQLServer,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
6、网络编程
:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet及BitTorrent.Google都在广泛地使用它。
7、Web编程
:应用的开发语言,支持最新的XML技术。
8、多媒体应用
:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
9、pymo引擎
:PYMO全称为pythonmemoriesoff,是一款运行于SymbianS60V3,Symbian3,S60V5,Symbian3,Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memoriesoff)风格的AVG游戏,故命名为PYMO。