Python网络编程5-实现DHCP Client

Python011

Python网络编程5-实现DHCP Client,第1张

  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走无线网络,Python的网络编程主要支持两种网络协议:TCP和UDP。这两种协议都通过叫Socket的编程抽象进行处理。Socket起源于Unix,是类似于文件的存在,可以像文件一样进行I/O、打开、关闭等操作,最主要的是它可以实现网络上不同主机的进程间通信,所以基本上Socket是任何一种网络通讯中最基础的内容。

网络是说 networking 还是 web?

Networking:

Unix Network Programming,TCP/IP Illustrated

至少看完第一本 80%+ 第二部卷 1 50% ,看的时候把所有代码用 Python 写过来,否则就不用想别的事情。

Web:

基本看过 RFC2616,然后挑一个框架(例如:Flask 或 Django),直接看 Tutorial。当然做 web 还要学大量的其它东西,如 HTML / CSS / JavaScript / Database 等。

问题补充的部分,简单说说:

用账号密码自动登陆网站、自动填表什么的,需要的是 HTTP(RFC 2616)和 web (如表单处理等)相关知识,可能需要或不需要

socket 知识,但是了解更好。制作曲线图之类需要的是 matplotlib 等数据制图工具的知识,Email 有 smtplib

之类的库可以解决,”每天定时“依靠 cron 或系统计划任务。做这种事情所需的知识面基本是很广的,但深度要求不高。