一次性付费进群,长期免费索取教程,没有付费教程。
进微信群回复公众号:微信群;QQ群:460500587
教程列表 见微信公众号底部菜单 | 本文底部有推荐书籍微信公众号:计算机与网络安全
ID:Computer-network
默认情况下,都是由操作系统完成IP地址请求过程的。用户也可以手动请求IP地址。netwox工具提供了编号为171的模块,它可以充当DHCP客户端向DHCP服务器请求IP地址。
模拟DHCP客户端从DHCP服务器获取IP地址。执行命令如下:
root@daxueba:~# netwox 171
执行命令后将完成获取IP地址的整个过程,并输出每个过程相关的信息。为了方便介绍,下面将信息进行拆分,然后分别介绍。
1)发现阶段的输出信息如下:
I send a DISCOVER:
DHCP____________________________________________________________.
| op=request hops=0 xid=B8ED8552 secs=0 flags=0000
| client=0.0.0.0 your=0.0.0.0
| server=0.0.0.0 agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: discover
| clientidtype: 1
| clientid: 000c29fddeb8
| reqlist[0]: 1 (subnetmask)
#下面为客户端要请求的列表信息
| reqlist[1]: 3 (gateways)
| reqlist[2]: 4 (timeservers)
| reqlist[3]: 5 (nameservers)
| reqlist[4]: 6 (dnsservers)
| reqlist[5]: 7 (logservers)
| reqlist[6]: 9 (lprservers)
| reqlist[7]: 12 (hostname)
| reqlist[8]: 15 (domainname)
| reqlist[9]: 28 (broadcastad)
| reqlist[10]: 31 (performroutdisc)
| reqlist[11]: 33 (staticroutes)
| reqlist[12]: 40 (nisdomain)
| reqlist[13]: 41 (nisservers)
| reqlist[14]: 51 (ipadleasetime)
| reqlist[15]: 58 (renewaltime)
| reqlist[16]: 59 (rebindingtime)
| reqlist[17]: 64 (nispdomain)
| reqlist[18]: 65 (nispserver)
| reqlist[19]: 69 (smtpservers)
| reqlist[20]: 70 (pop3servers)
| reqlist[21]: 71 (nntpservers)
| reqlist[22]: 72 (wwwservers)
| reqlist[23]: 74 (ircservers)
|___________________________________________________________
以上输出信息中,第1行表示客户端发送了一个Discover包,用来向服务器请求租用的IP地址。下面的信息为对应的报文信息。其中,xid表示事务ID为B8ED8552,client表示客户端IP地址为0.0.0.0,your表示此时客户端还没有IP地址,因此也为0.0.0.0。
2)提供阶段的输出信息如下:
Server sent us this OFFER:
DHCP____________________________________________________________.
| op=reply hops=0 xid=B8ED8552 secs=0 flags=0000
| client=0.0.0.0 your=192.168.59.131
| server=192.168.59.254 agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: offer
| serverid: 192.168.59.254
| ipadleasetime: 1800
| subnetmask: 255.255.255.0 | #子网掩码
| gateways[0]: 192.168.59.2 | #网关
| dnsservers[0]: 192.168.59.2 | #DNS服务器地址
| domainname: 'localdomain' | #域名
| broadcastad: 192.168.59.255 | #广播地址
| renewaltime: 900 | #更新时间
| rebindingtime: 1575 | #重新连接时间
| end
|_____________________________________________________
Server 192.168.59.254(00:50:56:ED:87:BC) proposes address 192.168.59.131
以上输出信息中,第1行表示服务器向客户端返回了提供IP地址租约的数据包。下面的信息为对应的报文信息。其中,xid表示事务ID为B8ED8552,与发现阶段事务ID相同;your表示服务器给客户端提供的IP地址为192.168.59.131;server表示此时服务器的IP地址为192.168.59.254。从输出信息中还可以看到服务器为客户端提供的子网掩码、网关、DNS服务器地址等信息。输出信息的最后一行为总结信息,表示服务器192.168.59.254为客户端提供的IP地址为192.168.59.131。
3)选择阶段的输出信息如下:
I accept previous OFFER:
DHCP____________________________________________________________.
| op=request hops=0 xid=B8ED8552 secs=0 flags=0000
| client=0.0.0.0 your=0.0.0.0
| server=0.0.0.0 agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: request
| clientidtype: 1
| clientid: 000c29fddeb8
| requestedipad: 192.168.59.131 | #选择请求的IP地址
| serverid: 192.168.59.254 | #服务器IP地址
| reqlist[0]: 1 (subnetmask) | #下面为请求的其他信息
| reqlist[1]: 3 (gateways)
| reqlist[2]: 4 (timeservers)
| reqlist[3]: 5 (nameservers)
| reqlist[4]: 6 (dnsservers)
| reqlist[5]: 7 (logservers)
| reqlist[6]: 9 (lprservers)
| reqlist[7]: 12 (hostname)
| reqlist[8]: 15 (domainname)
| reqlist[9]: 28 (broadcastad)
| reqlist[10]: 31 (performroutdisc)
| reqlist[11]: 33 (staticroutes)
| reqlist[12]: 40 (nisdomain)
| reqlist[13]: 41 (nisservers)
| reqlist[14]: 51 (ipadleasetime)
| reqlist[15]: 58 (renewaltime)
| reqlist[16]: 59 (rebindingtime)
| reqlist[17]: 64 (nispdomain)
| reqlist[18]: 65 (nispserver)
| reqlist[19]: 69 (smtpservers)
| reqlist[20]: 70 (pop3servers)
| reqlist[21]: 71 (nntpservers)
| reqlist[22]: 72 (wwwservers)
| reqlist[23]: 74 (ircservers)
|_________________________________________________
以上输出信息中,第1行表示客户端接收了服务器提供的地址租约。下面的信息为对应的报文信息。其中,xid表示事务ID为B8ED8552;由于客户端选择了要请求的IP地址,但是没有真正获取到IP地址,因此client和your均为0.0.0.0;requestedipad表示客户端选择的IP地址为192.168.59.131。serverid表示服务器的IP地址为192.168.59.254。
4)确认阶段的输出信息如下:
Server sent us this ACK:
DHCP____________________________________________________________.
| op=reply hops=0 xid=B8ED8552 secs=0 flags=0000
| client=0.0.0.0 your=192.168.59.131
| server=192.168.59.254 agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: ack
| serverid: 192.168.59.254
| ipadleasetime: 1800
| subnetmask: 255.255.255.0 | #客户端的子网掩码
| gateways[0]: 192.168.59.2 | #客户端的网关
| dnsservers[0]: 192.168.59.2 | #客户端的DNS服务器
| domainname: 'localdomain'
| broadcastad: 192.168.59.255
| renewaltime: 900
| rebindingtime: 1575
| end
|_________________________________________________
Server 192.168.59.254(00:50:56:ED:87:BC) gave address 192.168.59.131
Press q to quit.
以上输出信息中,第1行表示服务器确认了客户端要租约的IP地址信息,客户端可以使用请求的IP地址了。下面的信息为对应的报文信息。其中,your表示客户端可以租用的IP地址为192.168.59.131;其他信息给出了客户端使用的子网掩码、网关、DNS服务器地址等。输出的最后一行信息表示用户可以使用快捷键q退出。如果退出,则客户端将不再租用这个IP地址,会释放该地址。
5)为了确认模拟客户端从服务器上是否获取到了IP地址,可以通过抓包进行验证,如图1所示。其中的4个数据包就是获取IP地址的4个阶段的数据包。
图1 捕获的数据包
6)如果使用了快捷键q退出,将产生释放地址的数据包。输出信息如下:
I RELEASE the address:
DHCP__________________________________________________________.
| op=request hops=0 xid=CC6236A1 secs=0 flags=0000
| client=192.168.59.131 your=0.0.0.0
| server=0.0.0.0 agent=0.0.0.0
| clienteth=00:0C:29:FD:DE:B8
| sname:
| file:
| msgtype: release
| serverid: 192.168.59.254
| clientidtype: 1
| clientid: 000c29fddeb8
|___________________________________________________________
以上输出信息,第1行表示客户端释放了IP地址。下面的信息为对应的报文信息。其中,xid的值为CC6236A1,这与获取IP地址时所产生的事务ID不同;client表示客户端要释放的IP地址为192.168.59.131。
7)通过抓包捕获的释放地址数据包如图2所示。
图2 释放地址数据包
8)从DHCP服务器上获取IP地址时,为了隐藏真实的MAC地址,可以伪造虚假MAC地址。例如,设置假MAC地址为01:02:03:A1:A2:A3。执行命令如下:
root@daxueba:~# netwox 171 -e 01:02:03:a1:a2:a3
输出信息如下:
I send a DISCOVER:
DHCP____________________________________________________________.
| op=request hops=0 xid=BDC49614 secs=0 flags=0000
| client=0.0.0.0 your=0.0.0.0
| server=0.0.0.0 agent=0.0.0.0
| clienteth=01:02:03:A1:A2:A3
··· #省略其他信息
从输出信息报文中可以看到,此时客户端的MAC地址为假的地址01:02:03:A1:A2:A3。
微信公众号:计算机与网络安全
ID:Computer-network
【推荐书籍】