Выпуск DHCP с использованием scapy

Я хочу отправлять пакеты выпуска DHCP на сервер DHCP в моей локальной сети.

У меня есть MAC-адреса машин, для которых я хочу подделывать RELEASE-пакеты.

Погуглил, ничего полезного не нашел. Может ли кто-нибудь указать мне в правильном направлении?

Я попытался отправить пакет DHCP с параметрами тип сообщения: выпуск. В основном я пытался выпустить свой собственный IP. Но это не сработало.

sendp(Ether(dst=server_mac)/IP(src=my_ip,dst=server_ip)/UDP(sport=68,dport=67)/BOOTP(chaddr=my_mac)/DHCP(options=[("message-type","release")]))

person VishalDevgire    schedule 28.03.2014    source источник
comment
Вы не дали много информации о том, что вы уже пробовали ... Я сам не знаю протокола, но я полагаю, что вы просто откроете сокет на адрес DHCP-сервера на DHCP-порте по умолчанию и сочините инструкция RELEASE в соответствии со спецификацией DHCP, которая должна быть легко доступна.   -  person GVH    schedule 28.03.2014
comment
См. этот пример и измените тип сообщения на быть освобождением. Если это не работает для вас, вернитесь и отредактируйте свой пост, чтобы включить код, который вы пробовали, тогда я буду рад помочь.   -  person mdadm    schedule 28.03.2014
comment
@mdadm Отредактировал мой вопрос.   -  person VishalDevgire    schedule 29.03.2014
comment
@VishalD Смотрите мой ответ ниже.   -  person mdadm    schedule 29.03.2014


Ответы (1)


Спасибо за попытку. Есть одна важная вещь, о которой следует помнить, когда речь идет о сообщении о выпуске DHCP. Когда вы отправляете сообщение на сервер, это фактически не приведет к освобождению IP-адреса на вашем локальном компьютере. Если вы думаете создать демонстрацию DOS или какой-либо другой атаки с помощью RELEASE, вам не очень повезет.

Сообщение об освобождении просто сообщает DHCP-серверу, что клиент отказывается от сетевого адреса и отменяет оставшуюся аренду. Клиент может прекратить использование адреса после того, как он отказался от него.

С точки зрения того, почему это может не работать для вас, есть несколько вещей, которые приходят на ум.

  1. MAC-адрес может быть неправильным, вы не указали, как вы установили my_mac... вы не можете просто использовать здесь строку. Вы можете использовать значение, полученное из функции get_if_raw_hwaddr.
  2. Вам не хватает адреса клиента и идентификатора транзакции в загрузочной части сообщения.
  3. Вам не хватает идентификатора сервера, и вы заканчиваете параметры DHCP. Если вы использовали идентификатор клиента для получения адреса, вы должны использовать его в выпуске. Стандарт предписывает это, но не все DHCP-серверы предписывают это.

Вот пример, который работает для меня. Вы можете узнать больше о DHCP, прочитав спецификацию RFC и/или используя Wireshark для захвата и наблюдайте за реальными пакетами.

from scapy import *
fam,hw = get_if_raw_hwaddr('wlan0')    
send(IP(src=my_ip,dst=server_ip) / 
     UDP(sport=68,dport=67) /
     BOOTP(chaddr=hw, ciaddr='192.168.0.101', xid=random.randint(0, 0xFFFFFFFF)) /
     DHCP(options=[("message-type","release"), ("server_id", "192.168.0.1"), 'end']))
person mdadm    schedule 28.03.2014