使用DHCP协议获取IP地址

默认情况下,都是由操作系统完成 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 地址,可以通过抓包进行验证,如图所示。

其中的 4 个数据包就是获取 IP 地址的 4 个阶段的数据包。

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) 通过抓包捕获的释放地址数据包如图所示。


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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


随着云计算和网络技术的发展,越来越多的数据需要在服务器之间进行传输和共享。云挂机宝作为一种常见的服务器设备,具有高效、稳定的特性,使得它成为了许多企业和个人用户传输数据的首选。本文将讨论云挂机宝服务器
阿里云服务器Tomcat无法从外部访问一、环境阿里云Ubuntu 12.04.5 LTStomcat和java都是阿里云默认的7的版本,如下图二、问题部署后./startup.sh启动tomcat 之后外部访问http://ip:8080/无法访问,之后去查看防火墙关闭了Ubuntu下面的防火墙123
购买一系列的东西其实就是花钱买块区域,服务器,域名,云解析,花了好多money。。。一、租服务器百度搜索阿里云进入官网首页,点击登录进入登录页面,可以使用邮箱登录或者注册进入注册页面,填写注册信息登录成功,进入主页,点击云服务ECS,点击购买推荐或者选购配置根据实际情况选择产品,可能没有货,那么就需要更改购买条件如果是新用户,购买
前言昨天买了域名,服务器,然后搭建了环境,然后想他通过默认的端口,不用端口就访问。设置WEB项目的欢迎页在WEB-INF文件夹下有个web.xml文件(最近新建的项目不包含此文件,可以手动新建),在welcome-file-list节点中设置,代码如下 <welcome-file-list> <welcome-file>test.html</welcome-file>
前言由于服务器centos6.8安装mysql一直出现不能连接问题,然后看到一个方法,一不小心就把yum给删除了,都还原不了,很是绝望,很难受。然后没有yum这个centos就感觉废了,然后找方法装上去。 python --version查看python 版本 whereis python 查看python文件 python: /usr/bin/python2.6 /usr/bin/python
前言用 SSH客户端登录上以后,自己想要在本地连接服务器上的mysql服务器。解决方法1、首先启动数据库[root@iZm5ec880z2rorZ ~]# service mysqld start可以输入一下加粗命令:[root@iZm5ec880z2rorZ ~]# mysql -u root -p Enter password: (输入你的数据库密码)Welcome to the My
前言乱码问题是很让人抓狂的问题,下面我将记录一下Linux下MySQL乱码问题的解决方法。 mysql在linux下乱码问题一、操作mysql默认字符集是latin1,但是我们大部分程序使用的字符集是utf8,我们就需要修改mysql的字符集了。1)查看默认编码show variables like 'character%';+--------------------------+--------
问题描述今天阿里云服务器安装mysql的收,遇到了一个很熟悉的问题 输入#mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 解决方案一、方案1 1.#ps -A|grep mysql 显示类似:
今天在使用filezilla连接虚拟机中的ubuntu的时候出现上次出错,错误详情为:open for write: permission denied看完错误大概知道和权限有问题,再次查看虚拟机,我们使用以下命令给我们需要放入的目标文件权限:sudo chmod 777 /home再次尝试上传,上传成功! ...
直接上步骤,做一个简单的记录!配置阿里云oss找到对应的oss如果没有bucket,则新建一个新建之后,进入到对应的bucket,然后进行相关设置以上就是oss的基本设置,接下来是域名相关设置,这也是最重要的一些步骤。oss域名解析和cdn设置oss域名解析设置oss的域名设置是在传输管理下进行设置。如果没有域名,需要添加域名,没有注册域名自行注册。添加之后就会在上面列表上显示。以上就是域名的解析配置,期间还需要设置域名解析cname等。oss的cdn设置加速设置cdn
这个需要开放centos的端口和腾讯云服务器的端口。防火墙开放8080端口因为Centos7以上用firewalld代替了iptables,也就是说firewalld开通了8080端口应该就行了1.输入netstat -tunlp 查看8080是否放开。2.如果没有开放,输入firewall-cmd --state #查看防火墙状态。3.在running 状态下,向firewall 添加需要开放的端口firewall-cmd --permanent --zone=public --add-po
前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkins + Ant + Tomcat 搭建了一个自动发布部署的环境
为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启 tomcat 之前先检查 tomcat 进程有没有停掉,没有还要手动 kill 该进程。 发布次数多了,操
Jenkins修改管理员密码,我看了网上所有的教程,竟然全都是拿着一串已经加密好的 111111 的密文去替代 config.xml 文件里面的密码,然后大家的密码都是 111111!我觉得这种做法实
一、四层与七层负载均衡在原理上的区别 1.图示 2.概述 四层负载均衡工作在 OSI 模型中的四层,即传输层。四层负载均衡只能根据报文中目标地址和源地址对请求进行转发,而无法修改或判断所请求资源的具体
和 window不同,在Linux压缩文件需要注意的是,压缩后的文件会把源文件给替代,无论是gzip、bzip2、xz 均不支持压缩目录,要达到压缩目录的目的,需要用到tar指令。 gzip 压缩 g
一、前言 随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说。要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓。而且,
一、安装 和 准备工作 我们选择了用 Tomcat 服务器下 war 包的安装方式。Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列
一、gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接。 gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行
随着智能化互联时代的来临,家中的智能设备越来越多:电视机、平板、游戏主机、电脑、手机等遍及家中各个角落,同时设备之间共享数据的需求变的越来越强烈。比如同步、备份手机上的照片和视频,在电视机上观看电脑中