免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 14593 | 回复: 29
打印 上一主题 下一主题

DHCPOFFER数据包的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-06 16:44 |只看该作者 |倒序浏览
我用socket编程模拟DHCP动态分配IP的过程,根据DHCP的协议交互可知,当客户机设置使用 DHCP协议获取 IP时,客户机将使用 0.0.0.0作为源地址,使用255.255.255.255作为目标地址来广播请求 IP地址的信息。
    广播信息中包含 DHCP客户机的MAC地址和计算机名。

    现已实现udp广播(c语言),不知道如何 广播信息中包含 DHCP客户机的MAC地址和计算机名,望高手指点。

[ 本帖最后由 tqyou85 于 2008-10-15 16:32 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-08 09:25 |只看该作者
怎么都没有人回答?

我在发送广播信息时采用
sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&s_addr,addr_len);
现在的问题就是不知道这个buf该如何定义其内容,怎么把该发送的DISCOVER报文放进去

论坛徽章:
0
3 [报告]
发表于 2008-10-08 16:27 |只看该作者
哈哈..看下dhcp的rfc呗..就是填充一些数字进去就好了....
你也可以用ethereal抓包看看报文怎么样不久可以了啊..
根据rfc定义的字段的意思填充数值就可以了.再把它send出去..就OK了

论坛徽章:
0
4 [报告]
发表于 2008-10-09 09:18 |只看该作者

回复 #3 cscscheng 的帖子

嗯,昨天是按照这个方法做的,参照RFC以及wireshark抓包的情况填充了buf数组发送,但是却收不到服务器的OFFER报文。
我用tcpdump截包看了下发送的报文,的确是个伪造的DISCOVER报文,为什么收不到OFFER响应。

论坛徽章:
0
5 [报告]
发表于 2008-10-13 13:11 |只看该作者

回复 #4 tqyou85 的帖子

研究下DHCP的源码看看

论坛徽章:
0
6 [报告]
发表于 2008-10-14 19:35 |只看该作者
我在服务器端抓包发现,服务器端有收到DISCOVER数据包,并且返回了OFFER数据包
但是OFFER数据包并不是以广播的形式发送出去的, (our (client) IP address: 192.168.9.26 (192.168.9.26)
服务器就直接发送给IP192.168.9.26 ,所以客户端接受不到OFFER数据包
为什么会出现这样的问题?

论坛徽章:
2
巨蟹座
日期:2014-03-09 21:37:25射手座
日期:2014-04-16 16:23:03
7 [报告]
发表于 2008-10-15 13:25 |只看该作者
建议读读RFC 2131,记得里面的DHCP报文的flags字段好像说明了这个问题。

论坛徽章:
0
8 [报告]
发表于 2008-10-15 16:01 |只看该作者
原帖由 kwest 于 2008-10-15 13:25 发表
建议读读RFC 2131,记得里面的DHCP报文的flags字段好像说明了这个问题。



配置好了dhcp后,我在自己的主机上面自动获取IP(windows环境),并抓了包
分析数据包:
第一个是DHCPDISCOVER数据包 源地址是0..0.0.0 目的地址是255.255.255.255
第二个是DHCPOFFER数据包,这个是服务器返回的包,源地址是192.168.9.1,这个是我的服务器的地址,问题就处在这个包的目的地址,居然不是255.255.255.255,而是服务器准备分配的一个IP地址。
根据DHCP协议的交互过程,这个OFFER包应该也是个广播包啊,客户端现在还没有获取到IP

请教一下这是为什么?
这个应该跟我的代码无关吧,还是服务器的配置有问题

论坛徽章:
2
巨蟹座
日期:2014-03-09 21:37:25射手座
日期:2014-04-16 16:23:03
9 [报告]
发表于 2008-10-15 21:04 |只看该作者
这个是服务器的配置问题吧。应该还是和DHCP DISCOVER报文中的flags字段有关,这个字段(总共16位)你看看最高位是否为1。为1代表接受广播报文,为0表示接受单播报文。具体还是参考RFC吧,我也不太记得清楚了。

论坛徽章:
0
10 [报告]
发表于 2008-10-16 13:36 |只看该作者

回复 #9 kwest 的帖子

现在服务器是好的,我用socket编程发了一个伪造的DISCOVER数据包广播过去,等待服务器的OFFER数据包,但是代码中recvfrom一直都接收不到东西
在这一过程中我用tcpdump截包发现服务器已经返回了一个OFFER包,并且是广播包,目的地址为255.255.255.255
为什么我的代码中就是recv不到呢?

我在服务器端编写一个代码发送广播包,就发送一个字符串,这样在客户端的代码中是可以recv的,这样应该我代码recvfrom的部分没问题吧,但是为什么就是recv不到OFFER包?请教一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP