1use std::collections::HashMap;
7use std::sync::LazyLock;
8
9pub static TCP_SERVICES: LazyLock<HashMap<u16, &'static str>> = LazyLock::new(|| {
11 let mut m = HashMap::new();
12
13 m.insert(1, "tcpmux");
15 m.insert(5, "rje");
16 m.insert(7, "echo");
17 m.insert(9, "discard");
18 m.insert(11, "systat");
19 m.insert(13, "daytime");
20 m.insert(17, "qotd");
21 m.insert(18, "msp");
22 m.insert(19, "chargen");
23 m.insert(20, "ftp-data");
24 m.insert(21, "ftp");
25 m.insert(22, "ssh");
26 m.insert(23, "telnet");
27 m.insert(25, "smtp");
28 m.insert(37, "time");
29 m.insert(39, "rlp");
30 m.insert(42, "nameserver");
31 m.insert(43, "whois");
32 m.insert(49, "tacacs");
33 m.insert(50, "re-mail-ck");
34 m.insert(53, "domain");
35 m.insert(63, "whois++");
36 m.insert(67, "bootps");
37 m.insert(68, "bootpc");
38 m.insert(69, "tftp");
39 m.insert(70, "gopher");
40 m.insert(71, "netrjs-1");
41 m.insert(72, "netrjs-2");
42 m.insert(73, "netrjs-3");
43 m.insert(74, "netrjs-4");
44 m.insert(79, "finger");
45 m.insert(80, "http");
46 m.insert(81, "hosts2-ns");
47 m.insert(82, "xfer");
48 m.insert(83, "mit-ml-dev");
49 m.insert(84, "ctf");
50 m.insert(85, "mit-ml-dev");
51 m.insert(86, "mfcobol");
52 m.insert(88, "kerberos");
53 m.insert(89, "su-mit-tg");
54 m.insert(90, "dnsix");
55 m.insert(91, "mit-dov");
56 m.insert(92, "npp");
57 m.insert(93, "dcp");
58 m.insert(94, "objcall");
59 m.insert(95, "supdup");
60 m.insert(96, "dixie");
61 m.insert(97, "swift-rvf");
62 m.insert(98, "tacnews");
63 m.insert(99, "metagram");
64 m.insert(101, "hostname");
65 m.insert(102, "iso-tsap");
66 m.insert(103, "gppitnp");
67 m.insert(104, "acr-nema");
68 m.insert(105, "csnet-ns");
69 m.insert(106, "3com-tsmux");
70 m.insert(107, "rtelnet");
71 m.insert(108, "snagas");
72 m.insert(109, "pop2");
73 m.insert(110, "pop3");
74 m.insert(111, "sunrpc");
75 m.insert(112, "mcidas");
76 m.insert(113, "auth");
77 m.insert(115, "sftp");
78 m.insert(117, "uucp-path");
79 m.insert(118, "sqlserv");
80 m.insert(119, "nntp");
81 m.insert(120, "cfdptkt");
82 m.insert(121, "erpc");
83 m.insert(122, "smakynet");
84 m.insert(123, "ntp");
85 m.insert(124, "ansatrader");
86 m.insert(125, "locus-map");
87 m.insert(126, "unitary");
88 m.insert(127, "locus-con");
89 m.insert(128, "gss-xlicen");
90 m.insert(129, "pwdgen");
91 m.insert(130, "cisco-fna");
92 m.insert(131, "cisco-tna");
93 m.insert(132, "cisco-sys");
94 m.insert(133, "statsrv");
95 m.insert(134, "ingres-net");
96 m.insert(135, "msrpc");
97 m.insert(136, "profile");
98 m.insert(137, "netbios-ns");
99 m.insert(138, "netbios-dgm");
100 m.insert(139, "netbios-ssn");
101 m.insert(140, "emfis-data");
102 m.insert(141, "emfis-cntl");
103 m.insert(142, "bl-idm");
104 m.insert(143, "imap");
105 m.insert(144, "uma");
106 m.insert(145, "uaac");
107 m.insert(146, "iso-tp0");
108 m.insert(147, "iso-ip");
109 m.insert(148, "jargon");
110 m.insert(149, "aed-512");
111 m.insert(150, "sql-net");
112 m.insert(151, "hems");
113 m.insert(152, "bftp");
114 m.insert(153, "sgmp");
115 m.insert(154, "netsc-prod");
116 m.insert(155, "netsc-dev");
117 m.insert(156, "sqlsrv");
118 m.insert(157, "knet-cmp");
119 m.insert(158, "pcmail-srv");
120 m.insert(159, "nss-routing");
121 m.insert(160, "sgmp-traps");
122 m.insert(161, "snmp");
123 m.insert(162, "snmptrap");
124 m.insert(163, "cmip-man");
125 m.insert(164, "cmip-agent");
126 m.insert(165, "xns-courier");
127 m.insert(166, "s-net");
128 m.insert(167, "namp");
129 m.insert(168, "rsvd");
130 m.insert(169, "send");
131 m.insert(170, "print-srv");
132 m.insert(171, "multiplex");
133 m.insert(172, "cl/1");
134 m.insert(173, "xyplex-mux");
135 m.insert(174, "mailq");
136 m.insert(175, "vmnet");
137 m.insert(176, "genrad-mux");
138 m.insert(177, "xdmcp");
139 m.insert(178, "nextstep");
140 m.insert(179, "bgp");
141 m.insert(180, "ris");
142 m.insert(181, "unify");
143 m.insert(182, "audit");
144 m.insert(183, "ocbinder");
145 m.insert(184, "ocserver");
146 m.insert(185, "remote-kis");
147 m.insert(186, "kis");
148 m.insert(187, "aci");
149 m.insert(188, "mumps");
150 m.insert(189, "qft");
151 m.insert(190, "gacp");
152 m.insert(191, "prospero");
153 m.insert(192, "osu-nms");
154 m.insert(193, "srmp");
155 m.insert(194, "irc");
156 m.insert(195, "dn6-nlm-aud");
157 m.insert(196, "dn6-smm-red");
158 m.insert(197, "dls");
159 m.insert(198, "dls-mon");
160 m.insert(199, "smux");
161 m.insert(200, "src");
162 m.insert(201, "at-rtmp");
163 m.insert(202, "at-nbp");
164 m.insert(203, "at-3");
165 m.insert(204, "at-echo");
166 m.insert(205, "at-5");
167 m.insert(206, "at-zis");
168 m.insert(207, "at-7");
169 m.insert(208, "at-8");
170 m.insert(209, "qmtp");
171 m.insert(210, "z39.50");
172 m.insert(211, "914c/g");
173 m.insert(212, "anet");
174 m.insert(213, "ipx");
175 m.insert(214, "vmpwscs");
176 m.insert(215, "softpc");
177 m.insert(216, "CAIlic");
178 m.insert(217, "dbase");
179 m.insert(218, "mpp");
180 m.insert(219, "uarps");
181 m.insert(220, "imap3");
182 m.insert(221, "fln-spx");
183 m.insert(222, "rsh-spx");
184 m.insert(223, "cdc");
185 m.insert(224, "masqdialer");
186 m.insert(242, "direct");
187 m.insert(243, "sur-meas");
188 m.insert(244, "dayna");
189 m.insert(245, "link");
190 m.insert(246, "dsp3270");
191 m.insert(247, "subntbcst_tftp");
192 m.insert(248, "bhfhs");
193 m.insert(256, "rap");
194 m.insert(257, "set");
195 m.insert(259, "esro-gen");
196 m.insert(260, "openport");
197 m.insert(261, "nsiiops");
198 m.insert(262, "arcisdms");
199 m.insert(263, "hdap");
200 m.insert(264, "bgmp");
201 m.insert(280, "http-mgmt");
202 m.insert(281, "personal-link");
203 m.insert(282, "cableport-ax");
204 m.insert(283, "rescap");
205 m.insert(284, "corerjd");
206 m.insert(286, "fxp-1");
207 m.insert(287, "k-block");
208 m.insert(308, "novastorbakcup");
209 m.insert(309, "entrusttime");
210 m.insert(310, "bhmds");
211 m.insert(311, "asip-webadmin");
212 m.insert(312, "vslmp");
213 m.insert(313, "magenta-logic");
214 m.insert(314, "opalis-robot");
215 m.insert(315, "dpsi");
216 m.insert(316, "decauth");
217 m.insert(317, "zannet");
218 m.insert(318, "pkix-timestamp");
219 m.insert(319, "ptp-event");
220 m.insert(320, "ptp-general");
221 m.insert(321, "pip");
222 m.insert(322, "rtsps");
223 m.insert(333, "texar");
224 m.insert(344, "pdap");
225 m.insert(345, "pawserv");
226 m.insert(346, "zserv");
227 m.insert(347, "fatserv");
228 m.insert(348, "csi-sgwp");
229 m.insert(349, "mftp");
230 m.insert(350, "matip-type-a");
231 m.insert(351, "matip-type-b");
232 m.insert(352, "dtag-ste-sb");
233 m.insert(353, "ndsauth");
234 m.insert(354, "bh611");
235 m.insert(355, "datex-asn");
236 m.insert(356, "cloanto-net-1");
237 m.insert(357, "bhevent");
238 m.insert(358, "shrinkwrap");
239 m.insert(359, "nsrmp");
240 m.insert(360, "scoi2odialog");
241 m.insert(361, "semantix");
242 m.insert(362, "srssend");
243 m.insert(363, "rsvp_tunnel");
244 m.insert(364, "aurora-cmgr");
245 m.insert(365, "dtk");
246 m.insert(366, "odmr");
247 m.insert(367, "mortgageware");
248 m.insert(368, "qbikgdp");
249 m.insert(369, "rpc2portmap");
250 m.insert(370, "codaauth2");
251 m.insert(371, "clearcase");
252 m.insert(372, "ulistserv");
253 m.insert(373, "legent-1");
254 m.insert(374, "legent-2");
255 m.insert(375, "hassle");
256 m.insert(376, "nip");
257 m.insert(377, "tnETOS");
258 m.insert(378, "dsETOS");
259 m.insert(379, "is99c");
260 m.insert(380, "is99s");
261 m.insert(381, "hp-collector");
262 m.insert(382, "hp-managed-node");
263 m.insert(383, "hp-alarm-mgr");
264 m.insert(384, "arns");
265 m.insert(385, "ibm-app");
266 m.insert(386, "asa");
267 m.insert(387, "aurp");
268 m.insert(388, "unidata-ldm");
269 m.insert(389, "ldap");
270 m.insert(390, "uis");
271 m.insert(391, "synotics-relay");
272 m.insert(392, "synotics-broker");
273 m.insert(393, "dis");
274 m.insert(394, "embl-ndt");
275 m.insert(395, "netcp");
276 m.insert(396, "netware-ip");
277 m.insert(397, "mptn");
278 m.insert(398, "kryptolan");
279 m.insert(399, "iso-tsap-c2");
280 m.insert(400, "work-sol");
281 m.insert(401, "ups");
282 m.insert(402, "genie");
283 m.insert(403, "decap");
284 m.insert(404, "nced");
285 m.insert(405, "ncld");
286 m.insert(406, "imsp");
287 m.insert(407, "timbuktu");
288 m.insert(408, "prm-sm");
289 m.insert(409, "prm-nm");
290 m.insert(410, "decladebug");
291 m.insert(411, "rmt");
292 m.insert(412, "synoptics-trap");
293 m.insert(413, "smsp");
294 m.insert(414, "infoseek");
295 m.insert(415, "bnet");
296 m.insert(416, "silverplatter");
297 m.insert(417, "onmux");
298 m.insert(418, "hyper-g");
299 m.insert(419, "ariel1");
300 m.insert(420, "smpte");
301 m.insert(421, "ariel2");
302 m.insert(422, "ariel3");
303 m.insert(423, "opc-job-start");
304 m.insert(424, "opc-job-track");
305 m.insert(425, "icad-el");
306 m.insert(426, "smartsdp");
307 m.insert(427, "svrloc");
308 m.insert(428, "ocs_cmu");
309 m.insert(429, "ocs_amu");
310 m.insert(430, "utmpsd");
311 m.insert(431, "utmpcd");
312 m.insert(432, "iasd");
313 m.insert(433, "nnsp");
314 m.insert(434, "mobileip-agent");
315 m.insert(435, "mobilip-mn");
316 m.insert(436, "dna-cml");
317 m.insert(437, "comscm");
318 m.insert(438, "dsfgw");
319 m.insert(439, "dasp");
320 m.insert(440, "sgcp");
321 m.insert(441, "decvms-sysmgt");
322 m.insert(442, "cvc_hostd");
323 m.insert(443, "https");
324 m.insert(444, "snpp");
325 m.insert(445, "microsoft-ds");
326 m.insert(446, "ddm-rdb");
327 m.insert(447, "ddm-dfm");
328 m.insert(448, "ddm-byte");
329 m.insert(449, "as-servermap");
330 m.insert(450, "tserver");
331 m.insert(464, "kpasswd");
332 m.insert(465, "smtps");
333 m.insert(475, "cybercash");
334 m.insert(487, "saft");
335 m.insert(488, "gss-http");
336 m.insert(489, "nest-protocol");
337 m.insert(491, "go-login");
338 m.insert(497, "retrospect");
339 m.insert(500, "isakmp");
340 m.insert(501, "stmf");
341 m.insert(502, "asa-appl-proto");
342 m.insert(504, "citadel");
343 m.insert(510, "fcp");
344 m.insert(512, "exec");
345 m.insert(513, "login");
346 m.insert(514, "shell");
347 m.insert(515, "printer");
348 m.insert(517, "talk");
349 m.insert(518, "ntalk");
350 m.insert(519, "utime");
351 m.insert(520, "efs");
352 m.insert(521, "ripng");
353 m.insert(522, "ulp");
354 m.insert(523, "ibm-db2");
355 m.insert(524, "ncp");
356 m.insert(525, "timed");
357 m.insert(526, "tempo");
358 m.insert(527, "stx");
359 m.insert(528, "custix");
360 m.insert(529, "irc-serv");
361 m.insert(530, "courier");
362 m.insert(531, "conference");
363 m.insert(532, "netnews");
364 m.insert(533, "netwall");
365 m.insert(534, "mm-admin");
366 m.insert(535, "iiop");
367 m.insert(536, "opalis-rdv");
368 m.insert(537, "nmsp");
369 m.insert(538, "gdomap");
370 m.insert(539, "apertus-ldp");
371 m.insert(540, "uucp");
372 m.insert(541, "uucp-rlogin");
373 m.insert(542, "commerce");
374 m.insert(543, "klogin");
375 m.insert(544, "kshell");
376 m.insert(545, "appleqtcsrvr");
377 m.insert(546, "dhcpv6-client");
378 m.insert(547, "dhcpv6-server");
379 m.insert(548, "afp");
380 m.insert(549, "idfp");
381 m.insert(550, "new-rwho");
382 m.insert(551, "cybercash");
383 m.insert(552, "deviceshare");
384 m.insert(553, "pirp");
385 m.insert(554, "rtsp");
386 m.insert(555, "dsf");
387 m.insert(556, "remotefs");
388 m.insert(557, "openvms-sysipc");
389 m.insert(558, "sdnskmp");
390 m.insert(559, "teedtap");
391 m.insert(560, "rmonitor");
392 m.insert(561, "monitor");
393 m.insert(562, "chshell");
394 m.insert(563, "nntps");
395 m.insert(564, "9pfs");
396 m.insert(565, "whoami");
397 m.insert(566, "streettalk");
398 m.insert(567, "banyan-rpc");
399 m.insert(568, "ms-shuttle");
400 m.insert(569, "ms-rome");
401 m.insert(570, "meter");
402 m.insert(571, "meter");
403 m.insert(572, "sonar");
404 m.insert(573, "banyan-vip");
405 m.insert(574, "ftp-agent");
406 m.insert(575, "vemmi");
407 m.insert(576, "ipcd");
408 m.insert(577, "vnas");
409 m.insert(578, "ipdd");
410 m.insert(579, "decbsrv");
411 m.insert(580, "sntp-heartbeat");
412 m.insert(581, "bdp");
413 m.insert(582, "scc-security");
414 m.insert(583, "philips-vc");
415 m.insert(584, "keyserver");
416 m.insert(585, "imap4-ssl");
417 m.insert(586, "password-chg");
418 m.insert(587, "submission");
419 m.insert(588, "cal");
420 m.insert(589, "eyelink");
421 m.insert(590, "tns-cml");
422 m.insert(591, "http-alt");
423 m.insert(592, "eudora-set");
424 m.insert(593, "http-rpc-epmap");
425 m.insert(594, "tpip");
426 m.insert(595, "cab-protocol");
427 m.insert(596, "smsd");
428 m.insert(597, "ptcnameservice");
429 m.insert(598, "sco-websrvrmg3");
430 m.insert(599, "acp");
431 m.insert(600, "ipcserver");
432 m.insert(606, "urm");
433 m.insert(607, "nqs");
434 m.insert(608, "sift-uft");
435 m.insert(609, "npmp-trap");
436 m.insert(610, "npmp-local");
437 m.insert(611, "npmp-gui");
438 m.insert(612, "hmmp-ind");
439 m.insert(613, "hmmp-op");
440 m.insert(614, "sshell");
441 m.insert(615, "sco-inetmgr");
442 m.insert(616, "sco-sysmgr");
443 m.insert(617, "sco-dtmgr");
444 m.insert(618, "dei-icda");
445 m.insert(619, "digital-evm");
446 m.insert(620, "sco-websrvrmgr");
447 m.insert(621, "escp-ip");
448 m.insert(622, "collaborator");
449 m.insert(623, "asf-rmcp");
450 m.insert(624, "cryptoadmin");
451 m.insert(625, "dec_dlm");
452 m.insert(626, "asia");
453 m.insert(627, "passgo-tivoli");
454 m.insert(628, "qmqp");
455 m.insert(629, "3com-amp3");
456 m.insert(630, "rda");
457 m.insert(631, "ipp");
458 m.insert(632, "bmpp");
459 m.insert(633, "servstat");
460 m.insert(634, "ginad");
461 m.insert(635, "rlzdbase");
462 m.insert(636, "ldaps");
463 m.insert(637, "lanserver");
464 m.insert(638, "mcns-sec");
465 m.insert(639, "msdp");
466 m.insert(640, "entrust-sps");
467 m.insert(641, "repcmd");
468 m.insert(642, "esro-emsdp");
469 m.insert(643, "sanity");
470 m.insert(644, "dwr");
471 m.insert(645, "pssc");
472 m.insert(646, "ldp");
473 m.insert(647, "dhcp-failover");
474 m.insert(648, "rrp");
475 m.insert(649, "cadview-3d");
476 m.insert(650, "obex");
477 m.insert(651, "ieee-mms");
478 m.insert(652, "hello-port");
479 m.insert(653, "repscmd");
480 m.insert(654, "aodv");
481 m.insert(655, "tinc");
482 m.insert(656, "spmp");
483 m.insert(657, "rmc");
484 m.insert(658, "tenfold");
485 m.insert(660, "mac-srvr-admin");
486 m.insert(661, "hap");
487 m.insert(662, "pftp");
488 m.insert(663, "purenoise");
489 m.insert(664, "asf-secure-rmcp");
490 m.insert(665, "sun-dr");
491 m.insert(666, "mdqs");
492 m.insert(667, "disclose");
493 m.insert(668, "mecomm");
494 m.insert(669, "meregister");
495 m.insert(670, "vacdsm-sws");
496 m.insert(671, "vacdsm-app");
497 m.insert(672, "vpps-qua");
498 m.insert(673, "cimplex");
499 m.insert(674, "acap");
500 m.insert(675, "dctp");
501 m.insert(676, "vpps-via");
502 m.insert(677, "vpp");
503 m.insert(678, "ggf-ncp");
504 m.insert(679, "mrm");
505 m.insert(680, "entrust-aaas");
506 m.insert(681, "entrust-aams");
507 m.insert(682, "xfr");
508 m.insert(683, "corba-iiop");
509 m.insert(684, "corba-iiop-ssl");
510 m.insert(685, "mdc-portmapper");
511 m.insert(686, "hcp-wismar");
512 m.insert(687, "asipregistry");
513 m.insert(688, "realm-rusd");
514 m.insert(689, "nmap");
515 m.insert(690, "vatp");
516 m.insert(691, "msexch-routing");
517 m.insert(692, "hyperwave-isp");
518 m.insert(693, "connendp");
519 m.insert(694, "ha-cluster");
520 m.insert(695, "ieee-mms-ssl");
521 m.insert(696, "rushd");
522 m.insert(697, "uuidgen");
523 m.insert(698, "olsr");
524 m.insert(699, "accessnetwork");
525 m.insert(700, "epp");
526 m.insert(701, "lmp");
527 m.insert(702, "iris-beep");
528 m.insert(704, "elcsd");
529 m.insert(705, "agentx");
530 m.insert(706, "silc");
531 m.insert(707, "borland-dsj");
532 m.insert(709, "entrust-kmsh");
533 m.insert(710, "entrust-ash");
534 m.insert(711, "cisco-tdp");
535 m.insert(712, "tbrpf");
536 m.insert(729, "netviewdm1");
537 m.insert(730, "netviewdm2");
538 m.insert(731, "netviewdm3");
539 m.insert(741, "netgw");
540 m.insert(742, "netrcs");
541 m.insert(744, "flexlm");
542 m.insert(747, "fujitsu-dev");
543 m.insert(748, "ris-cm");
544 m.insert(749, "kerberos-adm");
545 m.insert(750, "rfile");
546 m.insert(751, "pump");
547 m.insert(752, "qrh");
548 m.insert(753, "rrh");
549 m.insert(754, "tell");
550 m.insert(758, "nlogin");
551 m.insert(759, "con");
552 m.insert(760, "ns");
553 m.insert(761, "rxe");
554 m.insert(762, "quotad");
555 m.insert(763, "cycleserv");
556 m.insert(764, "omserv");
557 m.insert(765, "webster");
558 m.insert(767, "phonebook");
559 m.insert(769, "vid");
560 m.insert(770, "cadlock");
561 m.insert(771, "rtip");
562 m.insert(772, "cycleserv2");
563 m.insert(773, "submit");
564 m.insert(774, "rpasswd");
565 m.insert(775, "entomb");
566 m.insert(776, "wpages");
567 m.insert(777, "multiling-http");
568 m.insert(780, "wpgs");
569 m.insert(800, "mdbs_daemon");
570 m.insert(801, "device");
571 m.insert(810, "fcp-udp");
572 m.insert(828, "itm-mcell-s");
573 m.insert(829, "pkix-3-ca-ra");
574 m.insert(830, "netconf-ssh");
575 m.insert(831, "netconf-beep");
576 m.insert(832, "netconfsoaphttp");
577 m.insert(833, "netconfsoapbeep");
578 m.insert(847, "dhcp-failover2");
579 m.insert(848, "gdoi");
580 m.insert(860, "iscsi");
581 m.insert(861, "owamp-control");
582 m.insert(873, "rsync");
583 m.insert(886, "iclcnet-locate");
584 m.insert(887, "iclcnet_svinfo");
585 m.insert(888, "accessbuilder");
586 m.insert(900, "omginitialrefs");
587 m.insert(901, "smpnameres");
588 m.insert(902, "ideafarm-chat");
589 m.insert(903, "ideafarm-catch");
590 m.insert(910, "kink");
591 m.insert(911, "xact-backup");
592 m.insert(912, "apex-mesh");
593 m.insert(913, "apex-edge");
594 m.insert(989, "ftps-data");
595 m.insert(990, "ftps");
596 m.insert(991, "nas");
597 m.insert(992, "telnets");
598 m.insert(993, "imaps");
599 m.insert(994, "ircs");
600 m.insert(995, "pop3s");
601 m.insert(996, "vsinet");
602 m.insert(997, "maitrd");
603 m.insert(998, "busboy");
604 m.insert(999, "garcon");
605 m.insert(1000, "cadlock2");
606 m.insert(1001, "webpush");
607
608 m.insert(1080, "socks");
610 m.insert(1194, "openvpn");
611 m.insert(1433, "ms-sql-s");
612 m.insert(1434, "ms-sql-m");
613 m.insert(1521, "oracle");
614 m.insert(1723, "pptp");
615 m.insert(1812, "radius");
616 m.insert(1813, "radius-acct");
617 m.insert(2049, "nfs");
618 m.insert(2082, "cpanel");
619 m.insert(2083, "cpanels");
620 m.insert(2086, "whm");
621 m.insert(2087, "whms");
622 m.insert(2181, "zookeeper");
623 m.insert(2222, "ssh-alt");
624 m.insert(2375, "docker");
625 m.insert(2376, "docker-s");
626 m.insert(2379, "etcd-client");
627 m.insert(2380, "etcd-server");
628 m.insert(3000, "ppp");
629 m.insert(3128, "squid");
630 m.insert(3268, "ldap-gc");
631 m.insert(3269, "ldaps-gc");
632 m.insert(3306, "mysql");
633 m.insert(3389, "ms-wbt-server");
634 m.insert(3690, "svn");
635 m.insert(4000, "terabase");
636 m.insert(4369, "epmd");
637 m.insert(4443, "pharos");
638 m.insert(5000, "upnp");
639 m.insert(5001, "commplex-link");
640 m.insert(5060, "sip");
641 m.insert(5061, "sips");
642 m.insert(5222, "xmpp-client");
643 m.insert(5223, "xmpp-client-ssl");
644 m.insert(5269, "xmpp-server");
645 m.insert(5432, "postgresql");
646 m.insert(5672, "amqp");
647 m.insert(5900, "vnc");
648 m.insert(5984, "couchdb");
649 m.insert(6000, "x11");
650 m.insert(6379, "redis");
651 m.insert(6443, "kubernetes-api");
652 m.insert(6666, "irc-alt");
653 m.insert(6667, "irc");
654 m.insert(6668, "irc-alt");
655 m.insert(6669, "irc-alt");
656 m.insert(7000, "afs3-fileserver");
657 m.insert(7001, "afs3-callback");
658 m.insert(7002, "afs3-prserver");
659 m.insert(7003, "afs3-vlserver");
660 m.insert(7004, "afs3-kaserver");
661 m.insert(7005, "afs3-volser");
662 m.insert(7006, "afs3-errors");
663 m.insert(7007, "afs3-bos");
664 m.insert(7008, "afs3-update");
665 m.insert(7009, "afs3-rmtsys");
666 m.insert(7010, "ups-onlinet");
667 m.insert(8000, "http-alt");
668 m.insert(8008, "http-alt");
669 m.insert(8080, "http-proxy");
670 m.insert(8081, "blackice-icecap");
671 m.insert(8088, "radan-http");
672 m.insert(8443, "https-alt");
673 m.insert(8888, "ddi-tcp-1");
674 m.insert(9000, "cslistener");
675 m.insert(9042, "cassandra");
676 m.insert(9090, "websm");
677 m.insert(9091, "xmltec-xmlmail");
678 m.insert(9092, "kafka");
679 m.insert(9200, "elasticsearch");
680 m.insert(9300, "elasticsearch");
681 m.insert(9418, "git");
682 m.insert(9999, "abyss");
683 m.insert(10000, "webmin");
684 m.insert(11211, "memcached");
685 m.insert(15672, "rabbitmq-mgmt");
686 m.insert(25565, "minecraft");
687 m.insert(27017, "mongodb");
688 m.insert(27018, "mongodb");
689 m.insert(27019, "mongodb");
690
691 m
692});
693
694pub static TCP_SERVICES_BY_NAME: LazyLock<HashMap<&'static str, u16>> = LazyLock::new(|| {
696 TCP_SERVICES
697 .iter()
698 .map(|(&port, &name)| (name, port))
699 .collect()
700});
701
702pub fn service_name(port: u16) -> &'static str {
706 TCP_SERVICES.get(&port).copied().unwrap_or("unknown")
707}
708
709pub fn service_port(name: &str) -> Option<u16> {
713 TCP_SERVICES_BY_NAME.get(name).copied()
714}
715
716#[inline]
718pub fn is_well_known_port(port: u16) -> bool {
719 port < 1024
720}
721
722#[inline]
724pub fn is_registered_port(port: u16) -> bool {
725 (1024..49152).contains(&port)
726}
727
728#[inline]
730pub fn is_dynamic_port(port: u16) -> bool {
731 port >= 49152
732}
733
734#[cfg(test)]
735mod tests {
736 use super::*;
737
738 #[test]
739 fn test_well_known_services() {
740 assert_eq!(service_name(20), "ftp-data");
741 assert_eq!(service_name(21), "ftp");
742 assert_eq!(service_name(22), "ssh");
743 assert_eq!(service_name(23), "telnet");
744 assert_eq!(service_name(25), "smtp");
745 assert_eq!(service_name(53), "domain");
746 assert_eq!(service_name(80), "http");
747 assert_eq!(service_name(110), "pop3");
748 assert_eq!(service_name(143), "imap");
749 assert_eq!(service_name(443), "https");
750 assert_eq!(service_name(993), "imaps");
751 assert_eq!(service_name(995), "pop3s");
752 }
753
754 #[test]
755 fn test_registered_services() {
756 assert_eq!(service_name(3306), "mysql");
757 assert_eq!(service_name(5432), "postgresql");
758 assert_eq!(service_name(6379), "redis");
759 assert_eq!(service_name(8080), "http-proxy");
760 assert_eq!(service_name(27017), "mongodb");
761 }
762
763 #[test]
764 fn test_unknown_port() {
765 assert_eq!(service_name(12345), "unknown");
766 assert_eq!(service_name(65000), "unknown");
767 }
768
769 #[test]
770 fn test_service_port() {
771 assert_eq!(service_port("http"), Some(80));
772 assert_eq!(service_port("https"), Some(443));
773 assert_eq!(service_port("ssh"), Some(22));
774 assert_eq!(service_port("mysql"), Some(3306));
775 assert_eq!(service_port("nonexistent"), None);
776 }
777
778 #[test]
779 fn test_port_categories() {
780 assert!(is_well_known_port(80));
781 assert!(is_well_known_port(443));
782 assert!(!is_well_known_port(8080));
783
784 assert!(!is_registered_port(80));
785 assert!(is_registered_port(8080));
786 assert!(is_registered_port(3306));
787 assert!(!is_registered_port(50000));
788
789 assert!(!is_dynamic_port(80));
790 assert!(!is_dynamic_port(8080));
791 assert!(is_dynamic_port(50000));
792 assert!(is_dynamic_port(65535));
793 }
794}