首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问scapy DHCP请求中的字段

访问scapy DHCP请求中的字段
EN

Stack Overflow用户
提问于 2020-10-07 22:07:34
回答 1查看 157关注 0票数 0

我决定试着用scapy来申请一个IP。我能够发送一个发现,并在变量ansD中收到一个报价。不幸的是,我在访问包含提供的IP地址的字段时遇到了问题,该IP地址应该是ansDBOOTP.yiaddr。它告诉我该字段不存在。我看了看周围,看到了类似的问题,但似乎不能理解为什么我可以访问正常的数据包字段,但无法使用BOOTP字段。

代码语言:javascript
复制
receivedIP = 0
conf.checkIPaddr = False
fam,hw = get_if_raw_hwaddr(conf.iface)
dhcp_discover = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw)/DHCP(options=[("message-type","discover"),"end"])
ansD,unans = srp(dhcp_discover, multi=True)

if True:
dhcp_request=Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw,yiaddr=ansD[BOOTP].yiaddr)/DHCP(options=[("message-type","request"),"end"])
ansR, unans = srp(dhcp_request,multi=True)

对象错误'list‘对象没有属性'yiaddr’

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 22:26:22

我在发帖后不到两秒就发现了这一点,但希望这能在未来对其他人有所帮助。

我使用了srp()而不是srp1(),前者返回多个数据包,因此我需要为要查看ansD.yiaddr的特定数据包建立索引。此后,我将代码改为使用srp1,因为这是一个只希望从DHCP服务器得到一个特定"Offer“回复的DHCP请求。修复了下面的代码

代码语言:javascript
复制
import sys
from scapy.all import *


receivedIP = 0
conf.checkIPaddr = False
fam,hw = get_if_raw_hwaddr(conf.iface)
dhcp_discover=Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw)/DHCP(options=[("message-type","discover"),"end"])
ansD = srp1(dhcp_discover, multi=True)
if True:
//Request using the IP the server offered us in ansD[BOOTP].yiaddr    

    dhcp_request = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw,yiaddr=ansD[BOOTP].yiaddr)/DHCP(options=[("message-type","request"),"end"])
    ansR, unans = srp(dhcp_request,multi=True)
    ansR.summary()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64245832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档