2016-08-25 3 views
0

Есть ли другой способ, которым я мог бы использовать Scapy для настройки пакета с несколькими атрибутами флага?Scapy BGP Flags Атрибут

Я пытаюсь настроить BGP-слой как с необязательными, так и с переходными атрибутами. Я использую этот файл github: https://github.com/levigross/Scapy/blob/master/scapy/contrib/bgp.py. В строке 107 находятся флаги, которые я пытаюсь добавить.

Прошлые неудачные попытки включают в себя:

>>>a=BGPPathAttribute(flags=["Optional","Transitive"]) 
>>>send(a) 
TypeError: unsupported operand type(s) for &: 'str' and 'int' 

>>>a=BGPPathAttribute(flags=("Optional","Transitive")) 
>>>send(a) 
TypeError: unsupported operand type(s) for &: 'tuple' and 'int' 

>>>a=BGPPathAttribute(flags="Optional")/BGPPathAttribute(flags="Transitive") 
Creates 2 separate path attributes: One which is Optional and Non-Transitive and the other which is Well Known and Transitive. 

>>>a=BGPPathAttribute(flags="Optional", flags="Transitive") 
SyntaxError: keyword argument repeated 

>>>a=BGPPathAttribute(flags="OT") 
ValueError: ['OT'] is not in list 

ответ

1

Можно настроить несколько атрибутов флага, перечисляя их в одной строке, разделенных с '+' знак:

In [1]: from scapy.all import * 
WARNING: No route found for IPv6 destination :: (no default route?) 

In [2]: from scapy.contrib.bgp import BGPPathAttribute 

In [3]: BGPPathAttribute(flags='Optional+Transitive') 
Out[3]: <BGPPathAttribute flags=Transitive+Optional |> 

In [4]: send(_) 
WARNING: Mac address to reach destination not found. Using broadcast. 
. 
Sent 1 packets. 

Альтернативой метод, чтобы непосредственно вычислить численное значение требуемой комбинации флагов, предоставляется для полноты:

In [1]: from scapy.all import * 
WARNING: No route found for IPv6 destination :: (no default route?) 

In [2]: from scapy.contrib.bgp import BGPPathAttribute 

In [3]: BGPPathAttribute(flags='Optional').flags | BGPPathAttribute(flags='Transitive').flags 
Out[3]: 192 

In [4]: BGPPathAttribute(flags=_) 
Out[4]: <BGPPathAttribute flags=Transitive+Optional |> 

In [5]: send(_) 
WARNING: Mac address to reach destination not found. Using broadcast. 
. 
Sent 1 packets. 
+0

Спасибо, я нашел другой способ на случай, если вам любопытно, flags = 192 устанавливает его как для опциональных, так и для транзитивных. –

+0

Я забыл упомянуть об этом, так как я не считаю его элегантным, но теперь я включил его для полноты; Благодаря! – Yoel