Skip to content
Extraits de code Groupes Projets
Valider 042f210e rédigé par François De Keersmaeker's avatar François De Keersmaeker
Parcourir les fichiers

MAC: support for DHCP finished

parent 0aa872df
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #60371 annulé
...@@ -125,7 +125,10 @@ def anonymize_mac(mac: str) -> str: ...@@ -125,7 +125,10 @@ def anonymize_mac(mac: str) -> str:
# Multicast address: # Multicast address:
# do not anonymize # do not anonymize
if is_multicast: if is_multicast:
return mac if isinstance(mac, bytes):
return mac_bytes_to_str(mac)
elif isinstance(mac, str):
return mac
## U/L bit: first byte, second least-significant bit ## U/L bit: first byte, second least-significant bit
# U/L bit = 0 ==> Universally administered address (UAA) # U/L bit = 0 ==> Universally administered address (UAA)
...@@ -221,8 +224,8 @@ def anonymize_dhcp(dhcp: BOOTP) -> BOOTP: ...@@ -221,8 +224,8 @@ def anonymize_dhcp(dhcp: BOOTP) -> BOOTP:
for i, (code, value) in enumerate(dhcp.options): for i, (code, value) in enumerate(dhcp.options):
if code == DHCP_OPTION_CLIENT_ID and value[0] == DHCP_CLIENT_ID_TYPE_ETH: if code == DHCP_OPTION_CLIENT_ID and value[0] == DHCP_CLIENT_ID_TYPE_ETH:
mac = ":".join(f"{byte:02x}" for byte in value[1:7]) mac_anon = mac_str_to_bytes(anonymize_mac(value[1:7]))
dhcp.options[i] = (code, anonymize_mac(mac)) dhcp.options[i] = (code, value[0].to_bytes(1, BYTE_ORDER) + mac_anon)
break break
return dhcp return dhcp
...@@ -79,7 +79,7 @@ def test_anonymize_mac_multicast() -> None: ...@@ -79,7 +79,7 @@ def test_anonymize_mac_multicast() -> None:
The MAC address should not be anonymized. The MAC address should not be anonymized.
""" """
assert anonymize_mac(mac_multicast) == mac_multicast assert anonymize_mac(mac_multicast) == mac_multicast
assert anonymize_mac(mac_multicast_bytes) == mac_multicast_bytes assert mac_str_to_bytes(anonymize_mac(mac_multicast_bytes)) == mac_multicast_bytes
def test_anonymize_mac_laa() -> None: def test_anonymize_mac_laa() -> None:
...@@ -193,31 +193,57 @@ def test_anonymize_arp_uaa() -> None: ...@@ -193,31 +193,57 @@ def test_anonymize_arp_uaa() -> None:
assert arp_uaa.hwdst[10:] != mac_uaa[10:] assert arp_uaa.hwdst[10:] != mac_uaa[10:]
# def test_anonymize_dhcp_multicast() -> None: def test_anonymize_dhcp_multicast() -> None:
# """ """
# Test the function `anonymize_dhcp`, Test the function `anonymize_dhcp`,
# with multicast addresses. with multicast addresses.
# """ """
# dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast)) # Client hardware address
# anonymize_dhcp(dhcp) dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast))
# assert dhcp.chaddr == mac_multicast_bytes anonymize_dhcp(dhcp)
assert dhcp.chaddr == mac_multicast_bytes
# def test_anonymize_dhcp_laa() -> None: # Option: Client Identifier
# """ dhcp /= DHCP(options=[("client_id", b"\x01" + mac_str_to_bytes(mac_multicast))])
# Test the function `anonymize_dhcp`, anonymize_dhcp(dhcp)
# with locally administered addresses. assert dhcp.getlayer(DHCP).options[0][1][1:7] == mac_multicast_bytes
# """
# dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast))
# anonymize_dhcp(dhcp) def test_anonymize_dhcp_laa() -> None:
# assert get_ig_bit(dhcp.chaddr) == get_ig_bit(mac_multicast_bytes) """
Test the function `anonymize_dhcp`,
with locally administered addresses.
# def test_anonymize_dhcp_multicast() -> None: """
# """ # Client hardware address
# Test the function `anonymize_dhcp`, dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_laa))
# with multicast addresses. anonymize_dhcp(dhcp)
# """ assert dhcp.chaddr != mac_laa_bytes
# dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast)) assert get_ig_bit(dhcp.chaddr) == get_ig_bit(mac_laa_bytes)
# anonymize_dhcp(dhcp) assert get_ul_bit(dhcp.chaddr) == get_ul_bit(mac_laa_bytes)
# assert dhcp.chaddr == mac_multicast_bytes
# Option: Client Identifier
dhcp /= DHCP(options=[("client_id", b"\x01" + mac_str_to_bytes(mac_laa))])
anonymize_dhcp(dhcp)
mac_anon = dhcp.getlayer(DHCP).options[0][1][1:7]
assert mac_anon != mac_laa_bytes
assert get_ig_bit(mac_anon) == get_ig_bit(mac_laa_bytes)
assert get_ul_bit(mac_anon) == get_ul_bit(mac_laa_bytes)
def test_anonymize_dhcp_uaa() -> None:
"""
Test the function `anonymize_dhcp`,
with universally administered addresses.
"""
# Client hardware address
dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_uaa))
anonymize_dhcp(dhcp)
assert dhcp.chaddr[:3] == mac_uaa_bytes[:3]
assert dhcp.chaddr[3:] != mac_uaa_bytes[3:]
# Option: Client Identifier
dhcp /= DHCP(options=[("client_id", b"\x01" + mac_str_to_bytes(mac_uaa))])
anonymize_dhcp(dhcp)
mac_anon = dhcp.getlayer(DHCP).options[0][1][1:7]
assert mac_anon[:3] == mac_uaa_bytes[:3]
assert mac_anon[3:] != mac_uaa_bytes[3:]
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter