diff --git a/pcap_anonymize/layers/mac.py b/pcap_anonymize/layers/mac.py index f03836d9405c5d5d2916f3d9528608e10c30bb5c..ffcdc1474f1701599403ab8b66b93031ca1f479e 100644 --- a/pcap_anonymize/layers/mac.py +++ b/pcap_anonymize/layers/mac.py @@ -125,7 +125,10 @@ def anonymize_mac(mac: str) -> str: # Multicast address: # do not anonymize 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 = 0 ==> Universally administered address (UAA) @@ -221,8 +224,8 @@ def anonymize_dhcp(dhcp: BOOTP) -> BOOTP: for i, (code, value) in enumerate(dhcp.options): 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]) - dhcp.options[i] = (code, anonymize_mac(mac)) + mac_anon = mac_str_to_bytes(anonymize_mac(value[1:7])) + dhcp.options[i] = (code, value[0].to_bytes(1, BYTE_ORDER) + mac_anon) break return dhcp diff --git a/test/test_mac.py b/test/test_mac.py index 71795d7fb529775a13e3795d989a4693ec8bde6b..bb0bd836fa6708d95fe73a1d183dac803eade313 100644 --- a/test/test_mac.py +++ b/test/test_mac.py @@ -79,7 +79,7 @@ def test_anonymize_mac_multicast() -> None: The MAC address should not be anonymized. """ 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: @@ -193,31 +193,57 @@ def test_anonymize_arp_uaa() -> None: assert arp_uaa.hwdst[10:] != mac_uaa[10:] -# def test_anonymize_dhcp_multicast() -> None: -# """ -# Test the function `anonymize_dhcp`, -# with multicast addresses. -# """ -# dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast)) -# anonymize_dhcp(dhcp) -# assert dhcp.chaddr == mac_multicast_bytes - - -# def test_anonymize_dhcp_laa() -> None: -# """ -# Test the function `anonymize_dhcp`, -# with locally administered addresses. -# """ -# dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast)) -# anonymize_dhcp(dhcp) -# assert get_ig_bit(dhcp.chaddr) == get_ig_bit(mac_multicast_bytes) - - -# def test_anonymize_dhcp_multicast() -> None: -# """ -# Test the function `anonymize_dhcp`, -# with multicast addresses. -# """ -# dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast)) -# anonymize_dhcp(dhcp) -# assert dhcp.chaddr == mac_multicast_bytes +def test_anonymize_dhcp_multicast() -> None: + """ + Test the function `anonymize_dhcp`, + with multicast addresses. + """ + # Client hardware address + dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_multicast)) + anonymize_dhcp(dhcp) + assert dhcp.chaddr == mac_multicast_bytes + + # Option: Client Identifier + dhcp /= DHCP(options=[("client_id", b"\x01" + mac_str_to_bytes(mac_multicast))]) + anonymize_dhcp(dhcp) + assert dhcp.getlayer(DHCP).options[0][1][1:7] == mac_multicast_bytes + + +def test_anonymize_dhcp_laa() -> None: + """ + Test the function `anonymize_dhcp`, + with locally administered addresses. + """ + # Client hardware address + dhcp = BOOTP(chaddr=mac_str_to_bytes(mac_laa)) + anonymize_dhcp(dhcp) + assert dhcp.chaddr != mac_laa_bytes + assert get_ig_bit(dhcp.chaddr) == get_ig_bit(mac_laa_bytes) + assert get_ul_bit(dhcp.chaddr) == get_ul_bit(mac_laa_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:]