| % Regression tests on Windows only for Scapy |
| |
| # More information at http://www.secdev.org/projects/UTscapy/ |
| |
| + Configuration |
| |
| = Imports |
| |
| from unittest import mock |
| |
| ############ |
| ############ |
| + Mechanics tests |
| |
| = Automaton - Test select_objects edge cases |
| |
| assert select_objects([ObjectPipe()], 0) == [] |
| assert select_objects([ObjectPipe()], 1) == [] |
| |
| a = ObjectPipe() |
| a.send("test") |
| assert select_objects([a], 0) == [a] |
| |
| ############ |
| ############ |
| + Windows arch unit tests |
| |
| = Test network_name |
| |
| iface = conf.iface |
| |
| assert network_name(iface.name) == iface.network_name |
| assert network_name(iface.description) == iface.network_name |
| assert network_name(iface.network_name) == iface.network_name |
| |
| = dev_from_networkname |
| |
| from scapy.config import conf |
| |
| assert dev_from_networkname(conf.iface.network_name).guid == conf.iface.guid |
| |
| = test pcap_service_status |
| ~ npcap_service |
| |
| from scapy.arch.windows import pcap_service_status |
| |
| status = pcap_service_status() |
| assert status |
| |
| = test get_if_list |
| |
| from scapy.interfaces import get_if_list |
| |
| print(get_if_list()) |
| assert all(x.startswith(r"\Device\NPF_") for x in get_if_list()) |
| |
| = test pcap_service_stop |
| ~ appveyor_only require_gui npcap_service |
| |
| from scapy.arch.windows import pcap_service_stop |
| |
| pcap_service_stop() |
| assert pcap_service_status() == False |
| |
| = test pcap_service_start |
| ~ appveyor_only require_gui npcap_service |
| |
| from scapy.arch.windows import pcap_service_start |
| |
| pcap_service_start() |
| assert pcap_service_status() == True |
| |
| = Test auto-pcap start UI |
| |
| @mock.patch("scapy.arch.windows.get_windows_if_list") |
| def _test_autostart_ui(mocked_getiflist): |
| mocked_getiflist.side_effect = lambda: [] |
| conf.ifaces.reload() |
| assert all(x.index < 0 for x in conf.ifaces.data.values()) |
| |
| try: |
| old_ifaces = conf.ifaces.data.copy() |
| _test_autostart_ui() |
| finally: |
| conf.ifaces.data = old_ifaces |
| |
| ######### Native mode ########### |
| |
| + Test Windows Native sockets |
| |
| = Set up native mode |
| |
| conf.use_pcap = False |
| conf.route.resync() |
| conf.ifaces.reload() |
| assert conf.use_pcap == False |
| |
| = Ping |
| ~ netaccess needs_root |
| |
| def _test(): |
| with conf.L3socket() as a: |
| answer = a.sr1(IP(dst="1.1.1.1", ttl=128)/ICMP()/"abcdefghijklmnopqrstuvwabcdefghi", timeout=2) |
| answer.show() |
| assert ICMP in answer |
| |
| retry_test(_test) |
| |
| = DNS lookup |
| ~ netaccess needs_root |
| |
| def _test(): |
| answer = sr1(IP(dst="8.8.8.8")/UDP()/DNS(rd=1, qd=DNSQR(qname="www.google.com")), timeout=2) |
| answer.show() |
| assert DNS in answer |
| assert answer.qd.qname == b'www.google.com.' |
| |
| retry_test(_test) |
| |
| = Leave native mode |
| |
| conf.use_pcap = True |
| conf.route.resync() |
| conf.ifaces.reload() |
| assert conf.use_pcap == True |