1% Regression tests on Windows only for Scapy 2 3# More information at http://www.secdev.org/projects/UTscapy/ 4 5+ Configuration 6 7= Imports 8 9from unittest import mock 10 11############ 12############ 13+ Mechanics tests 14 15= Automaton - Test select_objects edge cases 16 17assert select_objects([ObjectPipe()], 0) == [] 18assert select_objects([ObjectPipe()], 1) == [] 19 20a = ObjectPipe() 21a.send("test") 22assert select_objects([a], 0) == [a] 23 24############ 25############ 26+ Windows arch unit tests 27 28= Test network_name 29 30iface = conf.iface 31 32assert network_name(iface.name) == iface.network_name 33assert network_name(iface.description) == iface.network_name 34assert network_name(iface.network_name) == iface.network_name 35 36= dev_from_networkname 37 38from scapy.config import conf 39 40assert dev_from_networkname(conf.iface.network_name).guid == conf.iface.guid 41 42= test pcap_service_status 43~ npcap_service 44 45from scapy.arch.windows import pcap_service_status 46 47status = pcap_service_status() 48assert status 49 50= test get_if_list 51 52from scapy.interfaces import get_if_list 53 54print(get_if_list()) 55assert all(x.startswith(r"\Device\NPF_") for x in get_if_list()) 56 57= test pcap_service_stop 58~ appveyor_only require_gui npcap_service 59 60from scapy.arch.windows import pcap_service_stop 61 62pcap_service_stop() 63assert pcap_service_status() == False 64 65= test pcap_service_start 66~ appveyor_only require_gui npcap_service 67 68from scapy.arch.windows import pcap_service_start 69 70pcap_service_start() 71assert pcap_service_status() == True 72 73= Test auto-pcap start UI 74 75@mock.patch("scapy.arch.windows.get_windows_if_list") 76def _test_autostart_ui(mocked_getiflist): 77 mocked_getiflist.side_effect = lambda: [] 78 conf.ifaces.reload() 79 assert all(x.index < 0 for x in conf.ifaces.data.values()) 80 81try: 82 old_ifaces = conf.ifaces.data.copy() 83 _test_autostart_ui() 84finally: 85 conf.ifaces.data = old_ifaces 86 87######### Native mode ########### 88 89+ Test Windows Native sockets 90 91= Set up native mode 92 93conf.use_pcap = False 94conf.route.resync() 95conf.ifaces.reload() 96assert conf.use_pcap == False 97 98= Ping 99~ netaccess needs_root 100 101def _test(): 102 with conf.L3socket() as a: 103 answer = a.sr1(IP(dst="1.1.1.1", ttl=128)/ICMP()/"abcdefghijklmnopqrstuvwabcdefghi", timeout=2) 104 answer.show() 105 assert ICMP in answer 106 107retry_test(_test) 108 109= DNS lookup 110~ netaccess needs_root 111 112def _test(): 113 answer = sr1(IP(dst="8.8.8.8")/UDP()/DNS(rd=1, qd=DNSQR(qname="www.google.com")), timeout=2) 114 answer.show() 115 assert DNS in answer 116 assert answer.qd.qname == b'www.google.com.' 117 118retry_test(_test) 119 120= Leave native mode 121 122conf.use_pcap = True 123conf.route.resync() 124conf.ifaces.reload() 125assert conf.use_pcap == True 126