我正在尝试创建一个包含Option82的自定义DHCP请求,但我无法设置子选项的长度:
ethernet= Ether(dst='ff:ff:ff:ff:ff:ff',src=get_if_hwaddr("eth1"), type=0x800)
ip= IP(src='0.0.0.0', dst='255.255.255.255')
udp = UDP(sport=68, dport=67)
bootp = BOOTP(chaddr =hw, ciaddr ='0.0.0.0', xid =0x01020304, flags= 1)
dhcp = DHCP(options=[("message-type","discover")])/DHCP(options=[("relay_agent_Information", "TEST"), "end"])
packet = ethernet / ip / udp / bootp / dhcp无论我做什么,option82的长度总是错误的。是否有人知道如何设置子选项的地址头?
提前感谢!
发布于 2015-04-18 03:05:47
DHCP选项82不是像"TEST"那样的简单字符串。您可能会发现在RFC3046中对该选项有一个非常好的解释,该选项82是一个用于特定代理提供的子选项的“容器”选项。中继代理信息选项的格式为:
Code Len Agent Information Field
+------+------+------+------+------+------+--...-+------+
| 82 | N | i1 | i2 | i3 | i4 | | iN |
+------+------+------+------+------+------+--...-+------+长度N表示座席信息字段中的八位字节总数。座席信息字段由每个子选项的SubOpt/Length/Value元组序列组成,编码方式如下:
SubOpt Len Sub-option Value
+------+------+------+------+------+------+--...-+------+
| 1 | N | s1 | s2 | s3 | s4 | | sN |
+------+------+------+------+------+------+--...-+------+
SubOpt Len Sub-option Value
+------+------+------+------+------+------+--...-+------+
| 2 | N | i1 | i2 | i3 | i4 | | iN |
+------+------+------+------+------+------+--...-+------+Scapy并不使用子选项,因此您需要以十六进制格式提供完整的Option82字段,包括字段长度等。例如,请考虑对代码进行以下修改,以生成Option82的正确长度:
...
option82 = "\x01\x01\x05\x02\x06\x11\x22\x34\x44\x55\x66"
dhcp = DHCP(options=[("message-type","discover")])/DHCP(options=[("relay_agent_Information", option82), "end"])
...在这种特定情况下,DHCP选项82是\x01\x01\x05\x02\x06\x11\x22\x34\x44\x55\x66。这里是Circuit ID = 05和Remote ID = 112233445566。对应的Wireshark转储如下:

https://stackoverflow.com/questions/28301914
复制相似问题