diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py index 26bf33d4ca3ee573d30725414eb3965169a82194..0c68a4af0097132878bef96a981cbb028d000b2a 100644 --- a/scapy/layers/l2.py +++ b/scapy/layers/l2.py @@ -496,6 +496,20 @@ class EAP(Packet): return p + pay +class EAP_MD5(Packet): + + """ + RFC 3748 - "Extensible Authentication Protocol (EAP)" + """ + + name = "EAP-MD5" + fields_desc = [ + ByteField("value_size", 0), + StrFixedLenField("value", 0, length=16), # MD5 hash length + StrLenField("optional_name", "", length_from=lambda p: p.value_size - 16) + ] + + class EAP_TLS(Packet): """ @@ -660,6 +674,7 @@ bind_layers( GRE, GRErouting, { "routing_present" : 1 } ) bind_layers( GRErouting, conf.raw_layer,{ "address_family" : 0, "SRE_len" : 0 }) bind_layers( GRErouting, GRErouting, { } ) bind_layers( EAPOL, EAP, type=0) +bind_layers( EAP, EAP_MD5, type=4) bind_layers(EAP, EAP_TLS, type=13) bind_layers(EAP, EAP_FAST, type=43) bind_layers( LLC, STP, dsap=66, ssap=66, ctrl=3) diff --git a/test/regression.uts b/test/regression.uts index 41c640a052f88744958fa0db5aade328c5bf3700..d5645714b191ef11911a3e47fe073b112255c4e4 100644 --- a/test/regression.uts +++ b/test/regression.uts @@ -5464,6 +5464,29 @@ assert(eap.type == 3) assert(hasattr(eap, 'desired_auth_type')) assert(eap.desired_auth_type == 43) += EAP - EAP_MD5 - Request - Dissection (8) +s = '\x01\x02\x00\x16\x04\x10\x86\xf9\x89\x94\x81\x01\xb3 nHh\x1b\x8d\xe7^\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' +eap = EAP(s) +assert(eap.code == 1) +assert(eap.id == 2) +assert(eap.len == 22) +assert(eap.type == 4) +assert(eap.haslayer(EAP_MD5)) +assert(eap[EAP_MD5].value_size == 16) +assert(eap[EAP_MD5].value == '\x86\xf9\x89\x94\x81\x01\xb3 nHh\x1b\x8d\xe7^\xdb') +assert(eap[EAP_MD5].optional_name == '') + += EAP - EAP_MD5 - Response - Dissection (9) +s = '\x02\x02\x00\x16\x04\x10\xfd\x1e\xffe\xf5\x80y\xa8\xe3\xc8\xf1\xbd\xc2\x85\xae\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' +eap = EAP(s) +assert(eap.code == 2) +assert(eap.id == 2) +assert(eap.len == 22) +assert(eap.type == 4) +assert(eap.haslayer(EAP_MD5)) +assert(eap[EAP_MD5].value_size == 16) +assert(eap[EAP_MD5].value == '\xfd\x1e\xffe\xf5\x80y\xa8\xe3\xc8\xf1\xbd\xc2\x85\xae\xcf') +assert(eap[EAP_MD5].optional_name == '') ############ ############