From 44fa5cf0c0a185b23ae253bdb43e85d972d90213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20De=20Keersmaeker?= <francois.dekeersmaeker@uclouvain.be> Date: Fri, 13 Dec 2024 17:31:12 +0100 Subject: [PATCH] Unit tests: added tests for anonymize_ether --- pcap_anonymize/layers/mac.py | 1 + test/test_mac.py | 58 +++++++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/pcap_anonymize/layers/mac.py b/pcap_anonymize/layers/mac.py index 8670ce1..2ea88d8 100644 --- a/pcap_anonymize/layers/mac.py +++ b/pcap_anonymize/layers/mac.py @@ -154,6 +154,7 @@ def anonymize_dhcp(dhcp: BOOTP) -> BOOTP: # Anonymize client hardware address chaddr = dhcp.getfieldval("chaddr")[0:6] dhcp.setfieldval("chaddr", anonymize_mac(chaddr)) + dhcp.show() # Check if BOOTP layer contains DHCP options options = dhcp.getfieldval("options") diff --git a/test/test_mac.py b/test/test_mac.py index 7e72333..098032f 100644 --- a/test/test_mac.py +++ b/test/test_mac.py @@ -1,4 +1,18 @@ -from pcap_anonymize.layers.mac import get_ig_bit, get_ul_bit, anonymize_mac +from scapy.layers.l2 import Ether, ARP +from pcap_anonymize.layers.mac import ( + get_ig_bit, get_ul_bit, + anonymize_mac, + anonymize_ether, + anonymize_arp, + anonymize_dhcp +) + + +### TEST CONSTANTS ### + +mac_multicast = "01:00:00:00:00:00" +mac_laa = "02:00:00:00:00:00" +mac_uaa = "00:11:22:33:44:55" ### TEST FUNCTIONS ### @@ -27,7 +41,6 @@ def test_anonymize_mac_multicast() -> None: with a multicast MAC address. The MAC address should not be anonymized. """ - mac_multicast = "01:00:00:00:00:00" assert anonymize_mac(mac_multicast) == mac_multicast @@ -37,7 +50,6 @@ def test_anonymize_mac_laa() -> None: with a locally administered MAC address. All bits should be anonymized except the I/G and U/L bits. """ - mac_laa = "02:00:00:00:00:00" mac_laa_anon = anonymize_mac(mac_laa) assert mac_laa_anon != mac_laa # Verify I/G and U/L bits @@ -52,7 +64,45 @@ def test_anonymize_mac_uaa() -> None: The 3 first bytes (vendor's OUI) should be kept, and the 3 last bytes should be anonymized. """ - mac_uaa = "00:11:22:33:44:55" mac_uaa_anon = anonymize_mac(mac_uaa) assert mac_uaa_anon.startswith(mac_uaa[:8]) # Vendor's OUI is kept assert mac_uaa_anon[10:] != mac_uaa[10:] # Last 3 bytes are anonymized + + +def test_anonymize_ether_multicast() -> None: + """ + Test the function `anonymize_ether`, + with multicast addresses. + """ + ether_multicast = Ether(src=mac_multicast, dst=mac_multicast) + anonymize_ether(ether_multicast) + assert ether_multicast.src == mac_multicast + assert ether_multicast.dst == mac_multicast + + +def test_anonymize_ether_laa() -> None: + """ + Test the function `anonymize_ether`, + with locally administered addresses. + """ + ether_laa = Ether(src=mac_laa, dst=mac_laa) + anonymize_ether(ether_laa) + assert ether_laa.src != mac_laa + assert get_ig_bit(ether_laa.src) == get_ig_bit(mac_laa) + assert get_ul_bit(ether_laa.src) == get_ul_bit(mac_laa) + assert ether_laa.dst != mac_laa + assert get_ig_bit(ether_laa.dst) == get_ig_bit(mac_laa) + assert get_ul_bit(ether_laa.dst) == get_ul_bit(mac_laa) + + +def test_anonymize_ether_uaa() -> None: + """ + Test the function `anonymize_ether`, + with universally administered addresses. + """ + ether_laa = Ether(src=mac_uaa, dst=mac_uaa) + anonymize_ether(ether_laa) + assert ether_laa.src.startswith(mac_uaa[:8]) + assert ether_laa.src[10:] != mac_uaa[10:] + assert ether_laa.dst.startswith(mac_uaa[:8]) + assert ether_laa.dst[10:] != mac_uaa[10:] -- GitLab