1+ BFD 2 3= BFD, basic instantiation 4 5from scapy.contrib.bfd import * 6a = UDP(sport=3784, dport=3784)/BFD() 7assert raw(a) == b'\x0e\xc8\x0e\xc8\x00 \x00\x00 \xc0\x03\x18\x11\x11\x11\x11"""";\x9a\xca\x00;\x9a\xca\x00;\x9a\xca\x00' 8 9= BFD - dissection 10 11assert BFD in UDP(raw(a)) 12 13= BFD with OptionalAuth [Simple Password Auth] [dissection] 14p = UDP(b'\x04\x00\x0e\xc8\x00\x29\x72\x31\x20\x44\x05\x21\x00\x00\x00\x01\x00\x00\x00\x00\x00\x0f\x42\x40\x00\x0f\x42\x40\x00\x00\x00\x00\x01\x09\x02\x73\x65\x63\x72\x65\x74\x4e\x0a\x90\x40') 15assert(isinstance(p[1], BFD)) 16assert(p[1].len == 33) 17assert(isinstance(p[2], OptionalAuth)) 18assert(p[2].auth_type == 1) 19assert(p[2].auth_len == 9) 20 21= BFD with OptionalAuth [Keyed MD5 Auth] [dissection] 22p = UDP(b'\x04\x00\x0e\xc8\x00\x38\x6a\xcc\x20\x44\x05\x30\x00\x00\x00\x01\x00\x00\x00\x00\x00\x0f\x42\x40\x00\x0f\x42\x40\x00\x00\x00\x00\x02\x18\x02\x00\x00\x00\x00\x05\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x3c\xc3\xf8\x21') 23assert(isinstance(p[1], BFD)) 24assert(p[1].len == 48) 25assert(isinstance(p[2], OptionalAuth)) 26assert(p[2].auth_type ==2) 27assert(p[2].auth_len == 24) 28 29= BFD with OptionalAuth [Meticulous Keyed SHA1 Auth] [dissection] 30p = UDP(b'\x04\x00\x0e\xc8\x00\x3c\x37\x8a\x20\x44\x05\x34\x00\x00\x00\x01\x00\x00\x00\x00\x00\x0f\x42\x40\x00\x0f\x42\x40\x00\x00\x00\x00\x05\x1c\x02\x00\x00\x00\x00\x05\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\xea\x6d\x1f\x21') 31assert(isinstance(p[1], BFD)) 32assert(p[1].len == 52) 33assert(isinstance(p[2], OptionalAuth)) 34assert(p[2].auth_type ==5) 35assert(p[2].auth_len == 28) 36 37= BFD with OptionalAuth [Simple Password Auth] [Build] 38p = UDP(sport=3784, dport=3784)/BFD(flags="A", optional_auth=OptionalAuth(auth_type=1)) 39assert raw(p) == b'\x0e\xc8\x0e\xc8\x00+\x00\x00 \xc4\x03#\x11\x11\x11\x11"""";\x9a\xca\x00;\x9a\xca\x00;\x9a\xca\x00\x01\x0b\x01password' 40 41= BFD with OptionalAuth [Keyed MD5 Auth] [Build] 42p = UDP(sport=3784, dport=3784)/BFD(flags="A", optional_auth=OptionalAuth(auth_type=2)) 43assert raw(p) == b'\x0e\xc8\x0e\xc8\x008\x00\x00 \xc4\x030\x11\x11\x11\x11"""";\x9a\xca\x00;\x9a\xca\x00;\x9a\xca\x00\x02\x18\x01\x00\x00\x00\x00\x00_M\xcc;Z\xa7e\xd6\x1d\x83\'\xde\xb8\x82\xcf\x99' 44 45= BFD with OptionalAuth [Meticulous Keyed SHA1 Auth] [Build] 46p = UDP(sport=3784, dport=3784)/BFD(flags="A", optional_auth=OptionalAuth(auth_type=5)) 47assert raw(p) == b'\x0e\xc8\x0e\xc8\x00<\x00\x00 \xc4\x034\x11\x11\x11\x11"""";\x9a\xca\x00;\x9a\xca\x00;\x9a\xca\x00\x05\x1c\x01\x00\x00\x00\x00\x00[\xaaa\xe4\xc9\xb9??\x06\x82%\x0bl\xf83\x1b~\xe6\x8f\xd8'