Skip to main content

stackforge_core/layer/tcp/
services.rs

1//! TCP services (port to name mapping).
2//!
3//! This module provides mappings between well-known TCP port numbers
4//! and their service names, similar to Scapy's TCP_SERVICES.
5
6use std::collections::HashMap;
7use std::sync::LazyLock;
8
9/// Well-known TCP services mapping (port -> name).
10pub static TCP_SERVICES: LazyLock<HashMap<u16, &'static str>> = LazyLock::new(|| {
11    let mut m = HashMap::new();
12
13    // System ports (0-1023)
14    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    // Common registered ports (1024-49151)
609    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
694/// Reverse mapping (name -> port).
695pub 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
702/// Get the service name for a port.
703///
704/// Returns "unknown" if the port is not in the database.
705pub fn service_name(port: u16) -> &'static str {
706    TCP_SERVICES.get(&port).copied().unwrap_or("unknown")
707}
708
709/// Get the port number for a service name.
710///
711/// Returns None if the service name is not found.
712pub fn service_port(name: &str) -> Option<u16> {
713    TCP_SERVICES_BY_NAME.get(name).copied()
714}
715
716/// Check if a port is a well-known port (< 1024).
717#[inline]
718pub fn is_well_known_port(port: u16) -> bool {
719    port < 1024
720}
721
722/// Check if a port is a registered port (1024-49151).
723#[inline]
724pub fn is_registered_port(port: u16) -> bool {
725    (1024..49152).contains(&port)
726}
727
728/// Check if a port is a dynamic/private port (49152-65535).
729#[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}