lanscape 1.3.8a1__py3-none-any.whl → 2.4.0a2__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.

Potentially problematic release.


This version of lanscape might be problematic. Click here for more details.

Files changed (58) hide show
  1. lanscape/__init__.py +8 -4
  2. lanscape/{libraries → core}/app_scope.py +21 -3
  3. lanscape/core/decorators.py +231 -0
  4. lanscape/{libraries → core}/device_alive.py +83 -16
  5. lanscape/{libraries → core}/ip_parser.py +2 -26
  6. lanscape/{libraries → core}/net_tools.py +209 -66
  7. lanscape/{libraries → core}/runtime_args.py +6 -0
  8. lanscape/{libraries → core}/scan_config.py +103 -5
  9. lanscape/core/service_scan.py +222 -0
  10. lanscape/{libraries → core}/subnet_scan.py +30 -14
  11. lanscape/{libraries → core}/version_manager.py +15 -17
  12. lanscape/resources/ports/test_port_list_scan.json +4 -0
  13. lanscape/resources/services/definitions.jsonc +576 -400
  14. lanscape/ui/app.py +17 -5
  15. lanscape/ui/blueprints/__init__.py +1 -1
  16. lanscape/ui/blueprints/api/port.py +15 -1
  17. lanscape/ui/blueprints/api/scan.py +1 -1
  18. lanscape/ui/blueprints/api/tools.py +4 -4
  19. lanscape/ui/blueprints/web/routes.py +29 -2
  20. lanscape/ui/main.py +46 -19
  21. lanscape/ui/shutdown_handler.py +2 -2
  22. lanscape/ui/static/css/style.css +186 -20
  23. lanscape/ui/static/js/core.js +14 -0
  24. lanscape/ui/static/js/main.js +30 -2
  25. lanscape/ui/static/js/quietReload.js +3 -0
  26. lanscape/ui/static/js/scan-config.js +56 -6
  27. lanscape/ui/templates/base.html +6 -8
  28. lanscape/ui/templates/core/head.html +1 -1
  29. lanscape/ui/templates/info.html +20 -5
  30. lanscape/ui/templates/main.html +33 -36
  31. lanscape/ui/templates/scan/config.html +214 -176
  32. lanscape/ui/templates/scan/device-detail.html +111 -0
  33. lanscape/ui/templates/scan/ip-table-row.html +17 -83
  34. lanscape/ui/templates/scan/ip-table.html +5 -5
  35. lanscape/ui/ws/__init__.py +31 -0
  36. lanscape/ui/ws/delta.py +170 -0
  37. lanscape/ui/ws/handlers/__init__.py +20 -0
  38. lanscape/ui/ws/handlers/base.py +145 -0
  39. lanscape/ui/ws/handlers/port.py +184 -0
  40. lanscape/ui/ws/handlers/scan.py +352 -0
  41. lanscape/ui/ws/handlers/tools.py +145 -0
  42. lanscape/ui/ws/protocol.py +86 -0
  43. lanscape/ui/ws/server.py +375 -0
  44. {lanscape-1.3.8a1.dist-info → lanscape-2.4.0a2.dist-info}/METADATA +18 -3
  45. lanscape-2.4.0a2.dist-info/RECORD +85 -0
  46. {lanscape-1.3.8a1.dist-info → lanscape-2.4.0a2.dist-info}/WHEEL +1 -1
  47. lanscape-2.4.0a2.dist-info/entry_points.txt +2 -0
  48. lanscape/libraries/decorators.py +0 -170
  49. lanscape/libraries/service_scan.py +0 -50
  50. lanscape/libraries/web_browser.py +0 -210
  51. lanscape-1.3.8a1.dist-info/RECORD +0 -74
  52. /lanscape/{libraries → core}/__init__.py +0 -0
  53. /lanscape/{libraries → core}/errors.py +0 -0
  54. /lanscape/{libraries → core}/logger.py +0 -0
  55. /lanscape/{libraries → core}/mac_lookup.py +0 -0
  56. /lanscape/{libraries → core}/port_manager.py +0 -0
  57. {lanscape-1.3.8a1.dist-info → lanscape-2.4.0a2.dist-info}/licenses/LICENSE +0 -0
  58. {lanscape-1.3.8a1.dist-info → lanscape-2.4.0a2.dist-info}/top_level.txt +0 -0
