1.\" Copyright (c) 1985, 1991, 1993, 1994 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" from: @(#)inetd.8 8.3 (Berkeley) 4/13/94 33.\" $FreeBSD$ 34.\" 35.Dd February 7, 1996 36.Dt INETD 8 37.Os 38.Sh NAME 39.Nm inetd 40.Nd internet 41.Dq super-server 42.Sh SYNOPSIS 43.Nm 44.Op Fl d 45.Op Fl l 46.Op Fl w 47.Op Fl W 48.Op Fl c Ar maximum 49.Op Fl C Ar rate 50.Op Fl a Ar address | hostname 51.Op Fl p Ar filename 52.Op Fl R Ar rate 53.Op Fl s Ar maximum 54.Op Ar configuration file 55.Sh DESCRIPTION 56The 57.Nm 58utility should be run at boot time by 59.Pa /etc/rc 60(see 61.Xr rc 8 ) . 62It then listens for connections on certain 63internet sockets. 64When a connection is found on one 65of its sockets, it decides what service the socket 66corresponds to, and invokes a program to service the request. 67The server program is invoked with the service socket 68as its standard input, output and error descriptors. 69After the program is 70finished, 71.Nm 72continues to listen on the socket (except in some cases which 73will be described below). 74Essentially, 75.Nm 76allows running one daemon to invoke several others, 77reducing load on the system. 78.Pp 79The following options are available: 80.Bl -tag -width indent 81.It Fl d 82Turn on debugging. 83.It Fl l 84Turn on logging of successful connections. 85.It Fl w 86Turn on TCP Wrapping for external services. 87See the 88.Sx "IMPLEMENTATION NOTES" 89section for more information on TCP Wrappers support. 90.It Fl W 91Turn on TCP Wrapping for internal services which are built in to 92.Nm . 93.It Fl c Ar maximum 94Specify the default maximum number of 95simultaneous invocations of each service; 96the default is unlimited. 97May be overridden on a per-service basis with the "max-child" 98parameter. 99.It Fl C Ar rate 100Specify the default maximum number of times a service can be invoked 101from a single IP address in one minute; the default is unlimited. 102May be overridden on a per-service basis with the 103"max-connections-per-ip-per-minute" parameter. 104.It Fl R Ar rate 105Specify the maximum number of times a service can be invoked 106in one minute; the default is 256. 107A rate of 0 allows an unlimited number of invocations. 108.It Fl s Ar maximum 109Specify the default maximum number of 110simultaneous invocations of each service from a single IP address; 111the default is unlimited. 112May be overridden on a per-service basis with the "max-child-per-ip" 113parameter. 114.It Fl a 115Specify one specific IP address to bind to. 116Alternatively, a hostname can be specified, 117in which case the IPv4 or IPv6 address 118which corresponds to that hostname is used. 119Usually a hostname is specified when 120.Nm 121is run inside a 122.Xr jail 8 , 123in which case the hostname corresponds to the 124.Xr jail 8 125environment. 126.Pp 127When hostname specification is used 128and both IPv4 and IPv6 bindings are desired, 129one entry with the appropriate 130.Em protocol 131type for each binding 132is required for each service in 133.Pa /etc/inetd.conf . 134For example, 135a TCP-based service would need two entries, 136one using 137.Dq tcp4 138for the 139.Em protocol 140and the other using 141.Dq tcp6 . 142See the explanation of the 143.Pa /etc/inetd.conf 144.Em protocol 145field below. 146.It Fl p 147Specify an alternate file in which to store the process ID. 148.El 149.Pp 150Upon execution, 151.Nm 152reads its configuration information from a configuration 153file which, by default, is 154.Pa /etc/inetd.conf . 155There must be an entry for each field of the configuration 156file, with entries for each field separated by a tab or 157a space. 158Comments are denoted by a 159.Dq # 160at the beginning 161of a line. 162There must be an entry for each field. 163The 164fields of the configuration file are as follows: 165.Pp 166.Bd -unfilled -offset indent -compact 167service name 168socket type 169protocol 170{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] 171user[:group][/login-class] 172server program 173server program arguments 174.Ed 175.Pp 176To specify an 177.Tn "ONC RPC" Ns -based 178service, the entry would contain these fields: 179.Pp 180.Bd -unfilled -offset indent -compact 181service name/version 182socket type 183rpc/protocol 184user[:group][/login-class] 185server program 186server program arguments 187.Ed 188.Pp 189There are two types of services that 190.Nm 191can start: standard and TCPMUX. 192A standard service has a well-known port assigned to it; 193it may be a service that implements an official Internet standard or is a 194.Bx Ns -specific 195service. 196As described in 197.Tn RFC 1078 , 198TCPMUX services are nonstandard services that do not have a 199well-known port assigned to them. 200They are invoked from 201.Nm 202when a program connects to the 203.Dq tcpmux 204well-known port and specifies 205the service name. 206This feature is useful for adding locally-developed servers. 207TCPMUX requests are only accepted when the multiplexor service itself 208is enabled, above and beyond and specific TCPMUX-based servers; see the 209discussion of internal services below. 210.Pp 211The 212.Em service-name 213entry is the name of a valid service in 214the file 215.Pa /etc/services , 216or the specification of a 217.Ux 218domain socket (see below). 219For 220.Dq internal 221services (discussed below), the service 222name 223should 224be the official name of the service (that is, the first entry in 225.Pa /etc/services ) . 226When used to specify an 227.Tn "ONC RPC" Ns -based 228service, this field is a valid RPC service name in 229the file 230.Pa /etc/rpc . 231The part on the right of the 232.Dq / 233is the RPC version number. 234This 235can simply be a single numeric argument or a range of versions. 236A range is bounded by the low version to the high version - 237.Dq rusers/1-3 . 238For TCPMUX services, the value of the 239.Em service-name 240field consists of the string 241.Dq tcpmux 242followed by a slash and the 243locally-chosen service name. 244The service names listed in 245.Pa /etc/services 246and the name 247.Dq help 248are reserved. 249Try to choose unique names for your TCPMUX services by prefixing them with 250your organization's name and suffixing them with a version number. 251.Pp 252The 253.Em socket-type 254should be one of 255.Dq stream , 256.Dq dgram , 257.Dq raw , 258.Dq rdm , 259or 260.Dq seqpacket , 261depending on whether the socket is a stream, datagram, raw, 262reliably delivered message, or sequenced packet socket. 263TCPMUX services must use 264.Dq stream . 265.Pp 266The 267.Em protocol 268must be a valid protocol or 269.Dq unix . 270Examples are 271.Dq tcp 272or 273.Dq udp , 274both of which imply IPv4 for backward compatibility. 275The names 276.Dq tcp4 277and 278.Dq udp4 279specify IPv4 only. 280The names 281.Dq tcp6 282and 283.Dq udp6 284specify IPv6 only. 285The names 286.Dq tcp46 287and 288.Dq udp46 289specify that the entry accepts both IPv4 and IPv6 connections 290via a wildcard 291.Dv AF_INET6 292socket. 293If it is desired that the service is reachable via T/TCP, one should 294specify 295.Dq tcp/ttcp , 296which implies IPv4 for backward compatibility. 297The name 298.Dq tcp4/ttcp 299specifies IPv4 only, while 300.Dq tcp6/ttcp 301specifies IPv6 only. 302The name 303.Dq tcp46/ttcp 304specify that the entry accepts both IPv6 and IPv6 connections 305via a wildcard 306.Dv AF_INET6 307socket. 308Rpc based services 309are specified with the 310.Dq rpc/tcp 311or 312.Dq rpc/udp 313service type. 314One can use specify IPv4 and/or IPv6 with the 4, 6 or 46 suffix, for example 315.Dq rpc/tcp6 316or 317.Dq rpc/udp46 . 318TCPMUX services must use 319.Dq tcp , 320.Dq tcp4 , 321.Dq tcp6 322or 323.Dq tcp46 . 324.Pp 325The 326.Em wait/nowait 327entry specifies whether the server that is invoked by 328.Nm 329will take over 330the socket associated with the service access point, and thus whether 331.Nm 332should wait for the server to exit before listening for new service 333requests. 334Datagram servers must use 335.Dq wait , 336as they are always invoked with the original datagram socket bound 337to the specified service address. 338These servers must read at least one datagram from the socket 339before exiting. 340If a datagram server connects 341to its peer, freeing the socket so 342.Nm 343can receive further messages on the socket, it is said to be 344a 345.Dq multi-threaded 346server; 347it should read one datagram from the socket and create a new socket 348connected to the peer. 349It should fork, and the parent should then exit 350to allow 351.Nm 352to check for new service requests to spawn new servers. 353Datagram servers which process all incoming datagrams 354on a socket and eventually time out are said to be 355.Dq single-threaded . 356The 357.Xr comsat 8 , 358.Pq Xr biff 1 359and 360.Xr talkd 8 361utilities are both examples of the latter type of 362datagram server. 363The 364.Xr tftpd 8 365utility is an example of a multi-threaded datagram server. 366.Pp 367Servers using stream sockets generally are multi-threaded and 368use the 369.Dq nowait 370entry. 371Connection requests for these services are accepted by 372.Nm , 373and the server is given only the newly-accepted socket connected 374to a client of the service. 375Most stream-based services operate in this manner. 376Stream-based servers that use 377.Dq wait 378are started with the listening service socket, and must accept 379at least one connection request before exiting. 380Such a server would normally accept and process incoming connection 381requests until a timeout. 382TCPMUX services must use 383.Dq nowait . 384.Pp 385The maximum number of outstanding child processes (or 386.Dq threads ) 387for a 388.Dq nowait 389service may be explicitly specified by appending a 390.Dq / 391followed by the number to the 392.Dq nowait 393keyword. 394Normally 395(or if a value of zero is specified) there is no maximum. 396Otherwise, 397once the maximum is reached, further connection attempts will be 398queued up until an existing child process exits. 399This also works 400in the case of 401.Dq wait 402mode, although a value other than one (the 403default) might not make sense in some cases. 404You can also specify the maximum number of connections per minute 405for a given IP address by appending 406a 407.Dq / 408followed by the number to the maximum number of 409outstanding child processes. 410Once the maximum is reached, further 411connections from this IP address will be dropped until the end of the 412minute. 413In addition, you can specify the maximum number of simultaneous 414invocations of each service from a single IP address by appending a 415.Dq / 416followed by the number to the maximum number of outstanding child 417processes. 418Once the maximum is reached, further connections from this 419IP address will be dropped. 420.Pp 421The 422.Em user 423entry should contain the user name of the user as whom the server 424should run. 425This allows for servers to be given less permission 426than root. 427Optional 428.Em group 429part separated by 430.Dq \&: 431allows to specify group name different 432than default group for this user. 433Optional 434.Em login-class 435part separated by 436.Dq / 437allows to specify login class different 438than default 439.Dq daemon 440login class. 441.Pp 442The 443.Em server-program 444entry should contain the pathname of the program which is to be 445executed by 446.Nm 447when a request is found on its socket. 448If 449.Nm 450provides this service internally, this entry should 451be 452.Dq internal . 453.Pp 454The 455.Em server program arguments 456should be just as arguments 457normally are, starting with argv[0], which is the name of 458the program. 459If the service is provided internally, the 460.Em service-name 461of the service (and any arguments to it) or the word 462.Dq internal 463should take the place of this entry. 464.Pp 465Currently, the only internal service to take arguments is 466.Dq auth . 467Without options, the service will always return 468.Dq ERROR\ : HIDDEN-USER . 469The available arguments to this service that alter its behavior are: 470.Bl -tag -width indent 471.It Fl d Ar fallback 472Provide a 473.Ar fallback 474username. 475If the real 476.Dq auth 477service is enabled 478(with the 479.Fl r 480option discussed below), 481return this username instead of an error 482when lookups fail 483for either socket credentials or the username. 484If the real 485.Dq auth 486service is disabled, 487return this username for every request. 488This is primarily useful when running this service on a NAT machine. 489.It Fl g 490Instead of returning 491the user's name to the ident requester, 492report a 493username made up of random alphanumeric characters, 494e.g.\& 495.Dq c0c993 . 496The 497.Fl g 498flag overrides not only the user names, 499but also any fallback name, 500.Pa .fakeid 501or 502.Pa .noident 503files. 504.It Fl t Xo 505.Ar sec Ns Op . Ns Ar usec 506.Xc 507Specify a timeout for the service. 508The default timeout is 10.0 seconds. 509.It Fl r 510Offer a real 511.Dq auth 512service, as per RFC 1413. 513All the remaining flags apply only in this case. 514.It Fl i 515Return numeric user IDs instead of usernames. 516.It Fl f 517If the file 518.Pa .fakeid 519exists in the home directory of the identified user, report the username 520found in that file instead of the real username. 521If the username found in 522.Pa .fakeid 523is that of an existing user, 524then the real username is reported. 525If the 526.Fl i 527flag is also given then the username in 528.Pa .fakeid 529is checked against existing user IDs instead. 530.It Fl F 531same as 532.Fl f 533but without the restriction that the username in 534.Pa .fakeid 535must not match an existing user. 536.It Fl n 537If the file 538.Pa .noident 539exists in the home directory of the identified user, return 540.Dq ERROR\ : HIDDEN-USER . 541This overrides any 542.Pa fakeid 543file which might exist. 544.It Fl o Ar osname 545Use 546.Ar osname 547instead of the name of the system as reported by 548.Xr uname 3 . 549.El 550.Pp 551The 552.Nm 553utility also provides several other 554.Dq trivial 555services internally by use of 556routines within itself. 557These services are 558.Dq echo , 559.Dq discard , 560.Dq chargen 561(character generator), 562.Dq daytime 563(human readable time), and 564.Dq time 565(machine readable time, in the form of the number of seconds since 566midnight, January 1, 1900). 567All of these services are available in 568both TCP and UDP versions; the UDP versions will refuse service if the 569request specifies a reply port corresponding to any internal service. 570(This is done as a defense against looping attacks; the remote IP address 571is logged.) 572For details of these services, consult the 573appropriate 574.Tn RFC 575document. 576.Pp 577The TCPMUX-demultiplexing service is also implemented as an internal service. 578For any TCPMUX-based service to function, the following line must be included 579in 580.Pa inetd.conf : 581.Bd -literal -offset indent 582tcpmux stream tcp nowait root internal 583.Ed 584.Pp 585When given the 586.Fl l 587option 588.Nm 589will log an entry to syslog each time a connection is accepted, noting the 590service selected and the IP-number of the remote requester if available. 591Unless otherwise specified in the configuration file, 592and in the absence of the 593.Fl W 594and 595.Fl w 596options, 597.Nm 598will log to the 599.Dq daemon 600facility. 601.Pp 602The 603.Nm 604utility rereads its configuration file when it receives a hangup signal, 605.Dv SIGHUP . 606Services may be added, deleted or modified when the configuration file 607is reread. 608Except when started in debugging mode, 609.Nm 610records its process ID in the file 611.Pa /var/run/inetd.pid 612to assist in reconfiguration. 613.Sh IMPLEMENTATION NOTES 614.Ss TCP Wrappers 615When given the 616.Fl w 617option, 618.Nm 619will wrap all services specified as 620.Dq stream nowait 621or 622.Dq dgram 623except for 624.Dq internal 625services. 626If the 627.Fl W 628option is given, such 629.Dq internal 630services will be wrapped. 631If both options are given, wrapping for both 632internal and external services will be enabled. 633Either wrapping option 634will cause failed connections to be logged to the 635.Dq auth 636syslog facility. 637Adding the 638.Fl l 639flag to the wrapping options will include successful connections in the 640logging to the 641.Dq auth 642facility. 643.Pp 644Note that 645.Nm 646only wraps requests for a 647.Dq wait 648service while no servers are available to service requests. 649Once a 650connection to such a service has been allowed, 651.Nm 652has no control 653over subsequent connections to the service until no more servers 654are left listening for connection requests. 655.Pp 656When wrapping is enabled, the 657.Pa tcpd 658daemon is not required, as that functionality is builtin. 659For more information on TCP Wrappers, see the relevant documentation 660.Pq Xr hosts_access 5 . 661When reading that document, keep in mind that 662.Dq internal 663services have no associated daemon name. 664Therefore, the service name 665as specified in 666.Pa inetd.conf 667should be used as the daemon name for 668.Dq internal 669services. 670.Ss TCPMUX 671.Tn RFC 1078 672describes the TCPMUX protocol: 673``A TCP client connects to a foreign host on TCP port 1. 674It sends the 675service name followed by a carriage-return line-feed <CRLF>. 676The 677service name is never case sensitive. 678The server replies with a 679single character indicating positive (+) or negative (\-) 680acknowledgment, immediately followed by an optional message of 681explanation, terminated with a <CRLF>. 682If the reply was positive, 683the selected protocol begins; otherwise the connection is closed.'' 684The program is passed the TCP connection as file descriptors 0 and 1. 685.Pp 686If the TCPMUX service name begins with a 687.Dq + , 688.Nm 689returns the positive reply for the program. 690This allows you to invoke programs that use stdin/stdout 691without putting any special server code in them. 692.Pp 693The special service name 694.Dq help 695causes 696.Nm 697to list TCPMUX services in 698.Pa inetd.conf . 699.Ss IPsec 700The implementation includes a tiny hack 701to support IPsec policy settings for each socket. 702A special form of comment line, starting with 703.Dq Li #@ , 704is interpreted as a policy specifier. 705Everything after the 706.Dq Li #@ 707will be used as an IPsec policy string, 708as described in 709.Xr ipsec_set_policy 3 . 710Each 711policy specifier is applied to all the following lines in 712.Pa inetd.conf 713until the next policy specifier. 714An empty policy specifier resets the IPsec policy. 715.Pp 716If an invalid IPsec policy specifier appears in 717.Pa inetd.conf , 718.Nm 719will provide an error message via the 720.Xr syslog 3 721interface and abort execution. 722.Ss Ux Domain Sockets 723In addition to running services on IP sockets, 724.Nm 725can also manage 726.Ux 727domain sockets. 728To do this you specify a 729.Em protocol 730of 731.Dq unix 732and specify the 733.Ux 734domain socket as the 735.Em service-name . 736The 737.Em service-type 738may be 739.Dq stream 740or 741.Dq dgram . 742The specification of the socket must be 743an absolute path name, 744optionally prefixed by an owner and mode 745of the form 746.Em :user:group:mode: . 747The specification: 748.Pp 749.Dl ":news:daemon:220:/var/run/sock" 750.Pp 751creates a socket owned 752by user 753.Dq news 754in group 755.Dq daemon 756with permissions allowing only that user and group to connect. 757The default owner is the user that 758.Nm 759is running as. 760The default mode only allows the socket's owner to connect. 761.Pp 762.Sy WARNING : 763while creating 764.Ux 765domain socket, 766.Nm 767must change the ownership and permissions on the socket. 768This can only be done securely if 769the directory in which the socket is created 770is writable only by root. 771Do 772.Em NOT 773use 774.Nm 775to create sockets in world writable directories, 776such as 777.Pa /tmp , 778instead use 779.Pa /var/run 780or a similar directory. 781.Pp 782Internal services may be run on 783.Ux 784domain sockets, in the usual way. 785In this case 786the name of the internal service 787is determined using 788the last component of the socket's pathname. 789.Sh "FILES" 790.Bl -tag -width /var/run/inetd.pid -compact 791.It Pa /etc/inetd.conf 792configuration file 793.It Pa /etc/rpc 794translation of service names to RPC program numbers 795.It Pa /etc/services 796translation of service names to port numbers 797.It Pa /var/run/inetd.pid 798the pid of the currently running 799.Nm 800.El 801.Sh "EXAMPLES" 802Here are several example service entries for the various types of services: 803.Bd -literal 804ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l 805ntalk dgram udp wait root /usr/libexec/ntalkd ntalkd 806telnet stream tcp6 nowait root /usr/libexec/telnetd telnetd 807shell stream tcp46 nowait root /usr/libexec/rshd rshd 808tcpmux/+date stream tcp nowait guest /bin/date date 809tcpmux/phonebook stream tcp nowait guest /usr/local/bin/phonebook phonebook 810rstatd/1-3 dgram rpc/udp wait root /usr/libexec/rpc.rstatd rpc.rstatd 811/var/run/echo stream unix nowait root internal 812#@ ipsec ah/require 813chargen stream tcp nowait root internal 814#@ 815.Ed 816.Sh "ERROR MESSAGES" 817The 818.Nm 819server 820logs error messages using 821.Xr syslog 3 . 822Important error messages and their explanations are: 823.Pp 824.Bl -ohang -compact 825.It Xo 826.Ar service Ns / Ns Ar protocol 827.No "server failing (looping), service terminated." 828.Xc 829The number of requests for the specified service in the past minute 830exceeded the limit. 831The limit exists to prevent a broken program 832or a malicious user from swamping the system. 833This message may occur for several reasons: 834.Bl -enum -offset indent 835.It 836There are many hosts requesting the service within a short time period. 837.It 838A broken client program is requesting the service too frequently. 839.It 840A malicious user is running a program to invoke the service in 841a denial-of-service attack. 842.It 843The invoked service program has an error that causes clients 844to retry quickly. 845.El 846.Pp 847Use the 848.Fl R Ar rate 849option, 850as described above, to change the rate limit. 851Once the limit is reached, the service will be 852reenabled automatically in 10 minutes. 853.Pp 854.It Xo 855.Ar service Ns / Ns Ar protocol : 856.No \&No such user 857.Ar user , 858.No service ignored 859.Xc 860.It Xo 861.Ar service Ns / Ns Ar protocol : 862.No getpwnam : 863.Ar user : 864.No \&No such user 865.Xc 866No entry for 867.Ar user 868exists in the 869.Xr passwd 5 870database. 871The first message 872occurs when 873.Nm 874(re)reads the configuration file. 875The second message occurs when the 876service is invoked. 877.Pp 878.It Xo 879.Ar service : 880.No can't set uid 881.Ar uid 882.Xc 883.It Xo 884.Ar service : 885.No can't set gid 886.Ar gid 887.Xc 888The user or group ID for the entry's 889.Ar user 890field is invalid. 891.Pp 892.It "setsockopt(SO_PRIVSTATE): Operation not supported" 893The 894.Nm 895utility attempted to renounce the privileged state associated with a 896socket but was unable to. 897.El 898.Sh SEE ALSO 899.Xr ipsec_set_policy 3 , 900.Xr hosts_access 5 , 901.Xr hosts_options 5 , 902.Xr login.conf 5 , 903.Xr passwd 5 , 904.Xr rpc 5 , 905.Xr services 5 , 906.Xr comsat 8 , 907.Xr fingerd 8 , 908.Xr ftpd 8 , 909.Xr rexecd 8 , 910.Xr rlogind 8 , 911.Xr rpcbind 8 , 912.Xr rshd 8 , 913.Xr telnetd 8 , 914.Xr tftpd 8 915.Rs 916.%A Michael C. St. Johns 917.%T Identification Protocol 918.%O RFC1413 919.Re 920.Sh HISTORY 921The 922.Nm 923utility appeared in 924.Bx 4.3 . 925TCPMUX is based on code and documentation by Mark Lottor. 926Support for 927.Tn "ONC RPC" 928based services is modeled after that 929provided by 930.Tn SunOS 9314.1. 932The IPsec hack was contributed by the KAME project in 1999. 933The 934.Fx 935TCP Wrappers support first appeared in 936.Fx 3.2 . 937