lanscape 2.0.0a1__py3-none-any.whl → 2.0.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. lanscape/__init__.py +0 -1
  2. lanscape/__main__.py +0 -1
  3. lanscape/core/app_scope.py +0 -1
  4. lanscape/core/decorators.py +0 -1
  5. lanscape/core/device_alive.py +1 -2
  6. lanscape/core/errors.py +0 -1
  7. lanscape/core/ip_parser.py +1 -26
  8. lanscape/core/logger.py +0 -1
  9. lanscape/core/mac_lookup.py +0 -1
  10. lanscape/core/net_tools.py +0 -1
  11. lanscape/core/port_manager.py +0 -1
  12. lanscape/core/runtime_args.py +0 -1
  13. lanscape/core/scan_config.py +0 -1
  14. lanscape/core/service_scan.py +3 -21
  15. lanscape/core/subnet_scan.py +0 -1
  16. lanscape/core/version_manager.py +0 -1
  17. lanscape/core/web_browser.py +0 -1
  18. lanscape/resources/mac_addresses/convert_csv.py +0 -1
  19. lanscape/resources/ports/convert_csv.py +0 -1
  20. lanscape/resources/ports/test_port_list_scan.json +4 -0
  21. lanscape/ui/app.py +13 -2
  22. lanscape/ui/blueprints/__init__.py +0 -1
  23. lanscape/ui/blueprints/api/__init__.py +0 -1
  24. lanscape/ui/blueprints/api/port.py +0 -1
  25. lanscape/ui/blueprints/api/scan.py +0 -1
  26. lanscape/ui/blueprints/api/tools.py +0 -1
  27. lanscape/ui/blueprints/web/__init__.py +0 -1
  28. lanscape/ui/blueprints/web/routes.py +0 -1
  29. lanscape/ui/main.py +0 -1
  30. lanscape/ui/shutdown_handler.py +0 -1
  31. lanscape/ui/templates/scan/config.html +1 -1
  32. {lanscape-2.0.0a1.dist-info → lanscape-2.0.0b1.dist-info}/METADATA +5 -2
  33. {lanscape-2.0.0a1.dist-info → lanscape-2.0.0b1.dist-info}/RECORD +37 -36
  34. {lanscape-2.0.0a1.dist-info → lanscape-2.0.0b1.dist-info}/WHEEL +0 -0
  35. {lanscape-2.0.0a1.dist-info → lanscape-2.0.0b1.dist-info}/entry_points.txt +0 -0
  36. {lanscape-2.0.0a1.dist-info → lanscape-2.0.0b1.dist-info}/licenses/LICENSE +0 -0
  37. {lanscape-2.0.0a1.dist-info → lanscape-2.0.0b1.dist-info}/top_level.txt +0 -0