@@ -1,456 +1,632 @@
1
1
  {
2
2
  // ----------------------- Web Services -----------------------
3
- "HTTP": [
4
- "HTTP",
5
- "Apache",
6
- "Nginx",
7
- "IIS",
8
- "lighttpd",
9
- "Caddy",
10
- "OpenResty",
11
- "GWS", // Google Web Server
12
- "LiteSpeed",
13
- "Gunicorn", // Often in X-Powered-By
14
- "OpenLiteSpeed",
15
- "Cloudflare"
16
- ],
17
- "HTTPS": [
18
- "HTTPS",
19
- "SSL",
20
- "TLS"
21
- // Possibly you'd see "443" in a banner or SNI reference,
22
- // but typically "SSL" or "TLS" coverage is sufficient
23
- ],
3
+ "HTTP": {
4
+ "hints": [
5
+ "HTTP",
6
+ "Apache",
7
+ "Nginx",
8
+ "IIS",
9
+ "lighttpd",
10
+ "Caddy",
11
+ "OpenResty",
12
+ "GWS",
13
+ "LiteSpeed",
14
+ "Gunicorn",
15
+ "OpenLiteSpeed",
16
+ "Cloudflare"
17
+ ],
18
+ "ports": [80, 8080, 8000, 8888],
19
+ "scheme": "http",
20
+ "label": "HTTP",
21
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
22
+ },
23
+ "HTTPS": {
24
+ "hints": ["HTTPS", "SSL", "TLS"],
25
+ "ports": [443, 8443],
26
+ "scheme": "https",
27
+ "label": "HTTPS",
28
+ "probe": "TLS ClientHello"
29
+ },
24
30
 
25
31
  // ------------------ Remote Shell / Admin --------------------
26
- "SSH": [
27
- "SSH",
28
- "OpenSSH",
29
- "Dropbear",
30
- "libssh"
31
- ],
32
- "Telnet": [
33
- "Telnet",
34
- "BusyBox on telnetd"
35
- ],
32
+ "SSH": {
33
+ "hints": ["SSH", "OpenSSH", "Dropbear", "libssh"],
34
+ "ports": [22],
35
+ "scheme": "ssh",
36
+ "label": "SSH",
37
+ "probe": ""
38
+ },
39
+ "Telnet": {
40
+ "hints": ["Telnet", "BusyBox on telnetd"],
41
+ "ports": [23],
42
+ "scheme": "telnet",
43
+ "label": "Telnet",
44
+ "probe": "\r\n"
45
+ },
36
46
 
37
47
  // ------------------ File Transfer Protocols -----------------
38
- "FTP": [
39
- "FTP",
40
- "FileZilla",
41
- "ProFTPD",
42
- "vsftpd",
43
- "Pure-FTPd",
44
- "WS_FTP",
45
- "Microsoft ftpd"
46
- ],
47
- "SFTP": [
48
- "SFTP"
49
- // SFTP typically is an SSH subsystem, so you'd often see an SSH banner anyway
50
- ],
51
- "TFTP": [
52
- "TFTP"
53
- ],
48
+ "FTP": {
49
+ "hints": ["FTP", "FileZilla", "ProFTPD", "vsftpd", "Pure-FTPd", "WS_FTP", "Microsoft ftpd"],
50
+ "ports": [21],
51
+ "scheme": "ftp",
52
+ "label": "FTP",
53
+ "probe": ""
54
+ },
55
+ "SFTP": {
56
+ "hints": ["SFTP"],
57
+ "ports": [22],
58
+ "scheme": "sftp",
59
+ "label": "SFTP",
60
+ "probe": ""
61
+ },
62
+ "TFTP": {
63
+ "hints": ["TFTP"],
64
+ "ports": [69],
65
+ "scheme": "tftp",
66
+ "label": "TFTP",
67
+ "probe": "RRQ (UDP)"
68
+ },
54
69
 
55
70
  // -------------------- Email / Messaging ----------------------
56
- "SMTP": [
57
- "SMTP",
58
- "Postfix",
59
- "Exim",
60
- "Sendmail",
61
- "Qmail",
62
- "Exchange"
63
- ],
64
- "SMTPS": [
65
- "SMTPS",
66
- "465 secure",
67
- "587 secure"
68
- // Some servers might mention "TLS wrapper" or similar
69
- ],
70
- "POP3": [
71
- "POP3",
72
- "Dovecot",
73
- "Courier",
74
- "POP3 (Internet Mail)"
75
- ],
76
- "POP3S": [
77
- "POP3S",
78
- "SSL POP3",
79
- "Dovecot",
80
- "Courier"
81
- ],
82
- "IMAP": [
83
- "IMAP",
84
- "Dovecot",
85
- "Courier",
86
- "Cyrus",
87
- "IMAP4"
88
- ],
89
- "IMAPS": [
90
- "IMAPS",
91
- "SSL IMAP",
92
- "Dovecot",
93
- "Courier",
94
- "Cyrus"
95
- ],
71
+ "SMTP": { "hints": ["SMTP", "Postfix", "Exim", "Sendmail", "Qmail", "Exchange"], "ports": [25], "label": "SMTP", "probe": "EHLO scanner\r\n" },
72
+ "SMTPS": { "hints": ["SMTPS", "465 secure", "587 secure"], "ports": [465, 587], "label": "SMTPS", "probe": "TLS ClientHello" },
73
+ "POP3": { "hints": ["POP3", "Dovecot", "Courier", "POP3 (Internet Mail)"], "ports": [110], "label": "POP3", "probe": "" },
74
+ "POP3S": { "hints": ["POP3S", "SSL POP3", "Dovecot", "Courier"], "ports": [995], "label": "POP3S", "probe": "TLS ClientHello" },
75
+ "IMAP": { "hints": ["IMAP", "Dovecot", "Courier", "Cyrus", "IMAP4"], "ports": [143], "label": "IMAP", "probe": "" },
76
+ "IMAPS": { "hints": ["IMAPS", "SSL IMAP", "Dovecot", "Courier", "Cyrus"], "ports": [993], "label": "IMAPS", "probe": "TLS ClientHello" },
96
77
 
97
78
  // ---------------- Domain / Directory Services ---------------
98
- "DNS": [
99
- "DNS",
100
- "Bind",
101
- "DNSMasq",
102
- "PowerDNS",
103
- "Unbound",
104
- "Microsoft DNS",
105
- "Knot DNS"
106
- ],
107
- "LDAP": [
108
- "LDAP"
109
- ],
110
- "Active Directory": [
111
- "Active Directory",
112
- "Kerberos",
113
- "MSAD",
114
- "LDAP for AD",
115
- "LDAP Service (AD)"
116
- ],
79
+ "DNS": { "hints": ["DNS", "Bind", "DNSMasq", "PowerDNS", "Unbound", "Microsoft DNS", "Knot DNS"], "ports": [53], "label": "DNS", "probe": "A? example.com (UDP)" },
80
+ "LDAP": { "hints": ["LDAP"], "ports": [389], "label": "LDAP", "probe": "RootDSE search" },
81
+ "Active Directory": { "hints": ["Active Directory", "Kerberos", "MSAD", "LDAP for AD", "LDAP Service (AD)"], "ports": [88, 389, 636], "label": "Active Directory", "probe": "RootDSE search" },
117
82
 
118
83
  // -------------------- Database Services ----------------------
119
- "MySQL": [
120
- "MySQL",
121
- "MariaDB",
122
- "Percona"
123
- ],
124
- "PostgreSQL": [
125
- "PostgreSQL",
126
- "Postgres"
127
- ],
128
- "Microsoft SQL Server": [
129
- "MSSQL",
130
- "Microsoft SQL Server",
131
- "TDS",
132
- "SQL Server",
133
- "MS-SQL"
134
- ],
135
- "Oracle Database": [
136
- "Oracle",
137
- "TNS",
138
- "Oracle Net"
139
- ],
140
- "MongoDB": [
141
- "MongoDB"
142
- ],
143
- "Redis": [
144
- "Redis"
145
- ],
146
- "Cassandra": [
147
- "Cassandra"
148
- ],
149
- "Memcached": [
150
- "Memcached"
151
- ],
84
+ "MySQL": { "hints": ["MySQL", "MariaDB", "Percona"], "ports": [3306], "scheme": "mysql", "label": "MySQL", "probe": "" },
85
+ "PostgreSQL": { "hints": ["PostgreSQL", "Postgres"], "ports": [5432], "scheme": "postgresql", "label": "PostgreSQL", "probe": "SSLRequest" },
86
+ "MSSQL": { "hints": ["MSSQL", "Microsoft SQL Server", "TDS", "SQL Server", "MS-SQL"], "ports": [1433], "scheme": "mssql", "label": "MSSQL", "probe": "TDS Prelogin" },
87
+ "Oracle": { "hints": ["Oracle", "TNS", "Oracle Net"], "ports": [1521], "scheme": "oracle", "label": "Oracle", "probe": "TNS Connect" },
88
+ "MongoDB": { "hints": ["MongoDB"], "ports": [27017], "scheme": "mongodb", "label": "MongoDB", "probe": "hello/isMaster" },
89
+ "Redis": { "hints": ["Redis"], "ports": [6379], "scheme": "redis", "label": "Redis", "probe": "*1\r\n$4\r\nPING\r\n" },
90
+ "Cassandra": { "hints": ["Cassandra"], "ports": [9042], "label": "Cassandra", "probe": "OPTIONS" },
91
+ "Memcached": { "hints": ["Memcached"], "ports": [11211], "scheme": "memcached", "label": "Memcached", "probe": "stats\r\n" },
152
92
 
153
93
  // ----------------- Caching / Indexing / Logging -------------
154
- "Elasticsearch": [
155
- "Elasticsearch"
156
- ],
157
- "Logstash": [
158
- "Logstash"
159
- ],
94
+ "Elasticsearch": {
95
+ "hints": ["Elasticsearch"],
96
+ "ports": [9200, 9300],
97
+ "scheme": "http",
98
+ "label": "Elasticsearch",
99
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
100
+ },
101
+ "Logstash": {
102
+ "hints": ["Logstash"],
103
+ "ports": [5044],
104
+ "scheme": "http",
105
+ "label": "Logstash",
106
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
107
+ },
160
108
 
161
109
  // --------------- Message Brokers & Streaming ----------------
162
- "Kafka": [
163
- "Kafka"
164
- ],
165
- "RabbitMQ": [
166
- "RabbitMQ",
167
- "AMQP"
168
- ],
169
- "ActiveMQ": [
170
- "ActiveMQ"
171
- ],
172
- "Mosquitto": [
173
- "Mosquitto",
174
- "MQTT"
175
- ],
110
+ "Kafka": {
111
+ "hints": ["Kafka"],
112
+ "ports": [9092],
113
+ "scheme": "kafka",
114
+ "label": "Kafka",
115
+ "probe": "ApiVersions"
116
+ },
117
+ "RabbitMQ": {
118
+ "hints": ["RabbitMQ", "AMQP"],
119
+ "ports": [5672, 15672],
120
+ "scheme": "amqp",
121
+ "label": "RabbitMQ",
122
+ "probe": "AMQP protocol header"
123
+ },
124
+ "ActiveMQ": {
125
+ "hints": ["ActiveMQ"],
126
+ "ports": [61616],
127
+ "scheme": "activemq",
128
+ "label": "ActiveMQ",
129
+ "probe": "STOMP CONNECT\n\n"
130
+ },
131
+ "Mosquitto": {
132
+ "hints": ["Mosquitto", "MQTT"],
133
+ "ports": [1883, 8883],
134
+ "scheme": "mqtt",
135
+ "label": "Mosquitto",
136
+ "probe": "MQTT CONNECT"
137
+ },
176
138
 
177
139
  // -------------------- Microsoft Services ---------------------
178
- "RDP": [
179
- "RDP",
180
- "Terminal Services",
181
- "Remote Desktop",
182
- "MSTerminal"
183
- ],
184
- "SMB": [
185
- "SMB",
186
- "NetBIOS",
187
- "Samba"
188
- ],
189
- "WMI": [
190
- "WMI"
191
- ],
192
- "WinRM": [
193
- "WinRM"
194
- ],
140
+ "RDP": { "hints": ["RDP", "Terminal Services", "Remote Desktop", "MSTerminal"], "ports": [3389], "scheme": "rdp", "label": "RDP", "probe": "TLS ClientHello" },
141
+ "SMB": { "hints": ["SMB", "NetBIOS", "Samba"], "ports": [445], "scheme": "smb", "label": "SMB", "probe": "SMB negotiate" },
142
+ "WMI": {
143
+ "hints": ["WMI"],
144
+ "ports": [135, 445],
145
+ "scheme": "http",
146
+ "label": "WMI",
147
+ "probe": "RPC connect"
148
+ },
149
+ "WinRM": {
150
+ "hints": ["WinRM"],
151
+ "ports": [5985, 5986],
152
+ "scheme": "http",
153
+ "label": "WinRM",
154
+ "probe": "HEAD /wsman HTTP/1.1\r\nHost: {host_hdr}\r\nConnection: close\r\n\r\n"
155
+ },
195
156
 
196
157
  // ---------------- Collaboration / Chat -----------------------
197
- "IRC": [
198
- "IRC"
199
- ],
200
- "XMPP": [
201
- "XMPP",
202
- "Jabber"
203
- ],
204
- "Matrix": [
205
- "Matrix"
206
- ],
158
+ "IRC": {
159
+ "hints": ["IRC"],
160
+ "ports": [6667, 6697],
161
+ "scheme": "irc",
162
+ "label": "IRC",
163
+ "probe": "\r\n"
164
+ },
165
+ "XMPP": {
166
+ "hints": ["XMPP", "Jabber"],
167
+ "ports": [5222, 5223],
168
+ "scheme": "xmpp",
169
+ "label": "XMPP",
170
+ "probe": "<stream:stream to='{host_hdr}' version='1.0' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>"
171
+ },
172
+ "Matrix": {
173
+ "hints": ["Matrix"],
174
+ "ports": [8448],
175
+ "scheme": "http",
176
+ "label": "Matrix",
177
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
178
+ },
207
179
 
208
180
  // ------------- Virtualization / Container Services ----------
209
- "Docker API": [
210
- "Docker"
211
- ],
212
- "Kubernetes API": [
213
- "Kubernetes",
214
- "K8s",
215
- "kube-apiserver"
216
- ],
217
- "VMware ESXi": [
218
- "VMware ESXi",
219
- "ESX"
220
- ],
221
- "Proxmox": [
222
- "Proxmox"
223
- ],
181
+ "Docker API": {
182
+ "hints": ["Docker"],
183
+ "ports": [2375, 2376],
184
+ "scheme": "http",
185
+ "label": "Docker API",
186
+ "probe": "GET /_ping HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
187
+ },
188
+ "Kubernetes API": {
189
+ "hints": ["Kubernetes", "K8s", "kube-apiserver"],
190
+ "ports": [6443],
191
+ "scheme": "http",
192
+ "label": "Kubernetes API",
193
+ "probe": "GET /version HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
194
+ },
195
+ "VMware ESXi": {
196
+ "hints": ["VMware ESXi", "ESX"],
197
+ "ports": [443],
198
+ "scheme": "https",
199
+ "label": "VMware ESXi",
200
+ "probe": "TLS ClientHello"
201
+ },
202
+ "Proxmox": {
203
+ "hints": ["Proxmox"],
204
+ "ports": [8006],
205
+ "scheme": "https",
206
+ "label": "Proxmox",
207
+ "probe": "TLS ClientHello"
208
+ },
224
209
 
225
210
  // ----------------- Remote Desktop / Control -----------------
226
- "VNC": [
227
- "VNC",
228
- "RFB"
229
- ],
230
- "TeamViewer": [
231
- "TeamViewer"
232
- ],
233
- "AnyDesk": [
234
- "AnyDesk"
235
- ],
211
+ "VNC": { "hints": ["VNC", "RFB"], "ports": [5900], "scheme": "vnc", "label": "VNC", "probe": "" },
212
+ "TeamViewer": {
213
+ "hints": ["TeamViewer"],
214
+ "ports": [5938],
215
+ "scheme": "http",
216
+ "label": "TeamViewer",
217
+ "probe": "TLS ClientHello"
218
+ },
219
+ "AnyDesk": {
220
+ "hints": ["AnyDesk"],
221
+ "ports": [7070],
222
+ "scheme": "http",
223
+ "label": "AnyDesk",
224
+ "probe": "TLS ClientHello"
225
+ },
236
226
 
237
227
  // --------------------- Voice over IP ------------------------
238
- "SIP": [
239
- "SIP",
240
- "Asterisk",
241
- "FreeSWITCH"
242
- ],
243
- "H.323": [
244
- "H.323"
245
- ],
228
+ "SIP": { "hints": ["SIP", "Asterisk", "FreeSWITCH"], "ports": [5060, 5061], "label": "SIP", "probe": "OPTIONS sip:{host_hdr} SIP/2.0\r\n\r\n" },
229
+ "H.323": {
230
+ "hints": ["H.323"],
231
+ "ports": [1720],
232
+ "scheme": "http",
233
+ "label": "H.323",
234
+ "probe": "H.225 Q.931"
235
+ },
246
236
 
247
237
  // ----------- Time, Network Config, and Infrastructure -------
248
- "NTP": [
249
- "NTP"
250
- ],
251
- "DHCP": [
252
- "DHCP"
253
- ],
238
+ "NTP": { "hints": ["NTP"], "ports": [123], "label": "NTP", "probe": "NTP query (UDP)" },
239
+ "DHCP": { "hints": ["DHCP"], "ports": [67, 68], "label": "DHCP", "probe": "DHCP Discover (UDP)" },
254
240
 
255
241
  // ------------------ VPN / Tunneling / Security --------------
256
- "OpenVPN": [
257
- "OpenVPN"
258
- ],
259
- "IPSec": [
260
- "IPSec",
261
- "IKE"
262
- ],
263
- "WireGuard": [
264
- "WireGuard"
265
- ],
242
+ "OpenVPN": {
243
+ "hints": ["OpenVPN"],
244
+ "ports": [1194],
245
+ "scheme": "udp",
246
+ "label": "OpenVPN",
247
+ "probe": "OpenVPN hard reset (UDP)"
248
+ },
249
+ "IPSec": {
250
+ "hints": ["IPSec", "IKE"],
251
+ "ports": [500, 4500],
252
+ "scheme": "ipsec",
253
+ "label": "IPSec",
254
+ "probe": "IKE_SA_INIT (UDP)"
255
+ },
256
+ "WireGuard": {
257
+ "hints": ["WireGuard"],
258
+ "ports": [51820],
259
+ "scheme": "wireguard",
260
+ "label": "WireGuard",
261
+ "probe": "Initiation (UDP)"
262
+ },
266
263
 
267
264
  // ---------------------- Other Protocols ----------------------
268
- "SNMP": [
269
- "SNMP"
270
- ],
271
- "SNMP Trap": [
272
- "Trap",
273
- "SNMPTRAP"
274
- ],
275
- "Syslog": [
276
- "Syslog"
277
- ],
265
+ "SNMP": { "hints": ["SNMP"], "ports": [161], "label": "SNMP", "probe": "SNMP GET (UDP)" },
266
+ "SNMP Trap": {
267
+ "hints": ["Trap", "SNMPTRAP"],
268
+ "ports": [162],
269
+ "label": "SNMP Trap",
270
+ "probe": "(UDP)"
271
+ },
272
+ "Syslog": {
273
+ "hints": ["Syslog"],
274
+ "ports": [514],
275
+ "scheme": "udp",
276
+ "label": "Syslog",
277
+ "probe": "(UDP)"
278
+ },
278
279
 
279
280
  // -------------------- Cloud Services / APIs -----------------
280
- "AWS S3": [
281
- "AmazonS3",
282
- "S3"
283
- ],
284
- "AWS RDS": [
285
- "AWS RDS",
286
- "amazon-rds"
287
- ],
288
- "Azure DevOps": [
289
- "Azure DevOps",
290
- "VSTS"
291
- ],
292
- "GCP Services": [
293
- "GCP",
294
- "googleapis.com"
295
- ],
281
+ "AWS S3": {
282
+ "hints": ["AmazonS3", "S3"],
283
+ "ports": [443],
284
+ "scheme": "https",
285
+ "label": "AWS S3",
286
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
287
+ },
288
+ "AWS RDS": {
289
+ "hints": ["AWS RDS", "amazon-rds"],
290
+ "ports": [3306, 5432],
291
+ "scheme": "mysql",
292
+ "label": "AWS RDS",
293
+ "probe": ""
294
+ },
295
+ "Azure DevOps": {
296
+ "hints": ["Azure DevOps", "VSTS"],
297
+ "ports": [443],
298
+ "scheme": "https",
299
+ "label": "Azure DevOps",
300
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
301
+ },
302
+ "GCP Services": {
303
+ "hints": ["GCP", "googleapis.com"],
304
+ "ports": [443],
305
+ "scheme": "https",
306
+ "label": "GCP Services",
307
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
308
+ },
296
309
 
297
310
  // -------------------- Repo / Code Hosting --------------------
298
- "Git": [
299
- "git-daemon"
300
- ],
301
- "SVN": [
302
- "SVN",
303
- "Subversion"
304
- ],
311
+ "Git": {
312
+ "hints": ["git-daemon"],
313
+ "ports": [9418],
314
+ "scheme": "git",
315
+ "label": "Git",
316
+ "probe": ""
317
+ },
318
+ "SVN": {
319
+ "hints": ["SVN", "Subversion"],
320
+ "ports": [3690],
321
+ "scheme": "svn",
322
+ "label": "SVN",
323
+ "probe": "SVN handshake"
324
+ },
305
325
 
306
326
  // -------------- HPC / Cluster Management / HPC --------------
307
- "Slurm": [
308
- "Slurm"
309
- ],
327
+ "Slurm": {
328
+ "hints": ["Slurm"],
329
+ "ports": [6817, 6818],
330
+ "scheme": "http",
331
+ "label": "Slurm",
332
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
333
+ },
310
334
 
311
335
  // --------------------- Misc / Exotic ------------------------
312
- "Tor": [
313
- "Tor",
314
- "obfs"
315
- ],
316
- "ZeroTier": [
317
- "ZeroTier"
318
- ],
319
- "Mumble": [
320
- "Mumble",
321
- "Murmur"
322
- ],
323
- "Spice": [
324
- "SPICE protocol"
325
- ],
326
- "FusionDirectory": [
327
- "FusionDirectory"
328
- ],
329
- "Jenkins": [
330
- "Jenkins"
331
- ],
332
- "GitLab": [
333
- "GitLab"
334
- ],
335
- "GitHub": [
336
- "GitHub",
337
- "github.com"
338
- ],
339
- "Bitbucket": [
340
- "Bitbucket"
341
- ],
336
+ "Tor": {
337
+ "hints": ["Tor", "obfs"],
338
+ "ports": [9050, 9150],
339
+ "scheme": "http",
340
+ "label": "Tor",
341
+ "probe": "SOCKS5 greeting"
342
+ },
343
+ "ZeroTier": {
344
+ "hints": ["ZeroTier"],
345
+ "ports": [9993, 9994],
346
+ "scheme": "http",
347
+ "label": "ZeroTier",
348
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
349
+ },
350
+ "Mumble": {
351
+ "hints": ["Mumble", "Murmur"],
352
+ "ports": [64738],
353
+ "scheme": "http",
354
+ "label": "Mumble",
355
+ "probe": "TLS ClientHello"
356
+ },
357
+ "Spice": {
358
+ "hints": ["SPICE protocol"],
359
+ "ports": [5900],
360
+ "scheme": "http",
361
+ "label": "Spice",
362
+ "probe": ""
363
+ },
364
+ "FusionDirectory": {
365
+ "hints": ["FusionDirectory"],
366
+ "ports": [80, 443],
367
+ "scheme": "http",
368
+ "label": "FusionDirectory",
369
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
370
+ },
371
+ "Jenkins": {
372
+ "hints": ["Jenkins"],
373
+ "ports": [8080, 443],
374
+ "scheme": "http",
375
+ "label": "Jenkins",
376
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
377
+ },
378
+ "GitLab": {
379
+ "hints": ["GitLab"],
380
+ "ports": [80, 443],
381
+ "scheme": "http",
382
+ "label": "GitLab",
383
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
384
+ },
385
+ "GitHub": {
386
+ "hints": ["GitHub", "github.com"],
387
+ "ports": [443],
388
+ "scheme": "https",
389
+ "label": "GitHub",
390
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
391
+ },
392
+ "Bitbucket": {
393
+ "hints": ["Bitbucket"],
394
+ "ports": [443],
395
+ "scheme": "https",
396
+ "label": "Bitbucket",
397
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
398
+ },
342
399
 
343
400
  // ------------------ Legacy or Older Protocols ---------------
344
- "Gopher": [
345
- "Gopher"
346
- ],
347
- "Finger": [
348
- "Finger"
349
- ],
350
- "Ident": [
351
- "Ident"
352
- ],
353
- "Rlogin": [
354
- "rlogin"
355
- ],
356
- "Rsync": [
357
- "rsync"
358
- ],
359
- "UUCP": [
360
- "UUCP"
361
- ],
362
- "AFS": [
363
- "AFS",
364
- "OpenAFS"
365
- ],
366
- "NIS": [
367
- "NIS",
368
- "YPServ"
369
- ],
370
- "Telnet SSL": [
371
- "telnet-ssl"
372
- ],
401
+ "Gopher": {
402
+ "hints": ["Gopher"],
403
+ "ports": [70],
404
+ "scheme": "gopher",
405
+ "label": "Gopher",
406
+ "probe": "\r\n"
407
+ },
408
+ "Finger": {
409
+ "hints": ["Finger"],
410
+ "ports": [79],
411
+ "scheme": "finger",
412
+ "label": "Finger",
413
+ "probe": "\r\n"
414
+ },
415
+ "Ident": {
416
+ "hints": ["Ident"],
417
+ "ports": [113],
418
+ "scheme": "ident",
419
+ "label": "Ident",
420
+ "probe": "0,0\r\n"
421
+ },
422
+ "Rlogin": {
423
+ "hints": ["rlogin"],
424
+ "ports": [513],
425
+ "scheme": "rlogin",
426
+ "label": "Rlogin",
427
+ "probe": ""
428
+ },
429
+ "Rsync": {
430
+ "hints": ["rsync"],
431
+ "ports": [873],
432
+ "scheme": "rsync",
433
+ "label": "Rsync",
434
+ "probe": "@RSYNCD: 31.0\n"
435
+ },
436
+ "UUCP": {
437
+ "hints": ["UUCP"],
438
+ "ports": [540],
439
+ "scheme": "uucp",
440
+ "label": "UUCP",
441
+ "probe": ""
442
+ },
443
+ "AFS": {
444
+ "hints": ["AFS", "OpenAFS"],
445
+ "ports": [7000, 7001],
446
+ "scheme": "http",
447
+ "label": "AFS",
448
+ "probe": ""
449
+ },
450
+ "NIS": {
451
+ "hints": ["NIS", "YPServ"],
452
+ "ports": [111],
453
+ "scheme": "rpc",
454
+ "label": "NIS",
455
+ "probe": "RPC Portmap"
456
+ },
457
+ "Telnet SSL": {
458
+ "hints": ["telnet-ssl"],
459
+ "ports": [992],
460
+ "scheme": "ssl",
461
+ "label": "Telnet SSL",
462
+ "probe": "TLS ClientHello"
463
+ },
373
464
 
374
465
  // ----------------- Big Data / Hadoop Ecosystem --------------
375
- "Hadoop": [
376
- "Hadoop",
377
- "MapReduce",
378
- "YARN"
379
- ],
380
- "HDFS": [
381
- "HDFS"
382
- ],
383
- "Hive": [
384
- "Hive",
385
- "HiveServer2"
386
- ],
387
- "HBase": [
388
- "HBase",
389
- "HMaster"
390
- ],
391
- "Zookeeper": [
392
- "Zookeeper",
393
- "ZooKeeper"
394
- ],
395
- "Spark": [
396
- "Spark"
397
- ],
466
+ "Hadoop": {
467
+ "hints": ["Hadoop", "MapReduce", "YARN"],
468
+ "ports": [50070, 8088],
469
+ "scheme": "http",
470
+ "label": "Hadoop",
471
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
472
+ },
473
+ "HDFS": {
474
+ "hints": ["HDFS"],
475
+ "ports": [50070],
476
+ "scheme": "http",
477
+ "label": "HDFS",
478
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
479
+ },
480
+ "Hive": {
481
+ "hints": ["Hive", "HiveServer2"],
482
+ "ports": [10000, 10001],
483
+ "scheme": "http",
484
+ "label": "Hive",
485
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
486
+ },
487
+ "HBase": {
488
+ "hints": ["HBase", "HMaster"],
489
+ "ports": [16010, 16020],
490
+ "scheme": "http",
491
+ "label": "HBase",
492
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
493
+ },
494
+ "Zookeeper": {
495
+ "hints": ["Zookeeper", "ZooKeeper"],
496
+ "ports": [2181, 2888, 3888],
497
+ "scheme": "http",
498
+ "label": "Zookeeper",
499
+ "probe": "ruok\n"
500
+ },
501
+ "Spark": {
502
+ "hints": ["Spark"],
503
+ "ports": [7077, 8080],
504
+ "scheme": "http",
505
+ "label": "Spark",
506
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
507
+ },
398
508
 
399
509
  // ------------ Web Frameworks / Application Servers ----------
400
- "Tomcat": [
401
- "Apache Tomcat",
402
- "Apache-Coyote"
403
- ],
404
- "JBoss": [
405
- "JBoss",
406
- "JBoss EAP"
407
- ],
408
- "GlassFish": [
409
- "GlassFish"
410
- ],
411
- "WebLogic": [
412
- "WebLogic"
413
- ],
414
- "WebSphere": [
415
- "WebSphere"
416
- ],
417
- "Jetty": [
418
- "Jetty"
419
- ],
510
+ "Tomcat": {
511
+ "hints": ["Apache Tomcat", "Apache-Coyote"],
512
+ "ports": [8080, 8009],
513
+ "scheme": "http",
514
+ "label": "Tomcat",
515
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
516
+ },
517
+ "JBoss": {
518
+ "hints": ["JBoss", "JBoss EAP"],
519
+ "ports": [8080, 9990],
520
+ "scheme": "http",
521
+ "label": "JBoss",
522
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
523
+ },
524
+ "GlassFish": {
525
+ "hints": ["GlassFish"],
526
+ "ports": [8080, 4848],
527
+ "scheme": "http",
528
+ "label": "GlassFish",
529
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
530
+ },
531
+ "WebLogic": {
532
+ "hints": ["WebLogic"],
533
+ "ports": [7001, 7002],
534
+ "scheme": "http",
535
+ "label": "WebLogic",
536
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
537
+ },
538
+ "WebSphere": {
539
+ "hints": ["WebSphere"],
540
+ "ports": [9080, 9443],
541
+ "scheme": "http",
542
+ "label": "WebSphere",
543
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
544
+ },
545
+ "Jetty": {
546
+ "hints": ["Jetty"],
547
+ "ports": [8080],
548
+ "scheme": "http",
549
+ "label": "Jetty",
550
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
551
+ },
420
552
  // Gunicorn and uWSGI also appear under HTTP if they surface in the banner.
421
553
 
422
554
  // ------- Additional Container / Orchestration Tools ---------
423
- "Docker Swarm": [
424
- "Swarm"
425
- ],
555
+ "Docker Swarm": {
556
+ "hints": ["Swarm"],
557
+ "ports": [2377],
558
+ "scheme": "http",
559
+ "label": "Docker Swarm",
560
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
561
+ },
426
562
 
427
563
  // ---------- Reverse Proxies / Load Balancers / Gateways -----
428
- "HAProxy": [
429
- "HAProxy"
430
- ],
431
- "Traefik": [
432
- "Traefik"
433
- ],
434
- "Envoy": [
435
- "Envoy"
436
- ],
564
+ "HAProxy": {
565
+ "hints": ["HAProxy"],
566
+ "ports": [80, 443, 8404],
567
+ "scheme": "http",
568
+ "label": "HAProxy",
569
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
570
+ },
571
+ "Traefik": {
572
+ "hints": ["Traefik"],
573
+ "ports": [80, 443],
574
+ "scheme": "http",
575
+ "label": "Traefik",
576
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
577
+ },
578
+ "Envoy": {
579
+ "hints": ["Envoy"],
580
+ "ports": [80, 443],
581
+ "scheme": "http",
582
+ "label": "Envoy",
583
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
584
+ },
437
585
 
438
586
  // ------------------ CI/CD and DevOps Tools ------------------
439
- "Bamboo": [
440
- "Bamboo"
441
- ],
442
- "TeamCity": [
443
- "TeamCity"
444
- ],
445
- "Drone CI": [
446
- "Drone"
447
- ],
587
+ "Bamboo": {
588
+ "hints": ["Bamboo"],
589
+ "ports": [8085],
590
+ "scheme": "http",
591
+ "label": "Bamboo",
592
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
593
+ },
594
+ "TeamCity": {
595
+ "hints": ["TeamCity"],
596
+ "ports": [8111],
597
+ "scheme": "http",
598
+ "label": "TeamCity",
599
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
600
+ },
601
+ "Drone CI": {
602
+ "hints": ["Drone"],
603
+ "ports": [8080],
604
+ "scheme": "http",
605
+ "label": "Drone CI",
606
+ "probe": "HEAD / HTTP/1.0\r\nHost: {host_hdr}\r\n\r\n"
607
+ },
448
608
 
449
609
  // ------------------- Just for completeness ------------------
450
- "COBOL-based service": [
451
- "Mainframe",
452
- "AS/400",
453
- // Banner might mention "Enterprise COBOL" or "z/OS"
454
- "z/OS"
455
- ]
610
+ "COBOL-based service": {
611
+ "hints": ["Mainframe", "AS/400", "Enterprise COBOL", "z/OS"],
612
+ "ports": [32768],
613
+ "scheme": "http",
614
+ "label": "COBOL-based service",
615
+ "probe": ""
616
+ },
617
+
618
+ // -------------------- Game / Misc on 27015 ------------------
619
+ "Source": { "hints": ["Source"], "ports": [27015], "scheme": "source", "label": "Source", "probe": "(UDP)" },
620
+ "Minecraft": { "hints": ["Minecraft"], "ports": [27015], "scheme": "minecraft", "label": "Minecraft", "probe": "(UDP)" },
621
+ "Teamspeak": { "hints": ["Teamspeak"], "ports": [27015], "scheme": "teamspeak", "label": "Teamspeak", "probe": "(UDP)" },
622
+ "Garry's Mod": { "hints": ["Garry's Mod"], "ports": [27015], "scheme": "gmod", "label": "Garry's Mod", "probe": "(UDP)" },
623
+ "Rust": { "hints": ["Rust"], "ports": [27015], "scheme": "rust", "label": "Rust", "probe": "(UDP)" },
624
+ "ARK": { "hints": ["ARK"], "ports": [27015], "scheme": "ark", "label": "ARK", "probe": "(UDP)" },
625
+ "Terraria": { "hints": ["Terraria"], "ports": [27015], "scheme": "terraria", "label": "Terraria", "probe": "(UDP)" },
626
+ "Factorio": { "hints": ["Factorio"], "ports": [27015], "scheme": "factorio", "label": "Factorio", "probe": "(UDP)" },
627
+ "StarMade": { "hints": ["StarMade"], "ports": [27015], "scheme": "starmade", "label": "StarMade", "probe": "(UDP)" },
628
+ "7 Days to Die": { "hints": ["7 Days to Die"], "ports": [27015], "scheme": "7dtd", "label": "7 Days to Die", "probe": "(UDP)" },
629
+
630
+ // -------------------- Printers (special-case) ---------------
631
+ "Printer": { "hints": ["Printer", "JetDirect", "RAW printing"], "ports": [9100, 631], "label": "Printer", "probe": "none" }
456
632
  }