• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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