Не удается увидеть пакет предложения DHCP в Wireshark, отправленный с помощью sendp из scapy

Я пытаюсь реализовать DHCP-сервер в scapy. Я обнюхиваю с помощью iface="Подключение по локальной сети 3" для udp sport 67 и dport 68 для обнаружения DHCP, а затем отправляю предложение DHCP с помощью команды sendp. Я не вижу в Wireshark свой пакет, и DHCP Clinet тоже не получает, он продолжает отправлять DHCP Discovers.

На wirehark я вижу только обнаружение DHCP от клиента.

Вот код:

def sniff_DHCP_discovers():
    sniff(filter='port 67 or port 68', prn=startThread, iface="Local Area Connection 3")

def startThread(pkt):
    thread = threading.Thread(target=process_DHCP_discover, args=(pkt,))
    thread.deamon = True
    thread.start()

def process_DHCP_discover(pkt):
    print 'Process ', ls(pkt)

    if DHCP in pkt:
        if pkt[DHCP].options[0][1]==1:
            print '\tDetected DHCP Discover from client: ', pkt[Ether].src          
            #Create DHCP Offer
            Ethernet = Ether(src="00:50:B6:0E:FE:36", dst=pkt[Ether].src)
            IPo = IP(src="192.168.0.100", dst="255.255.255.255")
            UDPo = UDP(sport=67, dport=68)
            BOOTPo = BOOTP(op=2, yiaddr="192.168.0.1", siaddr="192.168.0.100", giaddr='0.0.0.0', xid=pkt[BOOTP].xid)
            DHCPo = DHCP(options=[('message-type', 'offer'),('subnet_mask',IPv4_ConfigParam.SUBNET_MASK),('server_id', "192.168.0.100"), ('lease_time', 1800),('end')])
            pkt_Offer = Ethernet/IPo/UDPo/BOOTPo/DHCPo
            sendp(pkt_Offer, iface="Local Area Connection 3")
            print 'DHCP Offer sent: ', ls(pkt_Offer)

person user2399087    schedule 19.02.2014    source источник
comment
Что-то нашел, но все равно не видит свои пакеты в Wireshark. Заменено подключение по локальной сети 3 на eth2, поскольку команда ifaces из scapy определяет подключение по локальной сети 3 как eth2. Повторяю, проблема еще не решена.   -  person user2399087    schedule 19.02.2014


Ответы (2)


Пробовали ли вы просто отправлять пакеты и смотреть, работает ли это для начала? Это работает? Даже с iface="Local Area Connection 3"?

В любом случае, чтобы делать то, что вы хотите, вы должны использовать AnsweringMachine. Scapy уже поставляется с реализацией, BOOTP_am, вы можете взглянуть на код; вы можете использовать его напрямую с функцией Scapy bootpd().

Для начала вы можете просто использовать bootpd() без параметров; параметры, которые вы можете использовать после (когда/если это работает): ?at=default#cl-300" rel="nofollow">https://bitbucket.org/secdev/scapy/src/1d36e8fd9df8dfddbb5e9b3819910ace5e21e233/scapy/layers/dhcp.py?at=default#cl-300 ):

pool=Net("192.168.1.128/25")
network="192.168.1.0/24",gw="192.168.1.1"
domain="localnet"
person Pierre    schedule 19.02.2014
comment
Если я отправляю пакеты без указания iface, все равно не вижу пакеты в Wireshark. Попробую автоответчик. Можете ли вы привести пример использования bootpd() в моем коде? Спасибо - person user2399087; 20.02.2014

Удалось просмотреть пакеты в Wireshark. Вместо этого я использовал srp1(), а не sendp().

Сейчас обнаружил другую проблему. Когда я хочу имитировать сервер DHCP и отправить предложение DHCP, если я отправлю предложение с BOOTP.op = 2, как и должно быть, пакет не будет отправлен. Я не вижу его в Wireshark, и мой DHCP-клиент не делает никаких запросов. Если я отправлю предложение DHCP с BOOTP.op = 1, я увижу пакет на Wireshark, но это неверно (op=1 — это BOOTREQUEST, а op=2 — это BOOTREPLY)

person user2399087    schedule 21.02.2014