Я хочу создать IP-пакет с частью Vlan. Это легко сделать с помощью Scapy:
from scapy import inet
newpkt = inet.Ether()/inet.Dot1Q()/inet.IP()
Иногда я хочу иметь inet.Dot1Q()
в пакете, иногда нет. Каким должно быть значение по умолчанию для inet.Dot1Q()
, чтобы его можно было просто обойти в операторе '/'? Пробовал ''
и None
- не работают.
from scapy import inet
myDot1Q = SOME DEFAULT VALUE
newpkt = inet.Ether()/myDot1Q/inet.IP()
#new packet is a valid IP packet here
EDIT: другое объяснение моей проблемы
1) Я могу создать пакет с тегом VLAN
inet.Ether()/inet.Dot1Q/inet.IP()
2) Я могу создать пакет с двойным тегом VLAN
inet.Ether()/inet.Dot1Q/inet.Dot1Q/inet.IP()
3) Как создать пакет, который может быть нетегированным пакетом, пакетом с тегом VLAN или пакетом с двойным тегом VLAN? Было бы здорово иметь что-то вроде:
#No VLAN
myVlan = ???
myDoubleVlan = ???
#VLAN
myVlan = inet.Dot1Q()
myDoubleVlan = ???
#Double VLAN
myVlan = inet.Dot1Q()
myDoubleVlan = inet.Dot1Q()
#In any case the packet structure should remain the same
inet.Ether()/myVlan/myDoubleVlan/inet.IP()
Я не могу понять, каким должно быть значение по умолчанию ???
, чтобы можно было правильно построить пакет.