2016-02-18 8 views
2

Я хотел бы реализовать новый безопасный протокол ARP, который невосприимчив к отравлению ARP. Новый «SecureArp» будет содержать поле подписи, которое может быть проверено на согласованной функции hmac. Определения scapy выглядит следующим образом:Добавление нового протокола в scapy (Similiar to ARP)

class SecureArp(Packet): 
    name = "SecureARP" 
    fields_desc = [IPField("srcip", None), 
       MACField("srcmac", None), 
       IPField("dstip", None), 
       MACField("dstmac", "00:00:00:00:00:00"), 
       IntEnumField("opcode", 1, { 1: "request", 2: "response" }), 
       StrFixedLenField("challenge", "", length=24), 
       StrFixedLenField("signature", "", length=20)] 

Проблемы я сталкиваюсь в том, что при получении такого SecureArp сообщения scapy не разобрать его на всех, и оставляет данные как «Raw». Я прочитал документацию SecDev о распространении на новый протокол и его очень неясно. Какие шаги следует предпринять, чтобы полученный пакет SecureArp автоматически анализировался? Спасибо

ответ

3

Вам нужно будет bind your layer в другой, чтобы скопировать его автоматически.

Также см. Scapys ARP осуществления.

bind_layers(Ether,   ARP,   type=2054) 
+0

Спасибо за ответ. Дело в том, что я использовал bind_layers для нового типа (скажем, 1337). При создании пакета я использую Ethernet с типом = 1337, а под ним - новый слой, а при обнюхивании на другом конце слой 2 отображается как Dot3 вместо Ether, поэтому автоматическая диссекция не выполняется. Я попытался отправить его как с send(), так и sendp(), но по какой-то причине он всегда интерпретируется как Dot3. Есть предположения? – vito

+0

Ну, это ответ. Вам нужно связать слои ... Проблема, с которой я столкнулся, заключалась в том, что я определил значение типа ниже 1500, и это привело к тому, что scapy лидировал его до Dot3. после увеличения значения до 1800 проблема была решена. Благодаря! – vito