Ответ ICMP для параметров IP - PullRequest
0 голосов
/ 12 октября 2018

Как мне это сделать?

Я написал новое поле IP Option в исходном коде scapy 2.4 (scapy.layers.inet).

class IPOption_Ex(IPOption):
name = "IP Option Ex"
copy_flag = 1
option = 26
fields_desc = [_IPOption_HDR,
               ByteField("op1", 16),
               ShortField("op2", 0),
               ShortField("op3", 0),
               IPField("originator_ip", "0.0.0.0"),
               LongField("op4", 0)]

Это просто L3опция уровня, поэтому она не включает TCP или UDP.Всякий раз, когда пункт назначения получает новую опцию IP (скажем, 26), я хочу получить ответный ICMP-пакет (тип 45).Скажем, ответный ICMP-пакет имеет четыре поля: 1. Тип 2. Код 3. Контрольная сумма 4. Исходный IP-адрес.(scapy.layers.inet)

class ICMP(Packet):
name = "ICMP"
fields_desc = [ ByteEnumField("type",8, icmptypes),
                MultiEnumField("code",0, icmpcodes, depends_on=lambda pkt:pkt.type,fmt="B"),
                XShortField("chksum", None),
                ConditionalField(IPField("originator_ip","0.0.0.0"), lambda pkt:pkt.type==45)]

Теперь я не понимаю, как писать код в python / scapy для генерации ответного пакета ICMP типа 45 из пункта назначения и куда писать в исходном коде scapy.

1 Ответ

0 голосов
/ 13 октября 2018

Вам просто нужно

IPOption_Ex.register_variant()

Тогда у вас будет

IP(options=[IPOption(option=26)])

, работающий

...