2015-02-03 2 views
1

Я пытаюсь создать запрос на заказ DHCP с Option82 включен, но я не могу не задать длину подопции:Scapy пользовательских DHCP Option82

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 всегда неправильная длина. Кто-нибудь знает, как настроить заголовок адреса подзапроса?

Заранее благодарен!

ответ

1

DHCP Option 82 - это не простая строка, как "TEST". Вы можете найти очень хорошее объяснение опции в RFC3046 DHCP Option 82 является опцией «контейнер» для определенных опций агента. Формат опции Relay Agent Information является:

 Code Len  Agent Information Field 
    +------+------+------+------+------+------+--...-+------+ 
    | 82 | N | i1 | i2 | i3 | i4 |  | iN | 
    +------+------+------+------+------+------+--...-+------+ 

длина N дает общее число октетов в информационном поле Agent. Поле информации агента состоит из последовательности кортежей/Длина/Значение SubOpt для каждого суб-варианта, кодируемого следующим образом:

 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 не работает с подопций, так что вы должны предоставить полный вариант 82 поле в шестнадцатеричном формате, включая длину поля и т.д. в качестве примера рассмотрим следующую модификацию кода, который дает правильную длину Вариант 82:

... 
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 Option 82 является \x01\x01\x05\x02\x06\x11\x22\x34\x44\x55\x66. Здесь Circuit ID = 05 и Remote ID = 112233445566. Соответствующий сброс Wireshark ниже:

Wireshark dump of the packet

Смежные вопросы