lanscape/__init__.py CHANGED
@@ -22,4 +22,3 @@ from lanscape.core.scan_config import (
22
22
  from lanscape.core.port_manager import PortManager
23
23
 
24
24
  from lanscape.core import net_tools
25
-
lanscape/__main__.py CHANGED
@@ -7,4 +7,3 @@ from lanscape.ui.main import main
7
7
 
8
8
  if __name__ == "__main__":
9
9
  main()
10
-
@@ -90,4 +90,3 @@ def is_local_run() -> bool:
90
90
  if any(parts):
91
91
  return False
92
92
  return True # Installed package
93
-
@@ -229,4 +229,3 @@ def timeout_enforcer(timeout: int, raise_on_timeout: bool = True):
229
229
  return None # Return None if not raising an exception
230
230
  return wrapper
231
231
  return decorator
232
-
@@ -156,7 +156,7 @@ class ArpLookup():
156
156
  NOTE: This lookup method requires elevated privileges to access the ARP cache.
157
157
 
158
158
 
159
- [Arp Lookup Requirements](/support/arp-issues.md)
159
+ [Arp Lookup Requirements](/docs/arp-issues.md)
160
160
  """
161
161
 
162
162
  @classmethod
@@ -227,4 +227,3 @@ class Poker():
227
227
  sock.close()
228
228
 
229
229
  do_poke()
230
-
lanscape/core/errors.py CHANGED
@@ -40,4 +40,3 @@ class DeviceError(Exception):
40
40
 
41
41
  def __str__(self):
42
42
  return f'Error(source={self.method}, msg={self.base})'
43
-
@@ -10,7 +10,6 @@ This module provides utilities for parsing various IP address formats including:
10
10
  It also includes validation to prevent processing excessively large IP ranges.
11
11
  """
12
12
  import ipaddress
13
- import re
14
13
 
15
14
  from lanscape.core.errors import SubnetTooLargeError
16
15
 
@@ -50,14 +49,10 @@ def parse_ip_input(ip_input):
50
49
  for ip in net.hosts():
51
50
  ip_ranges.append(ip)
52
51
 
53
- # Handle IP range (e.g., 10.0.0.15-10.0.0.25)
52
+ # Handle IP range (e.g., 10.0.0.15-10.0.0.25) and (e.g., 10.0.9.1-253)
54
53
  elif '-' in entry:
55
54
  ip_ranges += parse_ip_range(entry)
56
55
 
57
- # Handle shorthand IP range (e.g., 10.0.9.1-253)
58
- elif re.search(r'\d+\-\d+', entry):
59
- ip_ranges += parse_shorthand_ip_range(entry)
60
-
61
56
  # If no CIDR or range, assume a single IP
62
57
  else:
63
58
  ip_ranges.append(ipaddress.IPv4Address(entry))
@@ -106,25 +101,6 @@ def parse_ip_range(entry):
106
101
  return list(ip_range_to_list(start_ip, end_ip))
107
102
 
108
103
 
109
- def parse_shorthand_ip_range(entry):
110
- """
111
- Parse a shorthand IP range (e.g., 192.168.1.1-10).
112
-
113
- In this format, only the last octet of the end IP is specified.
114
-
115
- Args:
116
- entry (str): String containing a shorthand IP range
117
-
118
- Returns:
119
- list: List of IPv4Address objects in the range (inclusive)
120
- """
121
- start_ip, end_part = entry.split('-')
122
- start_ip = ipaddress.IPv4Address(start_ip.strip())
123
- end_ip = start_ip.exploded.rsplit('.', 1)[0] + '.' + end_part.strip()
124
-
125
- return list(ip_range_to_list(start_ip, ipaddress.IPv4Address(end_ip)))
126
-
127
-
128
104
  def ip_range_to_list(start_ip, end_ip):
129
105
  """
130
106
  Convert an IP range defined by start and end addresses to a list of addresses.
@@ -139,4 +115,3 @@ def ip_range_to_list(start_ip, end_ip):
139
115
  # Yield the range of IPs
140
116
  for ip_int in range(int(start_ip), int(end_ip) + 1):
141
117
  yield ipaddress.IPv4Address(ip_int)
142
-
lanscape/core/logger.py CHANGED
@@ -72,4 +72,3 @@ def disable_flask_logging() -> None:
72
72
  werkzeug_log.setLevel(logging.ERROR)
73
73
 
74
74
  override_click_logging()
75
-
@@ -105,4 +105,3 @@ def lookup_mac(mac: str) -> Optional[str]:
105
105
  def get_macs(ip: str) -> List[str]:
106
106
  """Backward compatibility function for MAC resolution."""
107
107
  return MacResolver().get_macs(ip)
108
-
@@ -566,4 +566,3 @@ def is_arp_supported():
566
566
  return True
567
567
  except (Scapy_Exception, PermissionError, RuntimeError):
568
568
  return False
569
-
@@ -148,4 +148,3 @@ class PortManager:
148
148
  return True
149
149
  except BaseException:
150
150
  return False
151
-
@@ -63,4 +63,3 @@ def parse_args() -> RuntimeArgs:
63
63
 
64
64
  # Return the dataclass instance with the dynamically assigned values
65
65
  return RuntimeArgs(**filtered_args)
66
-
@@ -395,4 +395,3 @@ DEFAULT_CONFIGS: Dict[str, ScanConfig] = {
395
395
  )
396
396
  )
397
397
  }
398
-
@@ -2,7 +2,6 @@
2
2
  """
3
3
 
4
4
  from typing import Optional, Union
5
- import sys
6
5
  import asyncio
7
6
  import logging
8
7
  import traceback
@@ -10,6 +9,9 @@ import traceback
10
9
  from lanscape.core.app_scope import ResourceManager
11
10
  from lanscape.core.scan_config import ServiceScanConfig, ServiceScanStrategy
12
11
 
12
+ # asyncio complains more than it needs to
13
+ logging.getLogger("asyncio").setLevel(logging.WARNING)
14
+
13
15
  log = logging.getLogger('ServiceScan')
14
16
  SERVICES = ResourceManager('services').get_jsonc('definitions.jsonc')
15
17
 
@@ -183,23 +185,3 @@ def scan_service(ip: str, port: int, cfg: ServiceScanConfig) -> str:
183
185
 
184
186
  # Use asyncio.run to execute the asynchronous logic synchronously
185
187
  return asyncio.run(_async_scan_service(ip, port, cfg=cfg))
186
-
187
-
188
- def asyncio_logger_suppression():
189
- """Suppress the noisy asyncio transport errors since they are expected in service scanning."""
190
-
191
- # Reduce noisy asyncio transport errors on Windows by switching to Selector policy
192
- if sys.platform.startswith("win"):
193
- try:
194
- asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
195
- except Exception:
196
- pass
197
- # Also tone down asyncio logger noise from transport callbacks
198
- try:
199
- logging.getLogger("asyncio").setLevel(logging.WARNING)
200
- except Exception:
201
- pass
202
-
203
-
204
- asyncio_logger_suppression()
205
-
@@ -428,4 +428,3 @@ class ScanManager:
428
428
  t = threading.Thread(target=scan.start)
429
429
  t.start()
430
430
  return t
431
-
@@ -95,4 +95,3 @@ def get_installed_version(package=PACKAGE):
95
95
  log.debug(traceback.format_exc())
96
96
  log.warning(f'Cannot find {package} installation')
97
97
  return LOCAL_VERSION
98
-
@@ -208,4 +208,3 @@ def windows_get_browser_from_registry() -> Optional[str]:
208
208
  system_browser = get_system_default_browser()
209
209
  if system_browser:
210
210
  return extract_executable(system_browser)
211
-
@@ -39,4 +39,3 @@ def csv_to_dict(data):
39
39
 
40
40
 
41
41
  main()
42
-
@@ -38,4 +38,3 @@ def csv_to_dict(data):
38
38
 
39
39
 
40
40
  main()
41
-
@@ -0,0 +1,4 @@
1
+ {
2
+ "443": "https",
3
+ "80": "http"
4
+ }
lanscape/ui/app.py CHANGED
@@ -51,6 +51,18 @@ app.jinja_env.filters['is_substring_in_values'] = is_substring_in_values
51
51
  ################################
52
52
 
53
53
 
54
+ def get_runtime_args_safe():
55
+ """
56
+ Safely get runtime args, returning empty dict if parsing fails.
57
+ This prevents conflicts when the module is imported during testing.
58
+ """
59
+ try:
60
+ return vars(parse_args())
61
+ except SystemExit:
62
+ # This happens when pytest tries to import the module
63
+ return {}
64
+
65
+
54
66
  def set_global_safe(key: str, value):
55
67
  """ Safely set global vars without worrying about an exception """
56
68
  app_globals = app.jinja_env.globals
@@ -73,7 +85,7 @@ def set_global_safe(key: str, value):
73
85
  set_global_safe('app_version', get_installed_version)
74
86
  set_global_safe('update_available', is_update_available)
75
87
  set_global_safe('latest_version', lookup_latest_version)
76
- set_global_safe('runtime_args', vars(parse_args()))
88
+ set_global_safe('runtime_args', get_runtime_args_safe)
77
89
  set_global_safe('is_local', is_local_run)
78
90
  set_global_safe('is_arp_supported', is_arp_supported)
79
91
 
@@ -122,4 +134,3 @@ def start_webserver(args: RuntimeArgs) -> int:
122
134
  'use_reloader': args.reloader
123
135
  }
