netdb.go (26949B)
1 // Package netdb provides a Go interface for the protoent and servent 2 // structures as defined in netdb.h 3 // 4 // A pure Go implementation is used by parsing /etc/protocols and 5 // /etc/services 6 // 7 // All return values are pointers that point to the entries in the 8 // original list of protocols and services. Manipulating the entries 9 // would affect the entire program. 10 package netdb // import "modernc.org/libc/honnef.co/go/netdb" 11 12 // Modifications Copyright 2020 The Libc Authors. All rights reserved. 13 // Use of this source code is governed by a BSD-style 14 // license that can be found in the LICENSE file. 15 16 import ( 17 "io/ioutil" 18 "os" 19 "strconv" 20 "strings" 21 ) 22 23 const ( 24 protocols = ` 25 # Internet (IP) protocols 26 # 27 # Updated from http://www.iana.org/assignments/protocol-numbers and other 28 # sources. 29 # New protocols will be added on request if they have been officially 30 # assigned by IANA and are not historical. 31 # If you need a huge list of used numbers please install the nmap package. 32 33 ip 0 IP # internet protocol, pseudo protocol number 34 hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883] 35 icmp 1 ICMP # internet control message protocol 36 igmp 2 IGMP # Internet Group Management 37 ggp 3 GGP # gateway-gateway protocol 38 ipencap 4 IP-ENCAP # IP encapsulated in IP (officially "IP") 39 st 5 ST # ST datagram mode 40 tcp 6 TCP # transmission control protocol 41 egp 8 EGP # exterior gateway protocol 42 igp 9 IGP # any private interior gateway (Cisco) 43 pup 12 PUP # PARC universal packet protocol 44 udp 17 UDP # user datagram protocol 45 hmp 20 HMP # host monitoring protocol 46 xns-idp 22 XNS-IDP # Xerox NS IDP 47 rdp 27 RDP # "reliable datagram" protocol 48 iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 [RFC905] 49 dccp 33 DCCP # Datagram Congestion Control Prot. [RFC4340] 50 xtp 36 XTP # Xpress Transfer Protocol 51 ddp 37 DDP # Datagram Delivery Protocol 52 idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport 53 ipv6 41 IPv6 # Internet Protocol, version 6 54 ipv6-route 43 IPv6-Route # Routing Header for IPv6 55 ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6 56 idrp 45 IDRP # Inter-Domain Routing Protocol 57 rsvp 46 RSVP # Reservation Protocol 58 gre 47 GRE # General Routing Encapsulation 59 esp 50 IPSEC-ESP # Encap Security Payload [RFC2406] 60 ah 51 IPSEC-AH # Authentication Header [RFC2402] 61 skip 57 SKIP # SKIP 62 ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6 63 ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6 64 ipv6-opts 60 IPv6-Opts # Destination Options for IPv6 65 rspf 73 RSPF CPHB # Radio Shortest Path First (officially CPHB) 66 vmtp 81 VMTP # Versatile Message Transport 67 eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco) 68 ospf 89 OSPFIGP # Open Shortest Path First IGP 69 ax.25 93 AX.25 # AX.25 frames 70 ipip 94 IPIP # IP-within-IP Encapsulation Protocol 71 etherip 97 ETHERIP # Ethernet-within-IP Encapsulation [RFC3378] 72 encap 98 ENCAP # Yet Another IP encapsulation [RFC1241] 73 # 99 # any private encryption scheme 74 pim 103 PIM # Protocol Independent Multicast 75 ipcomp 108 IPCOMP # IP Payload Compression Protocol 76 vrrp 112 VRRP # Virtual Router Redundancy Protocol [RFC5798] 77 l2tp 115 L2TP # Layer Two Tunneling Protocol [RFC2661] 78 isis 124 ISIS # IS-IS over IPv4 79 sctp 132 SCTP # Stream Control Transmission Protocol 80 fc 133 FC # Fibre Channel 81 mobility-header 135 Mobility-Header # Mobility Support for IPv6 [RFC3775] 82 udplite 136 UDPLite # UDP-Lite [RFC3828] 83 mpls-in-ip 137 MPLS-in-IP # MPLS-in-IP [RFC4023] 84 manet 138 # MANET Protocols [RFC5498] 85 hip 139 HIP # Host Identity Protocol 86 shim6 140 Shim6 # Shim6 Protocol [RFC5533] 87 wesp 141 WESP # Wrapped Encapsulating Security Payload 88 rohc 142 ROHC # Robust Header Compression 89 ` 90 91 services = ` 92 # Network services, Internet style 93 # 94 # Note that it is presently the policy of IANA to assign a single well-known 95 # port number for both TCP and UDP; hence, officially ports have two entries 96 # even if the protocol doesn't support UDP operations. 97 # 98 # Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml . 99 # 100 # New ports will be added on request if they have been officially assigned 101 # by IANA and used in the real-world or are needed by a debian package. 102 # If you need a huge list of used numbers please install the nmap package. 103 104 tcpmux 1/tcp # TCP port service multiplexer 105 echo 7/tcp 106 echo 7/udp 107 discard 9/tcp sink null 108 discard 9/udp sink null 109 systat 11/tcp users 110 daytime 13/tcp 111 daytime 13/udp 112 netstat 15/tcp 113 qotd 17/tcp quote 114 msp 18/tcp # message send protocol 115 msp 18/udp 116 chargen 19/tcp ttytst source 117 chargen 19/udp ttytst source 118 ftp-data 20/tcp 119 ftp 21/tcp 120 fsp 21/udp fspd 121 ssh 22/tcp # SSH Remote Login Protocol 122 telnet 23/tcp 123 smtp 25/tcp mail 124 time 37/tcp timserver 125 time 37/udp timserver 126 rlp 39/udp resource # resource location 127 nameserver 42/tcp name # IEN 116 128 whois 43/tcp nicname 129 tacacs 49/tcp # Login Host Protocol (TACACS) 130 tacacs 49/udp 131 domain 53/tcp # Domain Name Server 132 domain 53/udp 133 bootps 67/udp 134 bootpc 68/udp 135 tftp 69/udp 136 gopher 70/tcp # Internet Gopher 137 finger 79/tcp 138 http 80/tcp www # WorldWideWeb HTTP 139 link 87/tcp ttylink 140 kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5 141 kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5 142 iso-tsap 102/tcp tsap # part of ISODE 143 acr-nema 104/tcp dicom # Digital Imag. & Comm. 300 144 pop3 110/tcp pop-3 # POP version 3 145 sunrpc 111/tcp portmapper # RPC 4.0 portmapper 146 sunrpc 111/udp portmapper 147 auth 113/tcp authentication tap ident 148 sftp 115/tcp 149 nntp 119/tcp readnews untp # USENET News Transfer Protocol 150 ntp 123/udp # Network Time Protocol 151 epmap 135/tcp loc-srv # DCE endpoint resolution 152 epmap 135/udp loc-srv 153 netbios-ns 137/tcp # NETBIOS Name Service 154 netbios-ns 137/udp 155 netbios-dgm 138/tcp # NETBIOS Datagram Service 156 netbios-dgm 138/udp 157 netbios-ssn 139/tcp # NETBIOS session service 158 netbios-ssn 139/udp 159 imap2 143/tcp imap # Interim Mail Access P 2 and 4 160 snmp 161/tcp # Simple Net Mgmt Protocol 161 snmp 161/udp 162 snmp-trap 162/tcp snmptrap # Traps for SNMP 163 snmp-trap 162/udp snmptrap 164 cmip-man 163/tcp # ISO mgmt over IP (CMOT) 165 cmip-man 163/udp 166 cmip-agent 164/tcp 167 cmip-agent 164/udp 168 mailq 174/tcp # Mailer transport queue for Zmailer 169 mailq 174/udp 170 xdmcp 177/tcp # X Display Mgr. Control Proto 171 xdmcp 177/udp 172 nextstep 178/tcp NeXTStep NextStep # NeXTStep window 173 nextstep 178/udp NeXTStep NextStep # server 174 bgp 179/tcp # Border Gateway Protocol 175 irc 194/tcp # Internet Relay Chat 176 irc 194/udp 177 smux 199/tcp # SNMP Unix Multiplexer 178 smux 199/udp 179 at-rtmp 201/tcp # AppleTalk routing 180 at-rtmp 201/udp 181 at-nbp 202/tcp # AppleTalk name binding 182 at-nbp 202/udp 183 at-echo 204/tcp # AppleTalk echo 184 at-echo 204/udp 185 at-zis 206/tcp # AppleTalk zone information 186 at-zis 206/udp 187 qmtp 209/tcp # Quick Mail Transfer Protocol 188 qmtp 209/udp 189 z3950 210/tcp wais # NISO Z39.50 database 190 z3950 210/udp wais 191 ipx 213/tcp # IPX 192 ipx 213/udp 193 ptp-event 319/udp 194 ptp-general 320/udp 195 pawserv 345/tcp # Perf Analysis Workbench 196 pawserv 345/udp 197 zserv 346/tcp # Zebra server 198 zserv 346/udp 199 fatserv 347/tcp # Fatmen Server 200 fatserv 347/udp 201 rpc2portmap 369/tcp 202 rpc2portmap 369/udp # Coda portmapper 203 codaauth2 370/tcp 204 codaauth2 370/udp # Coda authentication server 205 clearcase 371/tcp Clearcase 206 clearcase 371/udp Clearcase 207 ulistserv 372/tcp # UNIX Listserv 208 ulistserv 372/udp 209 ldap 389/tcp # Lightweight Directory Access Protocol 210 ldap 389/udp 211 imsp 406/tcp # Interactive Mail Support Protocol 212 imsp 406/udp 213 svrloc 427/tcp # Server Location 214 svrloc 427/udp 215 https 443/tcp # http protocol over TLS/SSL 216 snpp 444/tcp # Simple Network Paging Protocol 217 snpp 444/udp 218 microsoft-ds 445/tcp # Microsoft Naked CIFS 219 microsoft-ds 445/udp 220 kpasswd 464/tcp 221 kpasswd 464/udp 222 submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314] 223 saft 487/tcp # Simple Asynchronous File Transfer 224 saft 487/udp 225 isakmp 500/tcp # IPsec - Internet Security Association 226 isakmp 500/udp # and Key Management Protocol 227 rtsp 554/tcp # Real Time Stream Control Protocol 228 rtsp 554/udp 229 nqs 607/tcp # Network Queuing system 230 nqs 607/udp 231 npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS 232 npmp-local 610/udp dqs313_qmaster 233 npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS 234 npmp-gui 611/udp dqs313_execd 235 hmmp-ind 612/tcp dqs313_intercell # HMMP Indication / DQS 236 hmmp-ind 612/udp dqs313_intercell 237 asf-rmcp 623/udp # ASF Remote Management and Control Protocol 238 qmqp 628/tcp 239 qmqp 628/udp 240 ipp 631/tcp # Internet Printing Protocol 241 ipp 631/udp 242 # 243 # UNIX specific services 244 # 245 exec 512/tcp 246 biff 512/udp comsat 247 login 513/tcp 248 who 513/udp whod 249 shell 514/tcp cmd # no passwords used 250 syslog 514/udp 251 printer 515/tcp spooler # line printer spooler 252 talk 517/udp 253 ntalk 518/udp 254 route 520/udp router routed # RIP 255 timed 525/udp timeserver 256 tempo 526/tcp newdate 257 courier 530/tcp rpc 258 conference 531/tcp chat 259 netnews 532/tcp readnews 260 netwall 533/udp # for emergency broadcasts 261 gdomap 538/tcp # GNUstep distributed objects 262 gdomap 538/udp 263 uucp 540/tcp uucpd # uucp daemon 264 klogin 543/tcp # Kerberized 'rlogin' (v5) 265 kshell 544/tcp krcmd # Kerberized 'rsh' (v5) 266 dhcpv6-client 546/tcp 267 dhcpv6-client 546/udp 268 dhcpv6-server 547/tcp 269 dhcpv6-server 547/udp 270 afpovertcp 548/tcp # AFP over TCP 271 afpovertcp 548/udp 272 idfp 549/tcp 273 idfp 549/udp 274 remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem 275 nntps 563/tcp snntp # NNTP over SSL 276 submission 587/tcp # Submission [RFC4409] 277 ldaps 636/tcp # LDAP over SSL 278 ldaps 636/udp 279 tinc 655/tcp # tinc control port 280 tinc 655/udp 281 silc 706/tcp 282 silc 706/udp 283 kerberos-adm 749/tcp # Kerberos 'kadmin' (v5) 284 # 285 webster 765/tcp # Network dictionary 286 webster 765/udp 287 domain-s 853/tcp # DNS over TLS [RFC7858] 288 domain-s 853/udp # DNS over DTLS [RFC8094] 289 rsync 873/tcp 290 ftps-data 989/tcp # FTP over SSL (data) 291 ftps 990/tcp 292 telnets 992/tcp # Telnet over SSL 293 imaps 993/tcp # IMAP over SSL 294 pop3s 995/tcp # POP-3 over SSL 295 # 296 # From "ssigned Numbers": 297 # 298 #> The Registered Ports are not controlled by the IANA and on most systems 299 #> can be used by ordinary user processes or programs executed by ordinary 300 #> users. 301 # 302 #> Ports are used in the TCP [45,106] to name the ends of logical 303 #> connections which carry long term conversations. For the purpose of 304 #> providing services to unknown callers, a service contact port is 305 #> defined. This list specifies the port used by the server process as its 306 #> contact port. While the IANA can not control uses of these ports it 307 #> does register or list uses of these ports as a convienence to the 308 #> community. 309 # 310 socks 1080/tcp # socks proxy server 311 socks 1080/udp 312 proofd 1093/tcp 313 proofd 1093/udp 314 rootd 1094/tcp 315 rootd 1094/udp 316 openvpn 1194/tcp 317 openvpn 1194/udp 318 rmiregistry 1099/tcp # Java RMI Registry 319 rmiregistry 1099/udp 320 kazaa 1214/tcp 321 kazaa 1214/udp 322 nessus 1241/tcp # Nessus vulnerability 323 nessus 1241/udp # assessment scanner 324 lotusnote 1352/tcp lotusnotes # Lotus Note 325 lotusnote 1352/udp lotusnotes 326 ms-sql-s 1433/tcp # Microsoft SQL Server 327 ms-sql-s 1433/udp 328 ms-sql-m 1434/tcp # Microsoft SQL Monitor 329 ms-sql-m 1434/udp 330 ingreslock 1524/tcp 331 ingreslock 1524/udp 332 datametrics 1645/tcp old-radius 333 datametrics 1645/udp old-radius 334 sa-msg-port 1646/tcp old-radacct 335 sa-msg-port 1646/udp old-radacct 336 kermit 1649/tcp 337 kermit 1649/udp 338 groupwise 1677/tcp 339 groupwise 1677/udp 340 l2f 1701/tcp l2tp 341 l2f 1701/udp l2tp 342 radius 1812/tcp 343 radius 1812/udp 344 radius-acct 1813/tcp radacct # Radius Accounting 345 radius-acct 1813/udp radacct 346 msnp 1863/tcp # MSN Messenger 347 msnp 1863/udp 348 unix-status 1957/tcp # remstats unix-status server 349 log-server 1958/tcp # remstats log server 350 remoteping 1959/tcp # remstats remoteping server 351 cisco-sccp 2000/tcp # Cisco SCCP 352 cisco-sccp 2000/udp 353 search 2010/tcp ndtp 354 pipe-server 2010/tcp pipe_server 355 nfs 2049/tcp # Network File System 356 nfs 2049/udp # Network File System 357 gnunet 2086/tcp 358 gnunet 2086/udp 359 rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99 360 rtcm-sc104 2101/udp 361 gsigatekeeper 2119/tcp 362 gsigatekeeper 2119/udp 363 gris 2135/tcp # Grid Resource Information Server 364 gris 2135/udp 365 cvspserver 2401/tcp # CVS client/server operations 366 cvspserver 2401/udp 367 venus 2430/tcp # codacon port 368 venus 2430/udp # Venus callback/wbc interface 369 venus-se 2431/tcp # tcp side effects 370 venus-se 2431/udp # udp sftp side effect 371 codasrv 2432/tcp # not used 372 codasrv 2432/udp # server port 373 codasrv-se 2433/tcp # tcp side effects 374 codasrv-se 2433/udp # udp sftp side effect 375 mon 2583/tcp # MON traps 376 mon 2583/udp 377 dict 2628/tcp # Dictionary server 378 dict 2628/udp 379 f5-globalsite 2792/tcp 380 f5-globalsite 2792/udp 381 gsiftp 2811/tcp 382 gsiftp 2811/udp 383 gpsd 2947/tcp 384 gpsd 2947/udp 385 gds-db 3050/tcp gds_db # InterBase server 386 gds-db 3050/udp gds_db 387 icpv2 3130/tcp icp # Internet Cache Protocol 388 icpv2 3130/udp icp 389 isns 3205/tcp # iSNS Server Port 390 isns 3205/udp # iSNS Server Port 391 iscsi-target 3260/tcp 392 mysql 3306/tcp 393 mysql 3306/udp 394 nut 3493/tcp # Network UPS Tools 395 nut 3493/udp 396 distcc 3632/tcp # distributed compiler 397 distcc 3632/udp 398 daap 3689/tcp # Digital Audio Access Protocol 399 daap 3689/udp 400 svn 3690/tcp subversion # Subversion protocol 401 svn 3690/udp subversion 402 suucp 4031/tcp # UUCP over SSL 403 suucp 4031/udp 404 sysrqd 4094/tcp # sysrq daemon 405 sysrqd 4094/udp 406 sieve 4190/tcp # ManageSieve Protocol 407 epmd 4369/tcp # Erlang Port Mapper Daemon 408 epmd 4369/udp 409 remctl 4373/tcp # Remote Authenticated Command Service 410 remctl 4373/udp 411 f5-iquery 4353/tcp # F5 iQuery 412 f5-iquery 4353/udp 413 ipsec-nat-t 4500/udp # IPsec NAT-Traversal [RFC3947] 414 iax 4569/tcp # Inter-Asterisk eXchange 415 iax 4569/udp 416 mtn 4691/tcp # monotone Netsync Protocol 417 mtn 4691/udp 418 radmin-port 4899/tcp # RAdmin Port 419 radmin-port 4899/udp 420 rfe 5002/udp # Radio Free Ethernet 421 rfe 5002/tcp 422 mmcc 5050/tcp # multimedia conference control tool (Yahoo IM) 423 mmcc 5050/udp 424 sip 5060/tcp # Session Initiation Protocol 425 sip 5060/udp 426 sip-tls 5061/tcp 427 sip-tls 5061/udp 428 aol 5190/tcp # AIM 429 aol 5190/udp 430 xmpp-client 5222/tcp jabber-client # Jabber Client Connection 431 xmpp-client 5222/udp jabber-client 432 xmpp-server 5269/tcp jabber-server # Jabber Server Connection 433 xmpp-server 5269/udp jabber-server 434 cfengine 5308/tcp 435 cfengine 5308/udp 436 mdns 5353/tcp # Multicast DNS 437 mdns 5353/udp 438 postgresql 5432/tcp postgres # PostgreSQL Database 439 postgresql 5432/udp postgres 440 freeciv 5556/tcp rptp # Freeciv gameplay 441 freeciv 5556/udp 442 amqps 5671/tcp # AMQP protocol over TLS/SSL 443 amqp 5672/tcp 444 amqp 5672/udp 445 amqp 5672/sctp 446 ggz 5688/tcp # GGZ Gaming Zone 447 ggz 5688/udp 448 x11 6000/tcp x11-0 # X Window System 449 x11 6000/udp x11-0 450 x11-1 6001/tcp 451 x11-1 6001/udp 452 x11-2 6002/tcp 453 x11-2 6002/udp 454 x11-3 6003/tcp 455 x11-3 6003/udp 456 x11-4 6004/tcp 457 x11-4 6004/udp 458 x11-5 6005/tcp 459 x11-5 6005/udp 460 x11-6 6006/tcp 461 x11-6 6006/udp 462 x11-7 6007/tcp 463 x11-7 6007/udp 464 gnutella-svc 6346/tcp # gnutella 465 gnutella-svc 6346/udp 466 gnutella-rtr 6347/tcp # gnutella 467 gnutella-rtr 6347/udp 468 sge-qmaster 6444/tcp sge_qmaster # Grid Engine Qmaster Service 469 sge-qmaster 6444/udp sge_qmaster 470 sge-execd 6445/tcp sge_execd # Grid Engine Execution Service 471 sge-execd 6445/udp sge_execd 472 mysql-proxy 6446/tcp # MySQL Proxy 473 mysql-proxy 6446/udp 474 babel 6696/udp # Babel Routing Protocol 475 ircs-u 6697/tcp # Internet Relay Chat via TLS/SSL 476 afs3-fileserver 7000/tcp bbs # file server itself 477 afs3-fileserver 7000/udp bbs 478 afs3-callback 7001/tcp # callbacks to cache managers 479 afs3-callback 7001/udp 480 afs3-prserver 7002/tcp # users & groups database 481 afs3-prserver 7002/udp 482 afs3-vlserver 7003/tcp # volume location database 483 afs3-vlserver 7003/udp 484 afs3-kaserver 7004/tcp # AFS/Kerberos authentication 485 afs3-kaserver 7004/udp 486 afs3-volser 7005/tcp # volume managment server 487 afs3-volser 7005/udp 488 afs3-errors 7006/tcp # error interpretation service 489 afs3-errors 7006/udp 490 afs3-bos 7007/tcp # basic overseer process 491 afs3-bos 7007/udp 492 afs3-update 7008/tcp # server-to-server updater 493 afs3-update 7008/udp 494 afs3-rmtsys 7009/tcp # remote cache manager service 495 afs3-rmtsys 7009/udp 496 font-service 7100/tcp xfs # X Font Service 497 font-service 7100/udp xfs 498 http-alt 8080/tcp webcache # WWW caching service 499 http-alt 8080/udp 500 puppet 8140/tcp # The Puppet master service 501 bacula-dir 9101/tcp # Bacula Director 502 bacula-dir 9101/udp 503 bacula-fd 9102/tcp # Bacula File Daemon 504 bacula-fd 9102/udp 505 bacula-sd 9103/tcp # Bacula Storage Daemon 506 bacula-sd 9103/udp 507 xmms2 9667/tcp # Cross-platform Music Multiplexing System 508 xmms2 9667/udp 509 nbd 10809/tcp # Linux Network Block Device 510 zabbix-agent 10050/tcp # Zabbix Agent 511 zabbix-agent 10050/udp 512 zabbix-trapper 10051/tcp # Zabbix Trapper 513 zabbix-trapper 10051/udp 514 amanda 10080/tcp # amanda backup services 515 amanda 10080/udp 516 dicom 11112/tcp 517 hkp 11371/tcp # OpenPGP HTTP Keyserver 518 hkp 11371/udp 519 bprd 13720/tcp # VERITAS NetBackup 520 bprd 13720/udp 521 bpdbm 13721/tcp # VERITAS NetBackup 522 bpdbm 13721/udp 523 bpjava-msvc 13722/tcp # BP Java MSVC Protocol 524 bpjava-msvc 13722/udp 525 vnetd 13724/tcp # Veritas Network Utility 526 vnetd 13724/udp 527 bpcd 13782/tcp # VERITAS NetBackup 528 bpcd 13782/udp 529 vopied 13783/tcp # VERITAS NetBackup 530 vopied 13783/udp 531 db-lsp 17500/tcp # Dropbox LanSync Protocol 532 dcap 22125/tcp # dCache Access Protocol 533 gsidcap 22128/tcp # GSI dCache Access Protocol 534 wnn6 22273/tcp # wnn6 535 wnn6 22273/udp 536 537 # 538 # Datagram Delivery Protocol services 539 # 540 rtmp 1/ddp # Routing Table Maintenance Protocol 541 nbp 2/ddp # Name Binding Protocol 542 echo 4/ddp # AppleTalk Echo Protocol 543 zip 6/ddp # Zone Information Protocol 544 545 #========================================================================= 546 # The remaining port numbers are not as allocated by IANA. 547 #========================================================================= 548 549 # Kerberos (Project Athena/MIT) services 550 # Note that these are for Kerberos v4, and are unofficial. Sites running 551 # v4 should uncomment these and comment out the v5 entries above. 552 # 553 kerberos4 750/udp kerberos-iv kdc # Kerberos (server) 554 kerberos4 750/tcp kerberos-iv kdc 555 kerberos-master 751/udp kerberos_master # Kerberos authentication 556 kerberos-master 751/tcp 557 passwd-server 752/udp passwd_server # Kerberos passwd server 558 krb-prop 754/tcp krb_prop krb5_prop hprop # Kerberos slave propagation 559 krbupdate 760/tcp kreg # Kerberos registration 560 swat 901/tcp # swat 561 kpop 1109/tcp # Pop with Kerberos 562 knetd 2053/tcp # Kerberos de-multiplexor 563 zephyr-srv 2102/udp # Zephyr server 564 zephyr-clt 2103/udp # Zephyr serv-hm connection 565 zephyr-hm 2104/udp # Zephyr hostmanager 566 eklogin 2105/tcp # Kerberos encrypted rlogin 567 # Hmmm. Are we using Kv4 or Kv5 now? Worrying. 568 # The following is probably Kerberos v5 --- ajt@debian.org (11/02/2000) 569 kx 2111/tcp # X over Kerberos 570 iprop 2121/tcp # incremental propagation 571 # 572 # Unofficial but necessary (for NetBSD) services 573 # 574 supfilesrv 871/tcp # SUP server 575 supfiledbg 1127/tcp # SUP debugging 576 577 # 578 # Services added for the Debian GNU/Linux distribution 579 # 580 poppassd 106/tcp # Eudora 581 poppassd 106/udp 582 moira-db 775/tcp moira_db # Moira database 583 moira-update 777/tcp moira_update # Moira update protocol 584 moira-ureg 779/udp moira_ureg # Moira user registration 585 spamd 783/tcp # spamassassin daemon 586 omirr 808/tcp omirrd # online mirror 587 omirr 808/udp omirrd 588 customs 1001/tcp # pmake customs server 589 customs 1001/udp 590 skkserv 1178/tcp # skk jisho server port 591 predict 1210/udp # predict -- satellite tracking 592 rmtcfg 1236/tcp # Gracilis Packeten remote config server 593 wipld 1300/tcp # Wipl network monitor 594 xtel 1313/tcp # french minitel 595 xtelw 1314/tcp # french minitel 596 support 1529/tcp # GNATS 597 cfinger 2003/tcp # GNU Finger 598 frox 2121/tcp # frox: caching ftp proxy 599 ninstall 2150/tcp # ninstall service 600 ninstall 2150/udp 601 zebrasrv 2600/tcp # zebra service 602 zebra 2601/tcp # zebra vty 603 ripd 2602/tcp # ripd vty (zebra) 604 ripngd 2603/tcp # ripngd vty (zebra) 605 ospfd 2604/tcp # ospfd vty (zebra) 606 bgpd 2605/tcp # bgpd vty (zebra) 607 ospf6d 2606/tcp # ospf6d vty (zebra) 608 ospfapi 2607/tcp # OSPF-API 609 isisd 2608/tcp # ISISd vty (zebra) 610 afbackup 2988/tcp # Afbackup system 611 afbackup 2988/udp 612 afmbackup 2989/tcp # Afmbackup system 613 afmbackup 2989/udp 614 xtell 4224/tcp # xtell server 615 fax 4557/tcp # FAX transmission service (old) 616 hylafax 4559/tcp # HylaFAX client-server protocol (new) 617 distmp3 4600/tcp # distmp3host daemon 618 munin 4949/tcp lrrd # Munin 619 enbd-cstatd 5051/tcp # ENBD client statd 620 enbd-sstatd 5052/tcp # ENBD server statd 621 pcrd 5151/tcp # PCR-1000 Daemon 622 noclog 5354/tcp # noclogd with TCP (nocol) 623 noclog 5354/udp # noclogd with UDP (nocol) 624 hostmon 5355/tcp # hostmon uses TCP (nocol) 625 hostmon 5355/udp # hostmon uses UDP (nocol) 626 rplay 5555/udp # RPlay audio service 627 nrpe 5666/tcp # Nagios Remote Plugin Executor 628 nsca 5667/tcp # Nagios Agent - NSCA 629 mrtd 5674/tcp # MRT Routing Daemon 630 bgpsim 5675/tcp # MRT Routing Simulator 631 canna 5680/tcp # cannaserver 632 syslog-tls 6514/tcp # Syslog over TLS [RFC5425] 633 sane-port 6566/tcp sane saned # SANE network scanner daemon 634 ircd 6667/tcp # Internet Relay Chat 635 zope-ftp 8021/tcp # zope management by ftp 636 tproxy 8081/tcp # Transparent Proxy 637 omniorb 8088/tcp # OmniORB 638 omniorb 8088/udp 639 clc-build-daemon 8990/tcp # Common lisp build daemon 640 xinetd 9098/tcp 641 mandelspawn 9359/udp mandelbrot # network mandelbrot 642 git 9418/tcp # Git Version Control System 643 zope 9673/tcp # zope server 644 webmin 10000/tcp 645 kamanda 10081/tcp # amanda backup services (Kerberos) 646 kamanda 10081/udp 647 amandaidx 10082/tcp # amanda backup services 648 amidxtape 10083/tcp # amanda backup services 649 smsqp 11201/tcp # Alamin SMS gateway 650 smsqp 11201/udp 651 xpilot 15345/tcp # XPilot Contact Port 652 xpilot 15345/udp 653 sgi-cmsd 17001/udp # Cluster membership services daemon 654 sgi-crsd 17002/udp 655 sgi-gcd 17003/udp # SGI Group membership daemon 656 sgi-cad 17004/tcp # Cluster Admin daemon 657 isdnlog 20011/tcp # isdn logging system 658 isdnlog 20011/udp 659 vboxd 20012/tcp # voice box system 660 vboxd 20012/udp 661 binkp 24554/tcp # binkp fidonet protocol 662 asp 27374/tcp # Address Search Protocol 663 asp 27374/udp 664 csync2 30865/tcp # cluster synchronization tool 665 dircproxy 57000/tcp # Detachable IRC Proxy 666 tfido 60177/tcp # fidonet EMSI over telnet 667 fido 60179/tcp # fidonet EMSI over TCP 668 669 # Local services 670 ` 671 ) 672 673 type Protoent struct { 674 Name string 675 Aliases []string 676 Number int 677 } 678 679 type Servent struct { 680 Name string 681 Aliases []string 682 Port int 683 Protocol *Protoent 684 } 685 686 // These variables get populated from /etc/protocols and /etc/services 687 // respectively. 688 var ( 689 Protocols []*Protoent 690 Services []*Servent 691 ) 692 693 func init() { 694 protoMap := make(map[string]*Protoent) 695 696 // Load protocols 697 data, err := ioutil.ReadFile("/etc/protocols") 698 if err != nil { 699 if !os.IsNotExist(err) { 700 panic(err) 701 } 702 703 data = []byte(protocols) 704 } 705 706 for _, line := range strings.Split(string(data), "\n") { 707 line = strings.TrimSpace(line) 708 split := strings.SplitN(line, "#", 2) 709 fields := strings.Fields(split[0]) 710 if len(fields) < 2 { 711 continue 712 } 713 714 num, err := strconv.ParseInt(fields[1], 10, 32) 715 if err != nil { 716 // If we find lines that don't match the expected format we skip over them. 717 // The expected format is <protocol> <number> <aliases> ... 718 // As we're using strings.Fields for splitting the line, failures can happen if the protocol field contains white spaces. 719 continue 720 } 721 722 protoent := &Protoent{ 723 Name: fields[0], 724 Aliases: fields[2:], 725 Number: int(num), 726 } 727 Protocols = append(Protocols, protoent) 728 729 protoMap[fields[0]] = protoent 730 } 731 732 // Load services 733 data, err = ioutil.ReadFile("/etc/services") 734 if err != nil { 735 if !os.IsNotExist(err) { 736 panic(err) 737 } 738 739 data = []byte(services) 740 } 741 742 for _, line := range strings.Split(string(data), "\n") { 743 line = strings.TrimSpace(line) 744 split := strings.SplitN(line, "#", 2) 745 fields := strings.Fields(split[0]) 746 if len(fields) < 2 { 747 continue 748 } 749 750 // https://gitlab.com/cznic/libc/-/issues/25 751 if strings.Index(fields[1], "/") < 0 { 752 continue 753 } 754 755 name := fields[0] 756 portproto := strings.SplitN(fields[1], "/", 2) 757 port, err := strconv.ParseInt(portproto[0], 10, 32) 758 if err != nil { 759 // If we find lines that don't match the expected format we skip over them. 760 // The expected format is <service-name> <port>/<protocol> [aliases ...] 761 // As we're using strings.Fields for splitting the line, failures can happen if the service name field contains white spaces. 762 continue 763 } 764 765 proto := portproto[1] 766 aliases := fields[2:] 767 768 Services = append(Services, &Servent{ 769 Name: name, 770 Aliases: aliases, 771 Port: int(port), 772 Protocol: protoMap[proto], 773 }) 774 } 775 } 776 777 // Equal checks if two Protoents are the same, which is the case if 778 // their protocol numbers are identical or when both Protoents are 779 // nil. 780 func (this *Protoent) Equal(other *Protoent) bool { 781 if this == nil && other == nil { 782 return true 783 } 784 785 if this == nil || other == nil { 786 return false 787 } 788 789 return this.Number == other.Number 790 } 791 792 // Equal checks if two Servents are the same, which is the case if 793 // their port numbers and protocols are identical or when both 794 // Servents are nil. 795 func (this *Servent) Equal(other *Servent) bool { 796 if this == nil && other == nil { 797 return true 798 } 799 800 if this == nil || other == nil { 801 return false 802 } 803 804 return this.Port == other.Port && 805 this.Protocol.Equal(other.Protocol) 806 } 807 808 // GetProtoByNumber returns the Protoent for a given protocol number. 809 func GetProtoByNumber(num int) (protoent *Protoent) { 810 for _, protoent := range Protocols { 811 if protoent.Number == num { 812 return protoent 813 } 814 } 815 return nil 816 } 817 818 // GetProtoByName returns the Protoent whose name or any of its 819 // aliases matches the argument. 820 func GetProtoByName(name string) (protoent *Protoent) { 821 for _, protoent := range Protocols { 822 if protoent.Name == name { 823 return protoent 824 } 825 826 for _, alias := range protoent.Aliases { 827 if alias == name { 828 return protoent 829 } 830 } 831 } 832 833 return nil 834 } 835 836 // GetServByName returns the Servent for a given service name or alias 837 // and protocol. If the protocol is nil, the first service matching 838 // the service name is returned. 839 func GetServByName(name string, protocol *Protoent) (servent *Servent) { 840 for _, servent := range Services { 841 if !servent.Protocol.Equal(protocol) { 842 continue 843 } 844 845 if servent.Name == name { 846 return servent 847 } 848 849 for _, alias := range servent.Aliases { 850 if alias == name { 851 return servent 852 } 853 } 854 } 855 856 return nil 857 } 858 859 // GetServByPort returns the Servent for a given port number and 860 // protocol. If the protocol is nil, the first service matching the 861 // port number is returned. 862 func GetServByPort(port int, protocol *Protoent) *Servent { 863 for _, servent := range Services { 864 if servent.Port == port && servent.Protocol.Equal(protocol) { 865 return servent 866 } 867 } 868 869 return nil 870 }