124
136
  app.run(**run_args)
125
-
@@ -8,4 +8,3 @@ from lanscape.core.subnet_scan import ScanManager
8
8
  scan_manager = ScanManager()
9
9
 
10
10
  log = logging.getLogger('Blueprints')
11
-
@@ -3,4 +3,3 @@
3
3
  from flask import Blueprint
4
4
 
5
5
  api_bp = Blueprint('api', __name__)
6
-
@@ -77,4 +77,3 @@ def delete_port_list(port_list):
77
77
  JSON response indicating success or failure
78
78
  """
79
79
  return jsonify(PortManager().delete_port_list(port_list))
80
-
@@ -121,4 +121,3 @@ def get_scan_config():
121
121
  """
122
122
  data = request.get_json()
123
123
  return ScanConfig.from_dict(data)
124
-
@@ -69,4 +69,3 @@ def get_default_configs():
69
69
  configs[key] = config_dict
70
70
 
71
71
  return jsonify(configs)
72
-
@@ -5,4 +5,3 @@ Blueprint for web-related routes and views.
5
5
  from flask import Blueprint
6
6
 
7
7
  web_bp = Blueprint('web', __name__)
8
-
@@ -150,4 +150,3 @@ def app_info():
150
150
  Rendered info template
151
151
  """
152
152
  return render_template('info.html')
153
-
lanscape/ui/main.py CHANGED
@@ -136,4 +136,3 @@ def terminate():
136
136
 
137
137
  if __name__ == "__main__":
138
138
  main()
139
-
@@ -55,4 +55,3 @@ class FlaskShutdownHandler:
55
55
  """Exits the application if a shutdown request has been made."""
56
56
  if self._exiting:
57
57
  os._exit(0)
58
-
@@ -56,7 +56,7 @@
56
56
  data-bs-toggle="tooltip"
57
57
  data-bs-placement="top"
58
58
  title="ARP lookup is not supported on this system, click for more info"
59
- onclick="window.open('https://github.com/mdennis281/LANscape/blob/main/support/arp-issues.md', '_blank')"
59
+ onclick="window.open('https://github.com/mdennis281/LANscape/blob/main/docs/arp-issues.md', '_blank')"
60
60
  >
61
61
  help
62
62
  </span>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lanscape
3
- Version: 2.0.0a1
3
+ Version: 2.0.0b1
4
4
  Summary: A python based local network scanner
5
5
  Author-email: Michael Dennis <michael@dipduo.com>
6
6
  License-Expression: MIT
@@ -25,6 +25,9 @@ Requires-Dist: scapy<3.0,>=2.3.2
25
25
  Requires-Dist: tabulate==0.9.0
26
26
  Requires-Dist: pydantic
27
27
  Requires-Dist: icmplib
28
+ Provides-Extra: dev
29
+ Requires-Dist: pytest>=8.0; extra == "dev"
30
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
28
31
  Dynamic: license-file
29
32
 
30
33
  # LANscape
@@ -85,7 +88,7 @@ I use a combination of ARP, ICMP & port testing to determine if a device is onli
85
88
  Recommendations:
86
89
 
87
90
  - Adjust scan configuration
88
- - Configure ARP lookup [ARP lookup setup](./support/arp-issues.md)
91
+ - Configure ARP lookup [ARP lookup setup](./docs/arp-issues.md)
89
92
  - Create a bug
90
93
 
91
94
 
@@ -1,40 +1,41 @@
1
- lanscape/__init__.py,sha256=XFRrhe1uiIw7WpYvnx-5wbBKR9P_wjWl5gNHrUtZP4w,424
2
- lanscape/__main__.py,sha256=yJpYmbQpYmXgtya-cSZmgNKVSYnyT1lO463R6k-5IPw,171
1
+ lanscape/__init__.py,sha256=ibc4hZ6Esm7fsqocLRpc2v30BVWrKpFQ-iMJisoDtL8,423
2
+ lanscape/__main__.py,sha256=PuY42yuCLAwHrOREJ6u2DgVyGX5hZKRQeoE9pajkNfM,170
3
3
  lanscape/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- lanscape/core/app_scope.py,sha256=kiKDWjkIf8SYluTmPm5JYEWa4t47ax0XRFoR3kKNM_o,3299
5
- lanscape/core/decorators.py,sha256=3sNGj-pKqYlY_yAlFNLuAXACwqdPGPdbsLEinNkUTVc,7265
6
- lanscape/core/device_alive.py,sha256=o5MdqkrbA9UjJ4xMd0yNI_p7C5PrR6xdhrellF9azNQ,6837
7
- lanscape/core/errors.py,sha256=TnifbydUzT2i_aMz9iU_A7vwdWmbYbOclgJDdHwnj-I,1323
8
- lanscape/core/ip_parser.py,sha256=U7BqZWKpsmD43WUuephqkxIlMW4EdziRZ-WUdh3zEJA,4197
9
- lanscape/core/logger.py,sha256=pdaCJ41pEMzA9PImFY0eJ_uRaMDRv0Eb87Wr9_5dN0A,2535
10
- lanscape/core/mac_lookup.py,sha256=1y-WQ9CLvHTItu9kJrFja6iClLZ_ABYGRi_mFF1PQFY,3520
11
- lanscape/core/net_tools.py,sha256=3dzo0OWMBX7eg3S_iAxUpixXy72kn0eNIbR9Phi8Sto,19677
12
- lanscape/core/port_manager.py,sha256=dbeQEhVqKmI7CYPEgW1UFcCa7HxkyJwy8ms9Jajk-ss,4480
13
- lanscape/core/runtime_args.py,sha256=BASAsIZgZwMi3GHO_oY3oeehVrywVAXUip-Bi51Ocjo,2544
14
- lanscape/core/scan_config.py,sha256=lG093Gn-j6NIK9JVn7JPMxkkX-9P6fFWP_ghec6-dB0,11115
15
- lanscape/core/service_scan.py,sha256=m3cI9cYUsP5s3rDYtpp7k2ZiqXddF3Akd_4zlgZVyrg,6949
16
- lanscape/core/subnet_scan.py,sha256=2HHQH2RVdHdAOwnppKrGr0JHvgNSXTAt-Rheo7-KV1s,14445
17
- lanscape/core/version_manager.py,sha256=dd7B89L--Zi-0-aqSngM1co6Le7SVePzUJ3GKN3-Ud0,2842
18
- lanscape/core/web_browser.py,sha256=Uv8isfQk7iTiH5YtBd-aDO9kYQdBhnapA0hM0xM-NKo,6737
19
- lanscape/resources/mac_addresses/convert_csv.py,sha256=NE2WLgFL4Rw-8zm2YGJ1ZnK19MUR9xwVv3Yg4vNcOVA,1190
4
+ lanscape/core/app_scope.py,sha256=qfzX8Ed4bFdxHMGjgnLlWuLZDTCBKObermz91KbGVn0,3298
5
+ lanscape/core/decorators.py,sha256=CZbPEfnLS1OF-uejQweetadzqf0pVo736jKko4Xs-g4,7264
6
+ lanscape/core/device_alive.py,sha256=TC6c5uR-2xwT8IXcRA3NAPJ9iPhdVx9a42bGSKq9N6w,6833
7
+ lanscape/core/errors.py,sha256=QTf42UzR9Zxj1t1mdwfLvZIp0c9a5EItELOdCR7kTmE,1322
8
+ lanscape/core/ip_parser.py,sha256=kn5H4ERitLnreRAqifWphwbxdjItGqwu50lsMCPDMcA,3474
9
+ lanscape/core/logger.py,sha256=nzo6J8UdlMdhRkOJEDOIHKztoE3Du8PQZad7ixvNgeM,2534
10
+ lanscape/core/mac_lookup.py,sha256=PxBSMe3wEVDtivCsh5NclSAguZz9rqdAS7QshBiuWvM,3519
11
+ lanscape/core/net_tools.py,sha256=W-yyQ05k6BJc8VOnOi9_hpVD2G8i5HuQ_A39O8qk30Y,19676
12
+ lanscape/core/port_manager.py,sha256=3_ROOb6JEiB0NByZVtADuGcldFkgZwn1RKtvwgs9AIk,4479
13
+ lanscape/core/runtime_args.py,sha256=2vIqRrcWr-NHRSBlZGrxh1PdkPY0ytkPguu8KZqy2L8,2543
14
+ lanscape/core/scan_config.py,sha256=A2ZKXqXKW9nrP6yLb7b9b3XqSY_cQB3LZ5K0LVCSebE,11114
15
+ lanscape/core/service_scan.py,sha256=wTDxOdazOsbI0hwCBR__4UCmB2RIbl2pw3F2YUW9aaE,6428
16
+ lanscape/core/subnet_scan.py,sha256=IegcrpzevL2zMf1fuvCqegUGCBXtO3iAI49aCweXmvw,14444
17
+ lanscape/core/version_manager.py,sha256=eGjyKgsv31QO0W26se9pPQ1TwmEN8qn37dHULtoocqc,2841
18
+ lanscape/core/web_browser.py,sha256=23MuGIrBYdGhw6ejj6OWxwReeKIlWhtWukc1dKV_3_0,6736
19
+ lanscape/resources/mac_addresses/convert_csv.py,sha256=hvlyLs0XmuuhBuvXBNRGP1cKJzYVRSf8VfUJ1VqROms,1189
20
20
  lanscape/resources/mac_addresses/mac_db.json,sha256=Lng2yJerwO7vjefzxzgtE203hry1lIsCadHL1A5Rptg,2136137
21
- lanscape/resources/ports/convert_csv.py,sha256=JG4kFZ_suoKL8WlkpGlkG0QEbNTEN9J0oBTsdxXB7hQ,1144
21
+ lanscape/resources/ports/convert_csv.py,sha256=MMLDa-5pGMsn4A2_k45jHsRYffrRY_0Z2D1ziiikeQA,1143
22
22
  lanscape/resources/ports/full.json,sha256=O8XBW52QvEVSGMQDbXe4-c4qq6XAecw6KJW4m2HkTLo,1441444
23
23
  lanscape/resources/ports/large.json,sha256=CzlCcIGCBW1QAgjz4NDerCYA8HcYf6lNxehh7F928y0,138410
24
24
  lanscape/resources/ports/medium.json,sha256=T5Rc7wa47MtroHxuZrHSftOqRWbQzhZULJdE1vpsTvU,3518
25
25
  lanscape/resources/ports/small.json,sha256=F_lo_5xHwHBfOVfVgxP7ejblR3R62SNtC1Mm33brhYc,376
26
+ lanscape/resources/ports/test_port_list_scan.json,sha256=qXuWGQ_sGIRCVrhJxMeWcHKYdjaMv8O6OVWutiqCwVo,36
26
27
  lanscape/resources/services/definitions.jsonc,sha256=M9BDeK-mh25sEVj8xDEYbU2ix7EETVWhbiYmMb14Gjg,20905
27
28
  lanscape/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- lanscape/ui/app.py,sha256=aAS21f8361oAcGKwvD1W5oLbTk7f9_H5EJEANBnvAHQ,3741
29
- lanscape/ui/main.py,sha256=teeiGumDG--zU4fBF9nen9q65vhSl7CvIxzkibwSt1c,4177
30
- lanscape/ui/shutdown_handler.py,sha256=4B5gEaRBucYZZvVKSF8Unq1hQhJDC2W3_W5JK7wyMUE,1706
31
- lanscape/ui/blueprints/__init__.py,sha256=rEtm7ZT_K5Hd9UYFvsjP-cqmA01RBhKybjMhhUNVwCY,266
32
- lanscape/ui/blueprints/api/__init__.py,sha256=9G0qtzcSmV2qjLNx4nedsUGU7rKkEGSuFAIbRIWWSyI,104
33
- lanscape/ui/blueprints/api/port.py,sha256=2QLq03HOMz9y_7q41rah8kOOXF0oKCOczoUfJ3j-QFI,1977
34
- lanscape/ui/blueprints/api/scan.py,sha256=_kg9qtshoUHTU8b9a2gzEfNWQsx8uixLNE3PO_o8uRA,3327
35
- lanscape/ui/blueprints/api/tools.py,sha256=wrn3OG-SyUhgiHHovovwbhKIPI7db1iYOIXKnGx5DMY,2433
36
- lanscape/ui/blueprints/web/__init__.py,sha256=_83Mu7yUAME-lEsK82U_WNEMyfZwQGc9M1LPSDOO4so,119
37
- lanscape/ui/blueprints/web/routes.py,sha256=WmKFPgslMXoxfy9C6NQqKNvc6Lf1pWSOLbnYL2WqzaI,4535
29
+ lanscape/ui/app.py,sha256=rg4UGHgbVHpU2jdabSwBoSqGna7WGOunPkPc5Tvds9w,4076
30
+ lanscape/ui/main.py,sha256=UCrhHnyFBqVmHTMus33CTp3vdNn3miT1xXJatR4N7ho,4176
31
+ lanscape/ui/shutdown_handler.py,sha256=He2aYlcfHvQjpJuKbdbjmUd2RkJeCrcSSHX9HFMbBOg,1705
32
+ lanscape/ui/blueprints/__init__.py,sha256=EjPtaR5Nh17pGiOVYTJULVNaZntpFZOiYyep8rBWAiE,265
33
+ lanscape/ui/blueprints/api/__init__.py,sha256=5Z4Y7B36O-bNFenpomfuNhPuJ9dW_MC0TPUU3pCFVfA,103
34
+ lanscape/ui/blueprints/api/port.py,sha256=KlfLrAmlTqN44I1jLVDy-mWOcor4kL-b0Cl4AcTMCys,1976
35
+ lanscape/ui/blueprints/api/scan.py,sha256=2rsW4xkI4X2Q2ocwaE469aU1VxQ3xHuBRjD9xE36WdI,3326
36
+ lanscape/ui/blueprints/api/tools.py,sha256=jr9gt0VhvBFgJ61MLgNIM6hin-MUmJLGdmStPx3e3Yc,2432
37
+ lanscape/ui/blueprints/web/__init__.py,sha256=NvgnjP0X4LwqVhSEyh5RUzoG45N44kHK1MEFlfvBxTg,118
38
+ lanscape/ui/blueprints/web/routes.py,sha256=f5TzfTzelJ_erslyBXTOpFr4BlIfB1Mb1ye6ioH7IL0,4534
38
39
  lanscape/ui/static/lanscape.webmanifest,sha256=07CqA-PQsO35KJD8R96sI3Pxix6UuBjijPDCuy9vM3s,446
39
40
  lanscape/ui/static/css/style.css,sha256=qXDshNhj77__06AuL-RhsxlrqZ5S0JFAmy3M1sk1Sm8,21098
40
41
  lanscape/ui/static/img/ico/android-chrome-192x192.png,sha256=JmFT6KBCCuoyxMV-mLNtF9_QJbVBvfWPUizKN700fi8,18255
@@ -61,16 +62,16 @@ lanscape/ui/templates/scan.html,sha256=00QX2_1S_1wGzk42r00LjEkJvoioCLs6JgjOibi6r
61
62
  lanscape/ui/templates/shutdown.html,sha256=iXVCq2yl5TjZfNFl4esbDJra3gJA2VQpae0jj4ipy9w,701
62
63
  lanscape/ui/templates/core/head.html,sha256=eZiebt24xYd_NALe-fFL25rb4uFjUrF4XJjxFH61MgM,779
63
64
  lanscape/ui/templates/core/scripts.html,sha256=rSRi4Ut8iejajMPhOc5bzEz-Z3EHxpj_3PxwwyyhmTQ,640
64
- lanscape/ui/templates/scan/config.html,sha256=ec7EptfdgssKhHDSp_c06xYq7Deyhdu6a5XadLHw58I,14607
65
+ lanscape/ui/templates/scan/config.html,sha256=nmk7Vn-9sXrTDJxSSR7JbCUJEVVadXSMji7LJv2tzKQ,14604
65
66
  lanscape/ui/templates/scan/device-detail.html,sha256=Yo4t4S5tkOboMQ3b0y-dHlTJIp6_Zb--9iopyQjNMSc,4825
66
67
  lanscape/ui/templates/scan/export.html,sha256=Nvs_unojzT3qhN_ZnEgYHou2C9wqWGr3dVr2UiLnYjY,749
67
68
  lanscape/ui/templates/scan/ip-table-row.html,sha256=nO5ZMhl3Gnlc8lg5nWmE05_6_5oz9ZfVCDUOgegVGpg,1267
68
69
  lanscape/ui/templates/scan/ip-table.html,sha256=AT2ZvCPYdKl-XJiAkEAawPOVuQw-w0MXumGQTr3zyKM,926
69
70
  lanscape/ui/templates/scan/overview.html,sha256=xWj9jWDPg2KcPLvS8fnSins23_UXjKCdb2NJwNG2U2Q,1176
70
71
  lanscape/ui/templates/scan/scan-error.html,sha256=wmAYQ13IJHUoO8fAGNDjMvNml7tu4rsIU3Vav71ETlA,999
71
- lanscape-2.0.0a1.dist-info/licenses/LICENSE,sha256=VLoE0IrNTIc09dFm7hMN0qzk4T3q8V0NaPcFQqMemDs,1070
72
- lanscape-2.0.0a1.dist-info/METADATA,sha256=cV6SLhKrEqhVDFUHUalq11D09qVtp6fa7NkGi7ieJgw,3379
73
- lanscape-2.0.0a1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
74
- lanscape-2.0.0a1.dist-info/entry_points.txt,sha256=evxSxUikFa1OEd4e0Boky9sLH87HdgM0YqB_AbB2HYc,51
75
- lanscape-2.0.0a1.dist-info/top_level.txt,sha256=E9D4sjPz_6H7c85Ycy_pOS2xuv1Wm-ilKhxEprln2ps,9
76
- lanscape-2.0.0a1.dist-info/RECORD,,
72
+ lanscape-2.0.0b1.dist-info/licenses/LICENSE,sha256=VLoE0IrNTIc09dFm7hMN0qzk4T3q8V0NaPcFQqMemDs,1070
73
+ lanscape-2.0.0b1.dist-info/METADATA,sha256=WQgbUlFS285vkOJSMRHbh_SoHlwEMCr9i_DlDGxb5SE,3486
74
+ lanscape-2.0.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
+ lanscape-2.0.0b1.dist-info/entry_points.txt,sha256=evxSxUikFa1OEd4e0Boky9sLH87HdgM0YqB_AbB2HYc,51
76
+ lanscape-2.0.0b1.dist-info/top_level.txt,sha256=E9D4sjPz_6H7c85Ycy_pOS2xuv1Wm-ilKhxEprln2ps,9
77
+ lanscape-2.0.0b1.dist-info/RECORD,,