<address id="fjh72"></address>

<dfn id="fjh72"><button id="fjh72"></button></dfn>

        <dfn id="fjh72"></dfn>

        Previous Page TOC Next Page



        — 6 —
        Telnet and FTP


        In the last five days you have seen the architecture of TCP/IP, as well as both the Internet Protocol and the Transmission Control Protocol in considerable detail. Building on these two protocols is a layer of application-layer protocols that are commonly associated with TCP/IP. Today I look at the most common application layer protocols: Telnet, File Transfer Protocol (FTP), Trivial File Transfer Protocol (TFTP), and Simple Mail Transfer Protocol (SMTP), as well as a suite of tools called the Berkeley r-utilities.

        To cover all four protocols in complete detail would require several hundred pages, so today I examine the protocols' most important aspects, including their purposes, their relations to TCP and IP, their control codes and behavior, and their typical usage. Each of the four application layer protocols has advantages that make it ideally suited for a particular purpose. I hope that by the end of the day you will understand why they are used and how they fit into the TCP/IP world.

        Telnet


        The Telnet (telecommunications network) program is intended to provide a remote login or virtual terminal capability across a network. In other words, a user on machine A should be able to log into machine B anywhere on the network, and as far as the user is concerned, it appears that the user is seated in front of machine B. The Telnet service is provided through TCP's port number 23 (see Table 4.1 or Appendix D, "Well Known Port Numbers," for the TCP port numbers). The term Telnet is used to refer to both the program and the protocol that provide these services.

        Telnet was developed because at one time the only method of enabling one machine to access another machine's resources (including hard drives and programs stored there) was to establish a link using communications devices such as modems or networks into dedicated serial ports or network adapters. This is a little more complicated than might appear at first glance because of the wide diversity of terminals and computers, each with their own control codes and terminal characteristics. When directly connected to another machine, the machine's CPU must manage the translation of terminal codes between the two, which puts a hefty load on the CPU. With several remote logins active, a machine's CPU can spend an inordinate amount of time managing the translations. This is especially a problem with servers that can handle many connections at once: if each had to be handled with full terminal translation, the server CPU could be bogged down just performing this function.

        Telnet alleviates this problem by embedding the terminal characteristic sequences within the Telnet protocol. When two machines communicate using Telnet, Telnet itself can determine and set the communications and terminal parameters for the session during the connection phase. The Telnet protocol includes the capability not to support a service that one end of the connection cannot handle. When a connection has been established by Telnet, both ends have agreed upon a method for the two machines to exchange information, taking the load off the server CPU for a sizable amount of this work.

        Usually, Telnet involves a process on the server that accepts incoming requests for a Telnet session. On UNIX systems, this process is called telnetd. On Windows NT and other PC-based operating systems, a Telnet Server program is usually involved. The client (the end doing the calling) runs a program, usually called telnet, that attempts the connection to the server. A relative of the telnet program is the program rlogin, which is common on UNIX machines and which I look at later today; see the section titled "The Berkeley Utilities."



        The rlogin program provides almost identical functionality to Telnet and adds support for the UNIX environment. Many machines, especially UNIX workstations, act as both client and server simultaneously, enabling a user to log into other machines on the network and other users to log into the user's machine.


        Telnet Connections


        The Telnet protocol uses the concept of a network virtual terminal, or NVT, to define both ends of a Telnet connection. Each end of the connection (each NVT) has a logical keyboard and printer. The logical printer can display characters, and the logical keyboard can generate characters. The logical printer is usually a terminal screen, whereas the logical keyboard is usually the user's keyboard, although it could be a file or other input stream. These terms are also used in the File Transfer Protocol (FTP) and Simple Mail Transfer Protocol (SMTP). Figure 6.1 illustrates the NVT and logical keyboard and printer.

        Figure 6.1. A network virtual terminal for Telnet.

        The Telnet protocol treats the two ends of the connection as NVTs. The two programs at either end (telnet and telnetd for a UNIX server) manage the translation from virtual terminals to actual physical devices. The concept of virtual terminals enables Telnet to interconnect to any type of device, as long as a mapping is available from the virtual codes to the physical device. One advantage of this approach is that some physical devices cannot support all operations, so the virtual terminal does not have those codes. When the two ends are establishing the connection, the lack of these codes is noted, and sequences that would use them are ignored. This process is straightforward: one end asks whether the function is supported, and the other replies either positively or negatively. If it is supported, the necessary codes are sent. The list of supported functions is covered quickly in this manner.

        When a connection is established through Telnet, telnetd (or whatever program is acting as the Telnet server) starts a process on the server for running applications. Every keystroke in a Telnet session must go through several different processes, as shown in Figure 6.2. Each keystroke goes through telnet, telnetd, and the applications that are used during the Telnet session. Some applications want to communicate through a terminal device, so the remote system runs a pseudo-TTY driver that acts like a terminal to the application. If a windowed interface such as X or Motif is used on the host and remote machines, the systems must be instructed to enable windowing information to be passed back and forth; otherwise, the remote machine tries to open the windows on the server.

        Figure 6.2. A Telnet connection.

        To start Telnet, you must provide either the name or the IP address of the machine to be connected with. The name can be used only if the system has a means of resolving the name into its IP address, such as with the Domain Name System. A port name can usually be used to connect to a specific service, but this is used infrequently. For example, to connect to a machine with the IP address 205.150.89.1, you would enter this command:

        
        telnet 205.150.89.1

        If the system had the name darkstar, which was resolvable into its IP address, you could issue this command:

        
        telnet darkstar

        If no name, address, or port is specified, Telnet enters its command mode and waits for specific instructions. When the connection is established, a user ID and password are requested. You can log in with any user ID that is valid on the remote system (it does not have to be the same user ID you have on the local system). A typical connection to a UNIX server looks like this:

        
        telnet 205.150.89.1
        
        Trying...
        
        Connected to tpci
        
        Escape character is '^]'.
        
        HP-UX tpci A.09.01 A 9000/720 (ttys2)
        
        login: tparker
        
        password: xxxxxxxx
        
        $

        As you can see in the preceding code, Telnet tried to connect to the remote system, told you it was connected, then set up the communications parameters between the two systems. When that was done, the login prompt was displayed (as on any UNIX terminal), followed by a password request. If the login and password are enabled, the UNIX shell prompt (a dollar sign) is shown to indicate that the remote machine is now active.

        You can use a machine name as part of the Telnet command only if the system has a means of resolving the name to its IP address. If not, no connection is established, although Telnet might remain in command mode. To exit, use Ctrl+D or the break sequence displayed as part of the start-up message.

        You can enter Telnet's command mode at any time, usually by using the Ctrl+] key combination (hold down Ctrl and press the right bracket key). If you are currently connected to an active session when you enter command mode, Telnet waits for you to issue a command, execute it, and then return to the session automatically. Command mode lets you enter commands relative to the client (the machine you are physically in front of) instead of the server. You might need to do this to change directories or run a local application, for example.

        Once the connection is successfully established, your session behaves as though you were on the remote machine, with all valid commands of that operating system. All instructions are relative to the server, so a directory command shows the current directory on the server, not the client. To see the client's directory, you would have to enter command mode. A sample Telnet login and logout session, calling from one UNIX workstation (merlin) to a server (tpci_hpws4, a name that can be resolved by the name server) follows:

        
        merlin> telnet tpci_hpws4
        
        Trying...
        
        Connected to tpci_hpws4.
        
        Escape character is '^]'.
        
        HP-UX tpci_hpws4 A.09.01 A 9000/720 (ttys2)
        
        login: tparker
        
        password: xxxxxxxx
        
        tpci_hpws4-1> pwd
        
        /u1/tparker
        
        tpci_hpws4-2> cd docs
        
        tpci_hpws4-3> pwd
        
        /u1/tparker/docs
        
        tpci_hpws4-2> <Ctrl+d>
        
        Connection closed by foreign host.
        
        merlin>

        Once you are connected to the remote machine, the session behaves exactly as if you were on that machine. To log out of the remote session, simply issue the logout command (in the previous example, the UNIX Ctrl+D combination), and you are returned to your local machine. The telnet program is useful when you are on an under-powered machine or terminal and you want to use another machine's processing capabilities, or if another machine has a particular tool that you don't want to load on your local machine.

        Telnet utilities are available for many different operating systems. Figure 6.3 shows a Windows for Workgroups Telnet application (part of a larger TCP/IP application suite from NetManage called ChameleonNFS, which I look at in much more detail on Day 10, "Setting Up a Sample TCP/IP Network: DOS and Windows Clients") logging into an SCO UNIX server. Even when the local machine has a graphical interface such as Windows, you can most likely connect to remote machines using a character-based interface.

        Figure 6.3. Using Telnet from a Windows for Workgroups machine.

        If the calling and receiving workstations use a graphical user interface (GUI) such as Motif or X, and you want to use them instead of a character-based interface, you must instruct both ends to use the local terminal for windowing (because you can't see a window on the remote terminal). Locally, a program is run that instructs the operating system to enable other machines to display directly onto the screen, and the remote must have an instruction to redirect windowing commands to the local screen. Many UNIX systems perform this function like this:

        
        tpci_server-1> xhost +
        
        tpci_server-2> telnet tpci_hpws4
        
        Trying...
        
        Connected to tpci_hpws4.
        
        Escape character is '^]'.
        
        HP-UX tpci_hpws4 A.09.01 A 9000/720 (ttys2)
        
        login: tparker
        
        password: xxxxxxxx
        
        tpci_hpws4-1> setenv DISPLAY tpci_server:0.0
        
        tpci_hpws4-2> <Ctrl+d>
        
        Connection closed by foreign host.
        
        tpci_server-3>

        The UNIX xhost + instruction tells the local machine to enable the remote system to control windows on the local screen (which it normally is not allowed to do). The instruction setenv DISPLAY machine_name executed on the remote UNIX machine sets the UNIX shell environment variable DISPLAY to the local screen. Whenever a window must be opened (as when a Motif application is run), the windowing appears on the local screen, and the processing is conducted on the remote. These examples are for UNIX, but a similar sequence works on other machines and GUIs.

        Complete applications that provide this capability to run local X and Motif windows on a Windows, Windows 95, or Windows NT machine are available from several commercial vendors. For example, Figure 6.4 shows an application running on a remote server called mandel that draws Mandelbrot figures. The server has been instructed to display the window on the local Windows for Workgroups machine using an X client package for Windows machines. The server passes all information about the size, position, and colors of the window, as well as instructions for drawing the contents to the local X client. The window appears on the Windows for Workgroups machine exactly as it would on the UNIX server.

        Figure 6.4. Using an X client to show UNIX X windows on a PC.

        Telnet Commands


        Several service options are available when a Telnet session is established. Their values can be changed during the course of a Telnet session if both ends agree (one end might be prevented from enabling or disabling a service because of administrator or resource settings). There are four verbs used by the Telnet protocol to offer, refuse, request, and prevent services: will, won't, do, and don't, respectively. The verbs are designed to be paired (will/won't and do/don't). To illustrate how these are used, consider the following Telnet session, which has the display of these verbs turned on using the telnet command toggle options:

        
        tpci_server-1> telnet
        
        telnet> toggle options
        
        Will show option processing.
        
        telnet> open tpci_hpws4
        
        Trying...
        
        Connected to tpci_hpws4.
        
        Escape character is '^]'.
        
        SENT do SUPPRESS GO AHEAD
        
        SENT will TERMINAL TYPE (don't reply)
        
        SEND will NAWS (don't reply)
        
        RCVD do 36 (reply)
        
        sent won't 36 (don't reply)
        
        RECD do TERMINAL TYPE (don't reply)
        
        RCVD will SUPPRESS GO AHEAD (don't reply)
        
        RCVD do NAWS (don't reply)
        
        Sent suboption NAWS 0 80 (80) 0 37 (37)
        
        Received suboption Terminal type - request to send.
        
        RCVD will ECHO (reply)
        
        SEND do ECHO (reply)
        
        RCVD do ECHO (reply)
        
        SENT won't ECHO (don't reply)
        
        HP-UX tpci_hpws4 A.09.01 A 9000/720 (ttys2)
        
        login:


        The Telnet commands are used by the protocol, not by users (although you can issue them during a Telnet session, but this is usually used only for diagnostic purposes). There are no inherent Telnet user commands, other than the command mode toggle, because Telnet's role is to connect you to a remote system and let you use it directly.

        A partial set of Telnet command codes is shown in Table 6.1. Additional codes are used to represent printer functions such as horizontal and vertical tabs and form feeds, but these have been left off the table for brevity's sake. Part of the Telnet command code set includes six terminal functions (IP, AO, AYT, EC, EL, and GA) that are common across most terminal definitions, so they are formally defined in the Telnet standard.

        Table 6.1. Telnet command codes.

        Code

        Value

        Description

        Abort Output (AO)

        245

        Runs process to completion but does not send the output

        Are you there (AYT)

        246

        Queries the other end to ensure that an application is functioning

        Break (BRK)

        243

        Sends a break instruction

        Data Mark

        242

        Data portion of a Sync

        Do

        253

        Asks for the other end to perform or an acknowledgment that the other end is to perform

        Don't

        254

        Demands that the other end stop performing or confirms that the other end is no longer performing

        Erase Character (EC)

        247

        Erases a character in the output stream

        Erase Line (EL)

        248

        Erases a line in the output stream

        Go Ahead (GA)

        249

        Indicates permission to proceed when using half-duplex (no echo) communications

        Interpret as Command (IAC)

        255

        Interprets the following as a command

        Interrupt Process (IP)

        244

        Interrupts, suspends, aborts, or terminates the process

        NOP

        241

        No operation

        SB

        250

        Subnegotiation of an option

        SE

        240

        End of the subnegotiation

        Will

        251

        Instructs the other end to begin performing or confirms that this end is now performing

        Won't

        252

        Refuses to perform or rejects the other end performing


        Telnet commands are sent in a formal package called a command, as shown in Figure 6.5. Typically the commands contain two or three bytes: the Interpret as Command (IAC) instruction, the command code being sent, and any optional parameter to the command. The options supported by Telnet are shown in Table 6.2.

        Figure 6.5. The Telnet command structure.

        Table 6.2. Supported Telnet option codes.

        Code

        Description

        0

        Binary transmission

        1

        Echo

        2

        Reconnection

        3

        Suppress Go Ahead (GA)

        4

        Approximate message size negotiation

        5

        Status

        6

        Timing mark

        7

        Remote controlled transmission and echo

        8

        Output line width

        9

        Output page length

        10

        Output carriage-return action

        11

        Output horizontal tab stop setting

        12

        Output horizontal tab stop action

        13

        Output form feed action

        14

        Output vertical tab stop setting

        15

        Output vertical tab stop action

        16

        Output line feed action

        17

        Extended ASCII characters

        18

        Logout

        19

        Bytes macro

        20

        Data entry terminal

        21

        SUPDUP

        22

        SUPDUP output

        23

        Send location

        24

        Terminal type

        25

        End of Record

        26

        TACACS user identification

        27

        Output marking

        28

        Terminal location number

        29

        3270 regime

        30

        X.3 PAD (Packet assembly and disassembly)

        31

        Window size


        If you refer to the previous code listing with the options toggled on, some of the commands can be understood more clearly now. For example, will ECHO (which would be transmitted as values 255 251 1) instructs the other end to begin echoing back characters it receives. The command won't ECHO (the command would be 255 252 1) indicates that the sender will not echo back characters or wants to stop echoing.



        The use of ASCII characters and small tables of commands and options make it relatively easy to follow Telnet communications.


        TN3270


        Many mainframes use EBCDIC, whereas most smaller machines rely on ASCII. This can cause a problem when trying to Telnet from EBCDIC-based machines to ASCII-based machines and vice-versa, because the codes being transferred are not accurate. To correct this, a Telnet application called TN3270 was developed, which provides translation between the two formats.

        When TN3270 is used to connect between two machines, Telnet itself establishes the initial connection, and then one end sets itself up for translation. If an ASCII machine is calling an EBCDIC machine, the translation between the two formats is conducted at the EBCDIC (server) end unless there is a gateway between them, in which case the gateway can perform the translation.

        Many TCP/IP application suites that include a Telnet program also include a TN3270 program. For example, Figure 6.6 shows a TN3270 window from the NetManage ChameleonNFS suite in the process of connecting to a mainframe EBCDIC-based machine. The mainframe's IP address is used to initiate the connection.

        Figure 6.6. TN3270 provides conversion between ASCII and EBCDIC.

        File Transfer Protocol (FTP)


        File Transfer Protocol, usually called FTP, is a utility for managing files across machines without having to establish a remote session with Telnet. FTP enables you to transfer files back and forth, manage directories, and access electronic mail. FTP is not designed to enable access to another machine to execute programs, but it is the best utility for file transfers.

        FTP uses two TCP channels. TCP port 20 is the data channel, and port 21 is the command channel. FTP is different from most other TCP/IP application programs in that it does use two channels, enabling simultaneous transfer of FTP commands and data. It also differs in one other important aspect: FTP conducts all file transfers in the foreground, instead of the background. In other words, FTP does not use spoolers or queues, so you are watching the transfer process in real time. By using TCP, FTP eliminates the need to worry about reliability or connection management, because FTP can rely on TCP to perform these functions properly.

        In FTP parlance, the two channels that exist between the two machines are called the protocol interpreter, or PI, and the data transfer process, or DTP. The PI transfers instructions between the two implementations using TCP command channel 21, and the DTP transfers data on TCP data channel 20. This is shown in Figure 6.7.

        Figure 6.7. FTP channel connections.

        FTP is similar to Telnet in that it uses a server program that runs continuously and a separate program that is executed on the client. On UNIX systems, these programs are named ftpd and ftp, respectively (similar to telnetd and telnet).

        FTP Commands


        Before looking at how you can use FTP to transfer files, you should look at the commands behind the protocol itself. As with Telnet's commands, these are for the protocol's use only and should not be used by a user (although administrators sometimes use the FTP commands for debugging and diagnostic purposes).

        FTP's internal protocol commands are four-character ASCII sequences terminated by a newline character. Some of the codes require parameters after them. One primary advantage to using ASCII characters for commands is that a user can observe the command flow and understand it easily. This helps considerably in the debugging process. Also, it enables a knowledgeable user to communicate directly with the FTP server component (ftpd).

        FTP commands used by the protocol are summarized in Table 6.3. These commands provide for the connection process, password checking, and the actual file transfers. These are not to be confused with the commands available to a user.

        Table 6.3. FTP internal commands.

        Command

        Description

        ABOR

        Abort previous command

        ACCT

        User account ID

        ALLO

        Allocate storage for forthcoming operation

        APPE

        Append incoming data to an existing file

        CDUP

        Change to parent directory

        CWD

        Change working directory

        DELE

        Delete file

        HELP

        Retrieve information

        LIST

        Transfer list of directories

        MKD

        Make a directory

        MODE

        Set transfer mode

        NLST

        Transfer a directory listing

        NOOP

        No operation

        PASS

        User password

        PASV

        Request a passive open

        PORT

        Port address

        PWD

        Display current directory

        QUIT

        Terminate the connection

        REIN

        Terminate and restart a connection

        REST

        Restart marker (restart transfer)

        RETR

        Transfer copy of file

        RMD

        Remove a directory

        RNFR

        Old pathname for rename command

        RNTO

        New pathname for rename command

        SITE

        Provides service specifics

        SMNT

        Mount a file system

        STAT

        Returns status

        STOR

        Accept and store data

        STOU

        Accept data and store under different name

        STRU

        File structure

        SYST

        Query to determine operating system

        TYPE

        Type of data

        USER

        User ID


        FTP also uses simple return codes to indicate transfer conditions. Each return code is a three-digit number, the first of which signifies a successful execution (the first digit is 1, 2, or 3) or a failure (the first digit is 4 or 5). The second and third digits specify the return code or error condition in more detail. The FTP return codes are shown in Table 6.4 and Table 6.5. The third-digit codes are not included here because there are many of them and they vary between implementations.

        Table 6.4. FTP reply code first digits.

        First Digit

        Description

        1

        Action initiated. Expect another reply before sending a new command.

        2

        Action completed. Can send a new command.

        3

        Command accepted but on hold due to lack of information.

        4

        Command not accepted or completed. Temporary error condition exists. Command can be reissued.

        5

        Command not accepted or completed. Reissuing the command will result in the same error (don't reissue).



        Table 6.5. FTP reply code second digits.

        Second Digit

        Description

        0

        Syntax error or illegal command

        1

        Reply to request for information

        2

        Reply that refers to connection management

        3

        Reply for authentication command

        4

        Not used

        5

        Reply for status of server


        FTP enables file transfers in several formats, which are usually system-dependent. The majority of systems (including UNIX systems) have only two modes: text and binary. Some mainframe installations add support for EBCDIC, whereas many sites have a local type designed for fast transfers between local network machines (the local type might use 32- or 64-bit words).

        Text transfers use ASCII characters separated by carriage-return and newline characters, whereas binary enables transfer of characters with no conversion or formatting. Binary mode is faster than text and also enables for the transfer of all ASCII values (necessary for nontext files). On most systems, FTP starts in text mode, although many system administrators now set FTP to binary mode as a default for their users' convenience. FTP cannot transfer file permissions, because these are not specified as part of the protocol.

        Before transferring files with FTP, make sure you are using the correct transfer mode. Transferring a binary file as ASCII results in garbage! Check with your system administrator if you are unsure of the mode, or watch the messages FTP returns to see the mode used.

        FTP Connections


        FTP is usually started with the name or address of the target machine. As with Telnet, the name must be resolvable into an IP address for the command to succeed. The target machine can also be specified from the FTP command line. For example, to connect to the IP address 205.150.89.5, you would issue this command:

        
        ftp 205.150.89.5

        When FTP connects to the destination, you must be able to log into the system as a valid user (as you do when connecting through Telnet). Some systems enable an anonymous or guest login for FTP file transfers (usually using your login name as a password as a record of your access; see the section titled "Anonymous FTP Access"), but most require you to have regular access to the machine. The following extract shows the login process as a user provides a login and password for the remote machine:

        
        ftp tpci_hpws4
        
        Connected to tpci_hpws4.
        
        220 tpci_hpws4 FTP server
        
        Name (tpci_hpws4:tparker):
        
        331 Password required for tparker.
        
        Password:
        
        230 User tparker logged in.
        
        Remote system type is UNIX.
        
        Using binary mode to transfer files.

        On large networks where a system such as Yellow Pages (YP) or Network Information Services (NIS) is used, FTP logins are usually permitted on most machines. If YP or NIS is not employed, you must be in the valid users file to obtain FTP access. As with Telnet, you can log into the remote with a different user ID from your local machine login. To transfer files, you must have the proper permissions on the remote, if file permissions are provided for by the operating system.

        After logging into another machine using FTP, you are not actually on the remote machine. You are still logically on the client, so all instructions for file transfers and directory movement must be with respect to your local machine, not the remote one. Note that this is the opposite of Telnet (a distinction that causes considerable confusion among newcomers to FTP and Telnet).

        Remember that all references to files and directories are relative to the machine that initiated the FTP session. If you are not careful, you can accidentally overwrite existing files.

        The process followed by FTP when a connection is established is as follows:

        1. Login: Verifies the user ID and password.

        2. Define directory: Identifies the starting directory.

        3. Define file transfer mode: Defines the type of transfer.

        4. Start data transfer: Enables user commands.

        5. Stop data transfer: Closes the connection.

        The steps are performed in sequence for each connection. A user has several commands available to control FTP; the most frequently used commands are summarized in Table 6.6.

        Table 6.6. FTP user commands.

        FTP Command

        Description

        ascii

        Switch to ASCII transfer mode

        binary

        Switch to binary transfer mode

        cd

        Change directory on the server

        close

        Terminate the connection

        del

        Delete a file on the server

        dir

        Display the server directory

        get

        Fetch a file from the server

        hash

        Display a pound character for each block transmitted

        help

        Display help

        lcd

        Change directory on the client

        mget

        Fetch several files from the server

        mput

        Send several files to the server

        open

        Connect to a server

        put

        Send a file to the server

        pwd

        Display the current server directory

        quote

        Supply an FTP command directly

        quit

        Terminate the FTP session


        Using FTP is similar to Telnet, except that all movements of files are relative to the client. Therefore, putting a file is moving it from the client to the server, whereas getting a file is the reverse. A sample FTP session follows:

        
        tpci_hpws1-1> ftp tpci_hpws4
        
        Connected to tpci_hpws4.
        
        220 tpci_hpws4 FTP server (Version 1.7.109.2 Tue Jul 28 23:32:34 GMT 1992) ready.
        
        Name (tpci_hpws4:tparker):
        
        331 Password required for tparker.
        
        Password:
        
        230 User tparker logged in.
        
        Remote system type is UNIX.
        
        Using binary mode to transfer files.
        
        ftp> pwd
        
        257 "/u1/tparker" is current directory.
        
        ftp> get mandelfile1.gif
        
        remote: mandelfile1.gif local: mandelfi.gif
        
        200 PORT command successful
        
        150 Opening BINARY mode data connection for mandelfile1.gif
        
        226 File transfer complete
        
        1192834 bytes sent in 0.89 seconds
        
        ftp> <Ctrl+d>
        
        tpci_hpws1-2>

        In this short sample, I transferred a file called mandelfile1.gif from a UNIX machine (the server) to the local machine (the client). You might have noticed that the filename was truncated automatically by the server to fit the DOS filesystem naming conventions. Also, note that I used binary mode (which was the system default). If the default had been ASCII mode, I would have just transferred over a megabyte of total garbage that couldn't be used for anything.

        A debugging option is available from the command line by adding -d to the command. This displays the command channel instructions. Instructions from the client are shown with an arrow as the first character, whereas instructions from the server have three digits in front of them. A PORT in the command line indicates the address of the data channel on which the client is waiting for the server's reply. If no PORT is specified, channel 20 (the default value) is used. Unfortunately, the progress of data transfers cannot be followed in the debugging mode. A sample session with the debug option enabled is shown here:

        
        tpci_hpws1-1> ftp -d
        
        ftp> open tpci_hpws4
        
        Connected to tpci_hpws4.
        
        220 tpci_hpws4 FTP server Name (tpci_hpws4:tparker):
        
        ---> USER tparker
        
        331 Password required for tparker.
        
        Password:
        
        ---> PASS qwerty5
        
        230 User tparker logged in.
        
        ---> SYST
        
        215 UNIX Type: L8
        
        Remote system type is UNIX.
        
        ---> Type I
        
        200 Type set to I.
        
        Using binary mode to transfer files.
        
        ftp> ls
        
        ---> PORT 47,80,10,28,4,175
        
        200 PORT command successful.
        
        ---> TYPE A
        
        200 Type set to A.
        
        ---> LIST
        
        150 Opening ASCII mode data connection for /bin/ls.
        
        total 4
        
        -rw-r-----  1 tparker  tpci    2803  Apr 29 10:46 file1
        
        -rw-rw-r--  1 tparker  tpci    1286  Apr 14 10:46 file5_draft
        
        -rwxr-----  2 tparker  tpci   15635  Mar 14 23:23 test_comp_1
        
        -rw-r-----  1 tparker  tpci      52  Apr 22 12:19 xyzzy
        
        Transfer complete.
        
        ---> TYPE I
        
        200 Type set to I.
        
        ftp> <Ctrl+d>
        
        tpci_hpws1-2>

        You might notice in the previous code how the mode changes from binary to ASCII to send the directory listing, and then back to binary (the system default value). You can see how the two systems communicate to display the status messages that appear without the debugging option active.

        When FTP is used in a graphical user environment, you might be able to use a GUI-based tool. For example, NetManage's ChameleonNFS provides the FTP utility shown in Figure 6.8. In this case, the NFS client on the Windows for Workgroups machine has connected to a UNIX server. The Local side of the window shows the Windows machine, and the Remote side of the window shows the UNIX box's current filesystem contents. When using a GUI-based utility like this one, you can use the mouse and various buttons to transfer files back and forth between machines.

        Figure 6.8. Many operating systems have a GUI-based FTP client.

        FTP Third-Party Transfers


        FTP enables a transfer to occur through a third machine positioned between the client and the server. This procedure is known as a third-party transfer and is sometimes necessary to obtain proper permissions to access the remote machine. Figure 6.9 shows the schematic of a third-party transfer, with the control connection made through a third machine.

        Figure 6.9. A third-party FTP transfer.

        When setting up a third-party connection, the client opens the control connections between the remote machine and the second client that handles the control channel. Only the control channel goes through the second client, whereas the data channel goes directly between the two ends.

        When a transfer request is submitted, it is transferred through the second client, which checks permissions and then forwards the request to the server. The data transfer can take place directly, because the permissions were checked on the control channel.

        Anonymous FTP Access


        FTP requires a user ID and password to enable file transfer capabilities, but there is a more liberal method of enabling general access to a file or directory, called anonymous FTP. Anonymous FTP removes the requirement for a login account on the remote machine, usually enabling the login anonymous with a password of either guest or the user's actual login name. The following session shows the use of an anonymous FTP system:

        
        tpci_hpws4-1> ftp uofo.edu
        
        Connected to uofo.edu.
        
        220 uofo.edu FTP server (Version 1.7.109.2 Tue Jul 28 23:32:34 GMT 1992) ready.
        
        Name (uofo:username): anonymous
        
        331 Guest login ok, send userID as password.
        
        Password: tparker
        
        230 Guest login ok, access restrictions apply.
        
        ftp> <Ctrl+d>
        
        tpci_hpws4-2>

        If the remote system is set to enable anonymous logins, you are prompted for a password and then given a warning about access limitations. If there is a file on the remote system you require, a get command transfers it. Anonymous FTP sites are becoming common, especially with the popularity of the Internet.

        FTP Servers


        Most UNIX machines act as FTP servers by default. To provide FTP server facilities, they run the daemon ftpd when the operating system is booted. The daemon is usually handled by the UNIX inetd process. When you start using inetd, the inetd daemon watches the TCP command port (channel 21) for an arriving request for a connection, then starts ftpd to service that request. If you want to ensure that your UNIX or Linux system can handle FTP requests, make sure the ftpd daemon can be started when needed by inetd by checking the inetd configuration file (usually /etc/inetd.config or /etc/inetd.conf) for a line that looks like this:

        
        ftp stream  tcp  nowait  root  /usr/etc/ftpd   ftpd -l

        If this line doesn't exist, you should add it. With most UNIX systems this line is already in the inetd configuration file, although it might be commented out, in which case you should remove the comment symbol.

        Windows, Windows for Workgroups, and Windows 95 all lack an FTP server program as part of their distribution software (although Windows 95 does have an FTP client), so you have to add a commercial package. Many commercial TCP/IP suites include an FTP server process. Figure 6.10 shows the NetManage ChameleonNFS program group, which includes an FTP server program you can use as an example for Windows for Workgroups and Windows 3.x machines.

        Figure 6.10. The NetManage FTP Server dialog handles the FTP server process.

        To start the NetManage FTP Server software, double-click the FTP server icon in the NetManage program group. A dialog, shown in Figure 6.10, appears. The FTP server process is now active, and anyone on another machine on your local area network can now connect to your machine, assuming they have access.

        Access to your FTP service is controlled through the user lists maintained by the FTP Server package. Selecting the Users menu option from the NetManage FTP Server dialog opens the Users dialog, shown in Figure 6.11. This lets you add user names to your system. If another user on a different machine tries to connect to your FTP server software, the server verifies that their login name and password match the name and password you enter in this dialog. This lets you set up a list of users who can transfer files to and from your system, as long as the FTP server is running.

        Figure 6.11. Access to your machine is controlled through the FTP Server Users dialog.

        If you are running an FTP server process, it is often a good idea to create a directory just for FTP. Many users prefer to create a directory called public, which is where all files to be transferred in and out of the local system are placed. This lets you prevent accidental deletion or transfer of files in other directories on your system, as well as providing you with the opportunity to filter incoming material for suitability, viruses, and so on. If you use a transfer directory, check it regularly and make sure all users who have access to your system can work only in that directory.

        If you want to provide an anonymous or guest account for users on your LAN or any other network that can connect to your machine, you should set up an account with either no password or a simple password like guest. It is very important to restrict the areas a guest or anonymous login can use.

        As mentioned earlier, Windows 95 is supplied with client FTP software but not an FTP server. You can use other aspects of Windows 95 as a file transfer system, such as file and print sharing over any existing network, but these do not use FTP. If you want to set up an FTP server on your Windows 95 machine, you have to install third-party commercial software for this purpose.

        A popular Windows 95 FTP server package called FTP Serv-U was written by Rob Beckers and is provided as shareware. An executable file called Serv-U starts the server. To control access to your Windows 95 system, you can set up logins using the Serv-U Users menu option. This displays a screen that lets you add logins and passwords, as well as the directories and drives the user has access to. Figure 6.12 shows the Edit User/Group dialog with a user being added. When a user from another system logs into your Windows 95 machine, they are asked for a login and password.

        Figure 6.12. Set up all users of your FTP server with the Edit User/Group dialog.

        Trivial File Transfer Protocol (TFTP)


        The Trivial File Transfer Protocol (TFTP) is one of the simplest file transfer protocols in use. It differs from FTP in two primary ways: it does not log onto the remote machine, and it uses the User Datagram Protocol (UDP) connectionless transport protocol instead of TCP. By using UDP, TFTP does not monitor the progress of the file transfer, although it does have to employ more complex algorithms to ensure proper data integrity. By avoiding logging onto the remote, user access and file permission problems are avoided. TFTP uses the TCP port identifier number 69, even though TCP is not involved in the protocol.

        TFTP has few advantages over FTP. It is not usually used for file transfers between machines where FTP could be used instead, although TFTP is useful when a diskless terminal or workstation is involved. Typically, TFTP is used to load applications and fonts into these machines, as well as for bootstrapping. TFTP is necessary in these cases because the diskless machines cannot execute FTP until they are fully loaded with an operating system. TFTP's small executable size and memory requirements make it ideal for inclusion in a bootstrap, where the system requires only TFTP, UDP, and a network driver, all of which can be provided in a small EPROM.

        TFTP handles access and file permissions by imposing restraints of its own. On most UNIX systems, for example, a file can be transferred only if it is accessible to all users on the remote (both read and write permissions are set). Because of the lax access regulations, most system administrators impose more control over TFTP (or ban its use altogether); otherwise, it is quite easy for a knowledgeable user to access or transfer files that could constitute a security violation.

        TFTP transfers can fail for many reasons, because practically any kind of error encountered during a transfer operation causes a complete failure. TFTP does support some basic error messages, but it cannot handle simple errors such as insufficient resources for a file transfer or even a failure to locate a requested file.

        TFTP Commands


        The important instructions in TFTP's command set are shown in Table 6.7. The TFTP command set is similar to FTP's, but it differs in several important aspects because of the connectionless aspect of the protocol. Most noticeable is the connect command, which simply determines the remote's address instead of initiating a connection.

        Table 6.7. TFTP's command set.

        TFTP Command

        Description

        binary

        Use binary mode for transfers

        connect

        Determine the remote's address

        get

        Retrieve a file from the remote

        put

        Transfer a file to the remote

        trace

        Display protocol codes

        verbose

        Display all information


        TFTP enables both text and binary transfers, as does FTP. As with both Telnet and FTP, TFTP uses a server process (tftpd on a UNIX system) and an executable, usually called tftp. A sample TFTP session on a UNIX host is shown here, with full trace options and binary transfers turned on:

        
        tpci_hpws1-1> tftp
        
        tftp> connect tpci_hpws4
        
        tftp> trace
        
        Packet tracing on.
        
        tftp> binary
        
        Binary mode on.
        
        tftp> verbose
        
        Verbose mode on.
        
        tftp> status
        
        Connected to tpci_hpws4.
        
        Mode: octet Verbose: on Tracing: on
        
        Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
        
        tftp> get /usr/rmaclean/docs/draft1
        
        getting from tpci_hpws4:/usr/rmaclean/docs/draft1 to /tmp/draft1 [octet]
        
        sent RRQ <file=/usr/rmaclean/docs/draft1, mode=octet>
        
        received DATA <block1, 512 bytes>
        
        send ACK <block=1>
        
        received DATA <block2, 512 bytes>
        
        send ACK <block=3>
        
        received DATA <block4, 128 bytes>
        
        send ACK <block=3>
        
        Received 1152 bytes in 0.2 second 46080 bits/s]
        
        tftp> quit
        
        tpci_hpws1-2>

        In the session above, you can see that the trace and verbose commands turn on the echoing of the instructions flowing between the two machines during a file transfer. Every time a block of data is sent after the get command is issued (the send ACK instruction shown on the session above), a received instruction is returned to acknowledge the ACK.

        TFTP is available on all UNIX systems as well as in TCP/IP suites for other operating systems. Figure 6.13 shows the TFTP utility from ChameleonNFS, which lets you enter the remote host name, the remote and local filenames, and the type of transfer you want. The file transfer is then performed in the background using UDP.

        Figure 6.13. Using TFTP to transfer a file.

        TFTP Packets


        TFTP uses UDP as a transport protocol, so TFTP can use the UDP header to encapsulate TFTP protocol information. TFTP uses the UDP source and destination port fields to set the two ends of the connection. It accomplishes this by the use of TFTP Transfer Identifiers, or TIDs, which are created by TFTP and passed to UDP, which then places them in the headers.

        As with Telnet and FTP, TFTP uses port binding, where the sending machine selects a TID, and the remote is set to port number 69 (TFTP's port number). The remote machine responds with an acknowledgment of a connection request, a source port of 69, and the destination TID sent in the request.

        TFTP uses five types of Protocol Data Units, which are referred to as packets in the TFTP lexicon. These packets are listed in Table 6.8. Their layout is shown in Figure 6.14. Error messages supported by TFTP are shown in Table 6.9.

        Figure 6.14. TFTP packet layouts.

        Table 6.8. TFTP Protocol Data Unit codes.

        Code

        OpCode

        Description

        ACK

        4

        Acknowledgment

        DATA

        3

        Send Data

        Error

        5

        Error

        RRQ

        1

        Read request

        WRQ

        2

        Write request



        Table 6.9. TFTP error messages and codes.

        Code

        Description

        0

        Not defined

        1

        File not found

        2

        Permissions prevent access

        3

        Disk full or allocation limit exceeded

        4

        Illegal TFTP operation requested

        5

        Unknown transfer number


        The layouts for both RRQ and WRQ packets have a Mode field, which indicates the type of transfer. There are three modes currently available to TFTP:

        The last block in all packets contains between 0 and 511 bytes of data, labeled 0 in Figure 6.14. This pads out the block of data to 512 bytes.

        The communications process used by TFTP begins with the client sending an RRQ or WRQ request to the server through UDP. As part of the request, a transaction number, the filename, and a code to identify the transmission mode to be used are specified. The transaction number is used to identify future transactions in the sequence.

        Because there is no connection between the two, the client sets a timer and waits for a reply from the server. If one doesn't arrive before the timer expires, another request is sent. After an ACK is received, a DATA packet is transmitted, for which another ACK or an ERROR is received. If there are several packets to be transferred, they are constructed so they have a length of 512 bytes and an incrementing sequence number. The process terminates when a DATA packet with a length of less than 512 bytes is received by the server. For each packet sent, TFTP waits for an acknowledgment before sending the next, a system known as a flip-flop protocol.

        Simple Mail Transfer Protocol (SMTP)


        The Simple Mail Transfer Protocol (SMTP) is the defined Internet method for transferring electronic mail. SMTP is similar to FTP in many ways, including the same simplicity of operation. SMTP uses TCP port number 25.

        Most UNIX systems use programs called sendmail or mmdf to implement SMTP (as well as several other mail protocols). The sendmail program, for example, acts as both a client and a server, usually running in the background as a daemon. Users do not interact with sendmail directly but use a front-end mail program such as mail, mailx, or Mail. These mail system interfaces pass the message to sendmail for forwarding.

        SMTP uses spools or queues. When a message is sent to SMTP, it places it in a queue. SMTP attempts to forward the message from the queue whenever it connects to remote machines. If it cannot forward the message within a specified time limit, the message is returned to the sender or removed.

        SMTP Commands


        SMTP data transmissions use a simple format. All the message text is transferred as 7-bit ASCII characters. The end of the message is indicated by a single period on a line by itself. If for some reason a line in the message begins with a period, a second one is added by the protocol to avoid confusion with the end-of-message indicator.

        SMTP has a simple protocol command set, listed in Table 6.10. Using these protocol elements, mail is transferred with a minimum of effort.

        Table 6.10. The SMTP protocol command set.

        Command

        Description

        DATA

        Message text

        EXPN

        Expansion of a distribution list

        HELO

        Use in connection establishment to exchange identifiers

        HELP

        Request for help

        MAIL

        The sender's address

        NOOP

        No operation

        RCPT

        The message destination address (more than one can be provided)

        RSET

        Terminate the current transaction

        SAML

        Send a message to the user's terminal and send mail

        SEND

        Send a message to the user's terminal

        SOML

        Either send a message to the user's terminal or send mail

        TURN

        Change the sending direction (reverse sending and receiving roles)

        VRFY

        Verify the user name


        When a connection is established, the two SMTP systems exchange authentication codes. Following this, one system sends a MAIL command to the other to identify the sender and provide information about the message. The receiving SMTP returns an acknowledgment, after which a RCPT is sent to identify the recipient. If more than one recipient at the receiver location is identified, several RCPT messages are sent, but the message itself is transmitted only once. After each RCPT there is an acknowledgment. A DATA command is followed by the message lines, until a single period on a line by itself indicates the end of the message. The connection is closed with a QUIT command.

        The sender and recipient address fields use standard Internet formats, involving the user name and domain name (such as [email protected]). The domain can be replaced by other information if a direct connection is established, or if there is a forwarding machine in the path. SMTP uses the Domain Name System (DNS) for all addresses.

        The Berkeley Utilities


        The University of California at Berkeley was instrumental in the development of TCP/IP and contributed many utility programs to the application tool set. These are usually known by the term Berkeley r-Utilities. They are called r-utilities because they all start with the letter r (for remote). Most of the utilities are UNIX-specific, although they have since all been ported to other operating systems.

        The hosts.equiv and .rhosts Files


        To enable machines to communicate correctly over networks, access rights for machines and users must be set. Usually, when logging into another machine, a user must supply a user ID and a password. When you log into many machines, retyping this information can be tedious and time-consuming. It can also be a security problem, because it is easy to write a program that monitors network connections for this information. A way to enable fast access without actually logging in and preventing interception of passwords is clearly useful in some cases.

        The system administrator can decide that all login names used on other machines whose names are in the file hosts.equiv are allowed access on the local machine. This enables a protocol that queries a machine for access to check the hosts.equiv file for the requesting machine's name, and if it is found, to grant access to the user on the remote machine. The user has the same access rights as on his or her home machine.

        If the protocol doesn't find an entry in the hosts.equiv file, it can check another file maintained in a user's home directory, called .rhosts. A user can control who has access to their login name with the file .rhosts in their home directory, enabling other users to log in as if they were that user. The .rhosts file must be owned by the user (or root) and not allow write access to all users (on a UNIX system, the other permission cannot be write). An .rhosts file consists of a line for each user to be allowed into the home directory. The line consists of a machine name and a login name. A sample .rhosts file is shown here:

        
        tpci_hpws1 rmaclean
        
        tpci_hpws1 bsmallwood
        
        tpci_hpws3 ychow
        
        tpci_hpws3 bsmallwood
        
        tpci_hpws4 glessard
        
        tpci_hpws4 bsmallwood
        
        tpci_sunws1 chatton
        
        merlin tparker
        
        merlin ahoyt
        
        merlin lrainsford

        This file allows user bsmallwood to log in from three different machines.

        rlogin


        The rlogin command (for remote login) enables a user to log into another machine. It is very similar in functionality to Telnet, although the protocol is much simpler. There is a background program running on the server called rlogind, and the program rlogin resides on the client.

        The rlogin protocol begins a session by sending three character strings, separated by 0s. The first string is the user's login ID (on the client), the second string is the login name for the server (usually but not always the same as the login name on the client), and the third string is the login name and transmission rate of the user's terminal (such as wyse60/19200). When received on the server, the strings can be converted to environment variables (such as UNIX's TERM terminal variable). You cannot log into the remote machine with a different user ID, because the system does not prompt for the login name. It does prompt for a password, however.

        After the login process is completed, rlogin doesn't use any protocol. Every character you type on the client machine is sent to the server, whereas every server-generated character is displayed on your console. The only exit to your local machine is by closing the connection by using Ctrl+D or entering the escape character on a line by itself. By default, the escape character is a tilde (~).

        Some versions of rlogin enable a shell escape, a temporary suspension of the rlogin session and a return to the operating system, by using ~!.

        rsh


        The rsh utility (remote shell) lets you execute commands on a remote machine. As with most Berkeley utilities, a background process called rshd is involved. Executing a command on a remote machine is a matter of adding rsh and the machine name to the front of the command line, such as rsh tpci_hpws3 who or rsh tpci_sunws1 tar xvf /dev/rct0 (using UNIX examples). The rsh utility depends on the presence of either hosts.equiv or .rhosts to enable login; otherwise, access is not granted.

        The rsh utility is not a shell in the sense that it does not interpret commands like the UNIX C shell or Bourne shell. Instead, a command entered is sent to the server's standard input and output, executing the command as a local process through the TCP connection. The primary advantage of this is that a shell script that executes on your local machine can be submitted to the remote machine with no modification, where it runs just as if it were local (except using the remote's file system). Unfortunately, any return codes generated by the remote system are not sent back to your local machine. Also, most screen-oriented applications do not function properly, because they have no terminal output to write to.

        rcp


        The Berkeley rcp (remote copy) command is similar to the UNIX cp command, except that it works across the network. The command syntax and option lists for rcp are the same as cp, although a machine name is usually specified as part of the filename by the addition of the machine name followed by a colon (see the following examples). Even recursive copying of directories is supported (a useful and attractive feature of rcp that isn't available under FTP or TFTP). The rcp program acts as both server and client, initiated when a request arrives.

        
        rcp tpci_hpws4:/user/tparker/doc/draft1 .
        
        
        rcp file2 merlin:/u1/bsmallwood/temp/file2
        rcp -r merlin:/u2/tparker/tcp_book tpci_server/tcp_book
        rcp merlin:/u1/ychow/iso9000_doc tpci_server:/u1/iso/doc1/iso_doc_from_ychow
        rcp file4 [email protected]:new_info

        As the examples indicate, the filenames at both the local and remote machines are specified, with standard UNIX conventions supported. The third example shows a file being transferred from one machine to another, neither of which is the machine from which the command is initiated. The last example shows the use of a full DNS-style name for the destination address.

        The rcp utility is a faster method of transferring files than FTP, although rcp requires access permission through an .rhosts file (not hosts.equiv). Without an entry in this file, access is refused and FTP or TFTP must be used.

        rwho


        The rwho (remote who) command uses the rwhod daemon to display a list of users on the network. It shows all network users, compiled from a regularly sent packet of information from all running rwhod programs. The frequency of this packet broadcast is system-dependent but is usually in the order of every one to three minutes. When an rwhod program receives a broadcast from another machine, it places it in a system file for future use. (The file on a UNIX system is called /usr/spool/rwho.)

        When a machine has not sent a broadcast message within a time limit (usually eleven minutes), it is assumed that the machine has disconnected from the network, and all users listed as active on that machine in the system file are ignored. The rwhod program drops a user ID from its broadcast if nothing has been entered at the user's terminal in the last hour.

        The output from an rwho request is shown in the following example. For each user, it shows their login name, their machine and terminal name, and the time and date of their login.

        
        bsmallwood merlin:tty2p      Feb 29 09:01
        
        etreijs    tpci_hpws2:tty01  Feb 29 12:12
        
        rmaclean   goofus:tty02      Feb 28 23:52
        
        tparker    merlin:tty01      Feb 29 11:43
        
        ychow      prudie:tty2a      Feb 28 11:37

        The rcp program has one major problem on large networks: the continuous sending of update packets by each machine creates a considerable amount of network traffic. For this reason, some implementations directly request the user names only when an rwho request is received.

        ruptime


        The ruptime utility displays a list of all machines on the network, their status, the number of active users, current load, and elapsed time since the system was booted. The program uses the same information as the rwho command.

        A sample output from a ruptime command follows:

        
        merlin     up    3:15,12 users, load 0.90, 0.50, 0.09
        
        prudie     down  9:12
        
        tpci_hpws1 up   11:05, 3 users, load 0.10, 0.10, 0.00
        
        tpci_hpws2 up   23:59, 5 users, load 0.30, 0.25, 0.08
        
        tpci_hpws3 down  6:45
        
        tpci_hpws4 up    9:05, 1 user,  load 0.12, 0.05, 0.01

        rexec


        The rexec (remote execution) program is a holdover from earlier versions of the UNIX operating system. It was designed to enable remote execution of a command through a server process called rexecd. The utility uses the dedicated TCP port number 512.

        The protocol used by rexec is very similar to rsh, except that an encrypted password is sent with the request and there is a full login process. The rexec utility is seldom used because rsh is a faster and more convenient method for executing a command remotely.

        Summary


        Today I looked at the primary application protocols that use TCP/IP, as well as the Berkeley utilities. Now that you can see how protocols work on top of the TCP and IP protocols, the layered structure of TCP/IP becomes more pronounced. Future days' texts build on this information.

        Q&A


        What is the purpose of Telnet and FTP?

        Telnet provides a remote login capability, whereas FTP enables you to transfer files across the network.

        What channels (port numbers) are used by Telnet, FTP, and SMTP?

        Telnet uses port number 23. FTP uses port number 21 for the control information and port number 20 for data. SMTP uses port number 25.

        When you issue a get command in FTP, is it moving a file from the local to remote, or vice versa?

        FTP commands are relative to the remote, so a get command moves a file from the local to the remote.

        How does TFTP differ from FTP?

        TFTP does not require logging in. It sends a request over UDP. With FTP, you must log into the destination either directly or through a third-party device.

        Does rlogin differ from telnet?

        The rlogin program was developed earlier and for most users has no difference. There are some version dependencies with some releases of rlogin, reflecting its earlier (and less full-featured) origins.

        Quiz


        1. Explain what a network virtual terminal is.

        2. Draw diagrams showing two- and three-party FTP sessions, indicating the port numbers used by each machine.

        3. Why would you want to enable anonymous FTP access? Are there any reasons for disallowing it?

        4. TFTP enables files to be transferred without logging in. What problems can this cause?

        5. What are the Berkeley Utilities?


        Workshop


        If you have access to a Telnet or FTP session, try logging into a remote machine and transferring files back and forth. Try to recognize that Telnet does everything relative to the local machine, whereas FTP is relative to the remote.

        Previous Page Page Top TOC Next Page

        <address id="fjh72"></address>

        <dfn id="fjh72"><button id="fjh72"></button></dfn>

              <dfn id="fjh72"></dfn>
              女人18片毛片60分钟视频 | 色国产精品一区 | 香蕉视频做爱 | 日韩高清无码本道 | 91爱爱·co m | 国产影片婷婷五月天 | 臭小子啊轻点灬太粗太长了的视频 | 豆花av在线播放 豆花av在线观看 | 欧美成人在 | 婷婷五月天伊人 | 无码性按摩九九九国产AV | 久久免费高清 | 日韩乱码人妻无码超清蜜桃丨 | 日韩爱爱网址 | 国产白丝自慰 | 偷偷操欧美 | 婷婷激情丁香五月天 | 成人毛片视频网站 | 爱爱视频不卡免费观看 | 性国产果冻裸体XXXX | 国产精品久久在线视频 | 国产成人无码区免费视频 | 天天干夜夜操www | 国产女处被破www免费 | 麻豆网站 | 国产乱伦A片| 一区二区三区有码 | 乱伦网站视频 | 亚洲天堂网视频网站 | 自拍偷拍成人在线视频 | 中文字幕无码Av在线看 | 久久免费少妇视频 | 亚洲啊v在线观看 | 成人黄色大香蕉 | 国产操逼免费视频 | 欧美做爱视频免费播放 | 国产社区| 999在线视频 | 啊啊啊插笔网站 | 久草手机 | 勉费av | 久久久久99精品成人片欧美一区 | 亚洲视频免费视频在线视频免费视频 | 久操视频网 | 国产精品无套久久久久 | 人人搞人人射 | 免费 无码 国产 | 欧美色图亚洲无码 | 中文丰满亲子伦 | 日韩黄页网站免 | 波多野结衣一区二区三区中文字幕 | 在线无码播放 | 操小骚逼视频 | 国产CD系列TS人妖视频 | 操碰久久 | 黄色电影在线免费观看网站 | 一亚洲精品色视频 | 男人的天堂高清无码 | 亚洲在线免费播放 | 日本亚洲无免费码在线 | 亚洲乱伦第一页 | 操逼网网址 | 色亭亭 | 欧美日韩一区二区三区四区论理片 | 精品传媒一区二区三区 | 水蜜桃视频在线观看免费 | 日本色情免费 | 欧美成人在线不卡视频 | 日韩三级片无码 | 另类一区 | 天天日日夜夜 | 美女干B 秋霞操逼 | 蜜桃传媒在线播放 | 青草精品视频在线观看 | 亚洲中文字幕在线观看视频了 | 欧美手机在线视频 | 后入少妇正在播放 | 国产内射在线视频播放 | 免费观看三区视频 | 国产一级a毛一级a看无码免费看 | 自拍偷拍综合网 | 日本黄色电影大鸡巴 | 69.成人免费电影 | 欧美视频区 | 亚洲无码一区二区三区四区 | 五月天av伊人av | 在线精品视频你懂的 | 夜夜爽妓女8888视频免费观看 | 91无码电影 | 人人草视频在线播放 | 人人操人人搞 | 在线观看2区 | 爱福利一区二区三区 | 九九视频免费 | 尤物视频高清无码在线观看 | 欧美一级网 | 国产裸体美女网站 | 色999五月色 | 亚洲精品一区二区三区在线观看 | 一区二区自拍偷拍0519 | AAA色色| 97超碰伊人 | 成人在线十八禁 | 操逼逼逼视频 | 久久久久久人人人人人人 | 美女操逼免费网页 | 小黄片视频免费 | 国产美女被操网站 | 久操这里只有精品 | 青青草国产视频在线观看 | 免费Aⅴ视频 | 久久影院网红无码视频牛牛夜夜骚 | 【乱子伦】国产精品www | 黄色AV小说 | 超碰色色 | 无码人妻少妇 | 一级黄av | 久艹在线蜜桃 | 欧美日韩免费看 | 人人看黄色视频 | 三级乱伦片 | 无码午夜成人 | 荫蒂添出高潮A片视频 | 国产免费黄色网址 | 天天日AV片 | 日欧美逼 | 高清无码在线观看av | 欧美午夜福利 | 青青久久伊人春色 | 秋霞午夜成人无码精品 | 色婷婷综合国产 | 黄色视频a | 亚洲精品三级 | 国产在线播放三区 | 一级a爱视频 | 亚州国产精品三级片 | 国产大保健 | 色偷偷男人天堂 | 激情五月天第四色 | 欧美成人在线不卡视频 | 亚洲欧美精品自偷自拍另 | 国产乱婬A∨片 | 日韩黄色一级网站 | 大香蕉插插插 | 午夜福利性爱视频 | 又粗又大又黄又爽无遮挡 | 极品人妻在线 | 操逼网视频 | 久色网站| www.亚洲黄 | 天天操天天干天天舔 | 亚洲在线视频第一页 | 青青艹青青啪 | AV无码免费观看 | 国产加勒比在线看 | 韩国一区二区不卡 | av怡红院 | 777777亚洲成人 | 国产三级电影在线观看 | 黄片免费视频在线 | 影音先锋女人aV鲁色资源网站 | 蜜桃91在线 | 国产福利久久久 | 波多野结衣乱码无码视频 | 亚洲成人影片在线点播 | 亚洲精品内射 | 大鸡巴视频在线 | 欧美性爱视频樱桃视频 | 天堂网在线视频 | 国产高清乱伦片 | 亚洲精品夜夜夜夜夜夜夜夜 | 超污视频网站在线观看免费 | 男女免费亚洲 | 大香蕉鸥\美一区二区 | 国产人人操人人 | 北条麻妃精品青青久久价格 | 日韩精品第一页 | 欧美激情久久网 | 国产精品a V视频 | 国产一级无码乳液 | 天天操天天看 | 超碰在线久 | 大香蕉色婷婷 | 欧日韩男女乱伦肏屄视频 | 中文永久免费观看 | 中文字幕第9页 | 国产精品高清无码在线播放 | 欧美激情网 | 国产精品日韩无码有码 | 激情网页 | 网友操逼超碰 | 天天爽天天澡天天爽精品视频 | AV天堂区| 波多野结衣在线网站 | 伊人久久婷婷 | 国产人妻无码一区二区三区不卡 | 91AV麻豆插入视频 | A∨免费在线观看 | 激情五月婷婷综合 | 亚洲蜜桃一区二区 | 国产成人无码精品久久久久 | 东方a在线 | 夜夜嗨AV一区二区三区网页 | 欧美日本韩国激情视频 | 日韩AAAAAA | 日韩福利一区二区三区 | 大鸡巴网免费视频在线 | 国产一级片免费在线观看 | 亚洲IV秘 一区二区三区 | 不卡无码免费视频 | 亚洲日韩AV无码专区影院 | www.操 | 视频你懂的 | 最新国产在线视频 | 一级毛片全部免费播放特黄 | 可以在线免费看黄片的网站 | 伊人在线观看视频 | 在线看AV的网站 | 91蘑菇视频 | 国产超碰在线 | 日本三级欧美三级中国 | 另类视频综合 | 久久五月天婷婷 | 想看国产操逼视频 | 中文字幕欧美高清 | 日本无码在线看 | 日韩亚洲美洲欧洲综三区一品在线 | 一级黄色A视频 | 日韩一级高清在线 | 99操逼视频 | 中文字幕一区在线观看视频 | 中国大陆最黄色的操逼视频 | 黄色污污污污污网站在线观看 | 天天撸天天搞 | 欧美变态拉屎操逼网站 | 色欲无码精品视频 | 久久久久有精品国产白浆天美传媒 | 亚洲A V站 | 一区二区无码高清 | 国产在线拍揄自揄拍无码福利 | 上海人妻第三次3p | 大鸡吧综合网 | 国产精品高潮视频 | 淫色综合网站 | 婷婷久久免费视频 | 亚洲无码高清在线 | 久久婷婷国产 | 在线免费观看黄色片 | 青青草无码在线观看 | 播放欧美黄片。 | 99九九99九九九99九他书对 | 国产成人黄色毛片不卡在线看 | av片电影在线播放 | 国产豆花视频永久在线观看 | 开心色激情网 | 日韩国产欧美黄色一级大片 | 蜜桃传媒视频在线播放 | 堕落人妻玛丽莲 | 免费看18禁 | 午夜国产福利 | 日本色情 电影在线播放 | 欧美精品性爱视频 | 午夜欧美精品久久久久久久 | 无码免费在线观看高清 | 91狠狠| 国产成人麻豆 | 伊伊成人网 | 国产人妻在线观看 | 国产熟妇乱妇熟色T区 | 女人18片毛片120分钟免费观看 | 黄片视频在线免费观看 | 国产精品人妻无码久久久苍井空 | 成人1区| 国内激情久久久久 | 最新最近日本中文字幕不亚洲 | 成人在线精品 | 久精品视频观看在线 | 五月天色色图 | 福利逼站 | 啪啪97 | 黄色视频大全在线观看 | 亚洲黄色无码 | 国操逼网 | 男女啪啪国产免费网站 | 学生妹毛片视频 | yw.193.爆乳尤物.ccm | 国产一级片操逼 | 青青草激情在线视频 | 中文字幕在线永久 | 蜜桃av艹逼 | 亚洲黄色成人视频 | 日韩精品在线电影 | 青青视频日本黄 | 久草福利网站首页 | 免费黄色性爱视频 | 狠操视频| 激情在线视频韩国青青 | 天天爱天天射 | 夜噜噜久久国产欧美日韩精品 | 色色小视频 | 成人av影视在线观看国产高清 | 91视频黄| 欧美精品成人一区二区在线观看 | 台湾激情中文网 | 免费在线观看黄色片 | 大香蕉婷婷丁香五月 | 亚洲日韩黄色 | 加勒比无视频网站 | 老黄视频网站 | 色岛国视频在线播放 | 长腿女神打扫偷懒被主人猛操惩罚 | 操逼在线看| 黄色片日逼 | 欧美成人性爱视频网站 | 开心成人激情 | 插逼網站 | 91禁在线| 国产三级片视频 | 亚洲精品13 | 91成人在线影院 | 日逼日逼日逼日逼 | 国产喷潮| 亚洲女人天堂AV | 精品中文字幕97A片免费视频 | 在线看一区二区三区四区 | 天天干天天操青青草 | 国产中文字幕在线 | 翔田AV无码秘 三区 | 亚洲啪啪啪网站 | 91ThePorn国产 | 人妻夜夜爽天天爽4区 | 日本A级特黄视频论坛 | AV性爱在线 | 欧美大鸡吧在线 | 麻豆精品秘 国产 | 一集黄色毛片 | 青草国产在线 | 操日小骚屄网站 | 女人高潮a毛片在线看 | 91乱子伦国产乱子伦 | 特级茜茜人体444WWwtini | 国产白丝袜足交网站大全 | 亚洲成人综合色图 | 天堂俺去俺来也WWW | 人人妻人人干 | 精品久久免费一区二区三区 | 97精品云霸高清在线视频小说 | 99视频在线免费观看 | 呜呜视频网站在线观看 | 后入少妇在线观看 | 91蝌蚪91 九色啦 | 国产黄色影片免费 | 亚洲日本番视频在线 | 免费在线无毒av毛片久 | 99精品视频综合 | 苍井空一级婬片A片AAA片动漫 | 先锋AV网址 | 国产黄色视频哪里看 | 一本道一区二区 | 狠狠天天久久 | 午夜高清性爱视频 | 天天干视频| 青青自拍视频免费观看 | 在线黄色网 | 伊人在线免费视频 | 国产一区二区毛片 | 成人网站久久视频 | 爱爱小网站 | 亚洲色图成人网站 | 伊人大久久 | 亚洲日韩一本道 | 成人aA免费看 | 日批视频在线 | 日韩中文无码字幕 | 久久色在线视频 | 男女内射动漫网站 | 日精品在线 | 猫咪www成人免费网站无码 | 波多野结衣不打码视频 | 精品久久久久99水蜜桃 | 91精品少妇高潮一区二区三区不卡 | 国产日韩在线观看一区 | 亚洲精品一区二区三区在线观看 | 日本黄色片一级视频 | 伊人成人在线视频观看 | 色播播五月天 | 青草视频在线观看无码 | 黄色成人视频免费网站 | 操逼操逼操 | 九一网站平台直接观看 | 护士AV无码A片在线观看 | 久久肏逼 | 视频肏屄 | 毛片在线看不卡 | 四虎久久久国产无码精品 | 国产精品18欠久久久久久 | 丁香激情国产色五月 | 大香蕉福利在线 | 天天撸天天搞 | 波多野结衣操逼视频 | 丰满人妻一区二区三区性色 | 国产伦精品一区二区三区四区视频 | 男女操逼视频免费观看 | 欧美国产日韩色图 | 台湾中文无码 | 乱伦黄色网| 亚洲色逼| 国产精品传媒网站 | 久久久精品三级片 | 日本黄电影在线看 | 中文黄色字幕 | 伊人乱伦小说 | 日韩午夜无码 | 亚洲一区欧美日韩国产 云播 | 俺来也www久久婷婷 | 羞羞影音大全 | 91ThePorn国产在线观看 | 三级在线网 | 国产成人精品视频免费 | 亚洲精品娱乐网 | 成人肏逼视频在线 | 久操视频免费观看 | 伊人网在线视频 | 竹菊国产精品成人竹菊影视 | 国产资源影音先锋 | 超碰自拍中文字幕 | 大黑鸡巴操逼 | 免费黄色网页 | 操逼视频在线观看视频 | 九九全国免费视频 | 亚洲www在线观看 | 激情小视频国产在线播放 | 久久99精品久久只有精品 | 91久久婷婷亚洲精品成人 | 无码ww | 中文字幕人乱码中文字的预防方法 | 天天日日天天 | 日韩色综合| 影音先锋琪琪色 | 日日碰狠狠添 | 黄片视频免费看 | 嫩草97| 成人无码操屄AV大片 | 99久久小视频 | 色大香蕉色大香蕉色大香蕉色大香蕉色色 | 学生妹A毛片 | 日本丰满少妇黄大片在线观看 | 国产夫妻操逼视频 | 香蕉色色网站 | 在线观看免费网站黄 | 免费av毛片 | 4438全国成人 | 婷婷五月天丁香 | 色先锋av天天操 少妇 后入 视频 少妇精品一区二区 | 操你吧欧美性爱 | 日韩三级在线免费观看 | 日韩经典一级片 | 国产女女在线观看 | 操xxx| 天天色天天日天天干 | 豆花无码成人无码视频 | 日日嗨av一区二区三区免费 | 日韩一级黄色视频 | 东方欧美在线 | 最新三级av | 九色自拍视频 | 色偷偷久久一区二区三区 - 百度 涩小说校园春色图片区视频区小说区 | 色九月婷婷国产 | 亚洲v^天堂在线 亚洲xxxx护士 | 精品国精品自拍自在线 | 影音先锋电影一区二区 | 超碰在线日韩 | 在线看国产黄 | 影音先锋国产av 影音先锋麻豆传媒 | 色五月婷婷操逼 | 亚洲色逼视频 | 日本黄色视频免费 | 色婷婷国产精品免 | 免费国产一级黄色电影 | 国产熟女视频 豆花视频 | 亚洲无码高清黄色视频网站 | 欧美在线一区二区 | 日日摸日日碰 | 骚逼爆操| 夜色五月丁香久久 | 亚洲精品视频成人 | 精品人伦一区二区三区蜜桃网站 | 日屄在线看 | 扒开屁日本网视频 | 日本黄色免费一级A片 | 麻豆精品內射 | 奇米av| 欧美一级精品在线视频免费 | 久久夜色精品国产噜噜亚洲AV | 国产毛片精品一区二区色欲黄A片 | av天堂中文在线 AV无码免费观看 www.手机av | 久久久久久成人影片 | 美女免费在线被干 | 色欲影视,淫色淫香 | 精品国产91乱码一区二区三区 | 69久久久久久久 | 欧美二级在线 | 五月天色中色在线视频 | 日本中文久草视频在线 | 欧美 级毛片一进一出 | 影音先锋女人资源 | 欧美骚| 免费黄色电影网址日韩 | 亚洲欧美日韩性爱 | av三集在线 | 黄色视频日本在线观看免费 | 亚洲欧美性爱视频 | 天天操天天好逼网 | 韩国小视频| 激情网站4438 | 亚洲无码一区在线观看 | 国产三级韩国三级日本三级99 | 成人免费毛片 嘿嘿连载视频 | 狼友视频免费在线观看 | 欧美色图亚洲激情 | 中国三级毛片 | 亚洲秘 无码一区二区三区密桃 | 水蜜桃一区二区 | 亚洲狼人综合干 | 亚洲一二三四 | 国产黄色视频在线看 | 久久久久无码精品国产sm大站 | 毛片电影在线香 | 色婷婷六月 | 五月婷婷丁香花 | 这里只有免费精品6 | 俺去啦在线视频 | 在线看黄v | 超碰97人人艹 | 尻屄视频可以在线观看 | 免费a级猛片在线观看,女人毛片a级大学 | 色婷婷4 色婷综合 | 国产精品久久久久久久久久久免费看 | 91av在线在线 | 欧美熟妇激情一区二区三区 | 91电影在线 亚洲精品 | 操屄黄色视频 | 丰满熟女一区二区三区在线播放 | 日韩熟悉30p | 91在线无码精品在线看 | 日本高清黄色视频 | 国产无遮挡A片又黄又爽 | 欧美人在线播放成 | 欧美国产性爱 | 国内精品视频在线观看免费 | 国产精品盗摄!偷窥盗摄 | 日本三级网站在线播放 | 亚洲综合成人在线视频 | 亚洲人成亚洲人成在线观看 | 日本中文在线 | 激情无码一区二区三区 | 中文字幕无码Av在线看 | 操逼18禁 | 色也俺一区| 成年人毛片国产网站国产片 | 老太色HD色老太HD - 百度 | 色无五月 | 日产精品高潮呻吟AV久久 | 国产精品98 | 日批视频在线免费观看 | 超碰永久在线 | 欧美成人网站在线 | 一区二区三区电影网 | 国产又白又嫩又紧又多水A片视频 | 草热视频在线 | 免费观看美女裸体网站 | 老鸭窝AV在线 | 小视频一区 | 在线视频观看一区 | 最新版中文官网资源 | 黄 色 视 频小便一区二区三 | 三级无码AV在线 | 欧美a片在线看 | 中国美女操逼 | 国内一级黄片 | 波多野吉衣在线观看视频918 | 翔田千里无码流出两部 | 一级做a爰片久久毛片A片 9 1? | 国产熟女视频 | 蜜臀久久99精品久久久久久酒店 | 国产又黄又 | 久久精品一区二区三区不卡牛牛 | 国产AV 无码 乱噜噜 | 成人精品导航 | 婷婷丁香五月天欧美 | 激情网五月 | 五月天激情性爱 | 国产情侣在线视频 | 香蕉视频911 | 久久五月丁香 | 开心激情婷婷五月天 | 直接能看的黄色片网址 | 污污污免费视频网站 | 狠狠色2020 | 欧美性爱免费在线视频海量版 | 国产美女精品久久久 | 国产女人被躁到高潮的AV | 欧美成人午夜77777 | 99精品店视频 | 91麻豆精品 | 国产青青操娱乐 | 天堂Av在线成人电影 | 国产污污网站 | 亚洲天堂小说视频 | 中文人妻无码一区二区三区久久 | 在线观看免费黄色视频网站 | 欧美日韩一级视频 | 黄色一级视频免费 | 7777奇米影视 | 久久在线播放 | 伊人成年网站综合网 | 国产无码专区 | 欧美黑人视频在线 | 97超碰人人操 | 日本高清色情视频 | 音影先锋男人资源站 | 一卡二卡无码 | 色五月无码 | 欧美操逼视频 | 欧美精在线 | 中国一区二区毛片 | 亚洲最新| 伊人大香蕉综合 | 午夜成人精品视频免费在线观看 | 国产免费1区 | 免费观看黄色a片 | 久久伊人色婷婷 | 婷婷五月天网址 | 亚洲不卡视频 | 永久官看美女裸体网站 | 女人18片毛片90分钟免费 | 男女啪啪网站免费 | 嗯~公啊~嗯~挺进啊~A片视频 | 日韩黄片在线看 | 亚洲色撸撸视频图片 | 乱伦一级毛片 | 熟老女人色| 超碰在线手机 | 在线免费看黄色 | 亚洲青青草在线视频 | 特黄AAAAAAA免费无码 | 麻豆免费视频 | 亚洲中文综合 | 骚逼操| 大香蕉伊人av | 国产精品乱码69一区二区三区 | 欧美成人精品激情在线在线 | 欧美一级视频亚洲一级视频免费 | 亚洲丁香五月 | 精品自拍偷拍 | 日本一区二区三区久久久久久久久不卡免费 | 又大又黄又爽 | 小黄片网址 | 日韩精品人妻一区二区 | 香丁五月在线 | 一级A片播放 | 中文字幕在线看片 | 国产激情av在线观看 | 艹逼图 | 无码日 | 18禁成人h网站 | 91国产黄片 | 91精品在鸭窝精在线观看不卡 | 91av视频大全 | 欧美激情一区二区A片成人牛牛 | 成人三级视频久久 | 91精品久久久久久久 | 河北最大AV网站 | 日韩国产无码一区 | 影音先锋人人操 | 欧美精品久久久久久久多人混战 | AV一区波多野结衣 | 在线观看高清无码 | 男女污污污| 欧美精品系列 | 亚洲欧美中文日韩在线观看 | 人人操操人人 | 五月丁香婷婷五月 | 豆花视频精品 | 日韩综合 | 精品免费一区二区三区四区 | 亚洲最大视频 | 亚洲成人网站无码在线观看 | 欧美乱伦一区二区三区 | 人人草青青草 | 色吧AV乱伦 | 黄片www.| 网站一区二区三区 | 黄色视频在线免费直播 | 欧美成人无码一区二区三区 | 九九视频免费 | 成人网中文字幕 | 国产999久久久 | 老欧性老太色HD大全 | 777中文字幕 | 麻豆一级A片久久久乱码 | 黄网在线免费看 | 国产精品爆乳露双乳呻吟 | 青娱乐av免费观看 | 国产 码在线成人网站 | 日韩大香焦网 | 免费看黄A级毛片成人片 | 日韩 欧美 高清 | a一级黄色视频 | 成年人无码 | 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 青青草手机在线视频 | 在线播放一区 | 国产3级在线观看 | 免费可以在线看A∨网站 | 国产激情小视频 | 婷婷在线网站 | 欧美自拍视频在线 | 久久不卡 | 人人草人人操 | 看黄色大片网站操逼 | 高清无码五月天 | 屁屁网站| 欧美理论在线视频 | 大香蕉一人在线网 | 午夜精品久久99热蜜桃剧情介绍 | 中文字幕久久人妻被中出一区精品 | 日韩va| 区一区二区三视频 | 依依成人大香蕉 | 欧美成人手机在线观看 | 大黑鸡巴干中国美女大肥臀视频 | 青娱乐成人在线 | 亚洲三级视频手机在线观看 | 亚洲欧洲在线免费观看 | 99视频+国产日韩欧美 | 亚洲a视频在线观看 | 神尾舞无码 | 亚洲一区欧美国产日韩 云播 | 亚洲一区动漫 | 美女操逼视频免费看 | 最新的黄色网址 | 亚洲国产精品久久久 | 欧美性猛交XXXXX按摩欧美 | 国产小黄片在线播放 | 人人爱人人撸 | 翔田千里 50岁 无码 | 青青操视频在线观看 | 99热这里只有精品9 | 欧美午夜成人性爱网站 | 奇米影视7777 | 国产极品久久久久久久久久 | 国产激情视频自拍 | 乱伦视频网址 | 99热最新网址 | 青娱乐国产精品视频 | 操逼www | 日韩一区二区精品视频 | 五月丁香激情婷婷 | 日韩一级欧美一级黄色大片 | 六月婷婷七月丁香 | 人人干人人撸 | 黄色视频直接看 | 免费一区二三区 | 韩国精品亚洲精品 | 网站一区二区三区 | 午夜久久久久久久久久影院 | 激情综合五月丁香 | 国产成人AV无码一区二区三区 | 国产精品粉嫩在线播放 | 免费毛片基地 | 国产第3页 | 国产乱伦三级片 | 欧美黄片免费 | 青青草男人的天堂 | 3344在线观看免费视频 | 很污的网站 | 国产又爽 又黄 免费观看视频 | 九色 蝌蚪 熟女偷拍 | 天堂av在线免费观看 | 国产成人无码AⅤ片免费播放 | 男女在线观看视频 | 小电影在线观看黄.999 | 欧美成人精品一区二区特级毛片 | 大香蕉手机视频 | 久久毛片基地 | 午夜在线 | 97AV在线 | 黄色无码在线视频 | 性爱国产一区 | 亚洲欧美在线视频一区 | 亚洲无吗视频在线观看 | 女人毛片视频 | 大陆操屁屁视频在线观看 | 三级小视频在线观看 | 请立即播放黑人大黑吊日白人小嫩逼视频 | 俺也去成人 | 欧美一级成人网站 | 丁香五月网 | 超碰成人无码 | 黄色电影在线免费观看网站 | 日韩欧美人妻无码精品 | 一级欧美一级日韩片段 | 国产亚洲欧美性爱 | 嗯~进去~好大~好满女攻视频 | 欧美一级专区, | 国产在线色吧视频 | 人人草人人 | 中文字幕第256页 | 欧美国产精品一二三产品在哪买 | 三级片www. | 成人熟妇 | 久射网 | 夜夜夜撸 | 翔田千里一区二区三区Av | 国产AV中文 | 大色综合色综合网站 | 婷婷五月激情综合 | 色婷婷激情AV视 | 天堂网视频欧美 | 8xxxxx操 | 韩国九九jiu | 国产成人一区二区三区 | 精品一区二区三区东京热 | 久久综合第一页 | 中文字幕一区二区三区乱码视频 | 熟女视频一区 | Japanese熟女六十路。无限是 | 青青草,新红楼丁香在线 | 国产精品久久久久久久久借妻 | 麻豆91麻豆国产传媒的特点 | 91精品国自产 | 直接看黄色电影 | 成人日日夜夜av 成人三级电影久久 | 中文字幕欧美风情 | 国产理论视频在线观看 | 亚洲AV导航 | 三级网站永久大全 | 黄色成人网站在线观看免费 | 乱轮小说网站日韩 | 视频一区二区三 | 成人免费乱码大片a毛片蜜芽 | 青青草无码视频免费播放 | 欧美性久久久 | 无码成人在线观看 | 美女被大鸡吧操视频网站在线播放 | 又黄又爽又粗又大又长又硬视屏 | 国产无码精品在线 | 爱情岛成人 18网站 | 日韩三级片在线看 | 日韩va | 成人电影伊人网 | 国产精品久久久久久久久久久久久免费看 | 亚洲性爱AV在线观看 | 国产一级A片在线观看 | 99精产秘 18 在线观看 | 日本无吗免费视频 | 久久免费高清视 | 97国产超碰 | 伊人大香蕉伊人 | 草逼片 | 黄色视频网站免费在线观看 | 亚洲偷拍22 | 日韩一区二区不卡视频 | 国产日韩欧美操 | 黄色片在线免费看 | 丁香五月激情中文 | 中文字幕国产第一页 | 成人91久久 | 欧美国产成人精品一区二区三区 | 黄色A在线观看 | 国产激情视频久久久久久久 | 国产v欧美v亚洲v精品v | 中文字幕有码第一页 | 999国产精品999久久久久久 | 翔田千里中文字幕无码 | 欧美三在线 | 欧美综合性爱网 | 国产夫妻视频 | 一本色道久久综合熟妇人妻 | 成人免费在线视频网站 | 大黄网站在线观看 | 久久成人91 | 欧美三级一级 | 免费看黄色大片 | 亚洲AV无码成人精品区在线欢看 | 免费观看的黄色视频 | 亚洲欧美性爱一区 | 大香蕉伊人丁香五天在线视频 | 国产精品高潮久久久久久无码 | 天天搞天天插 | 成人性爱视频免费网站 | 亚洲性爱操逼大片 | 青娱乐国产亚洲粉色 | 日韩色情片 | 精品人妻无码一区二区出白浆潮喷 | 欧美色图9| 狠狠撸在线视频 | 久久99热人妻偷产国产 | 伊人大香蕉,一级性片 | 欧洲亚洲日本在线观看 | 操屄视频欧美日韩在线 | 蜜桃Av噜噜一区二区三区四区 | 青娱乐凹凸视频 | 国产黄色视频网站免费 | 青青草视频免费看 | 亚洲视频看看 | 成人91视频| 亚洲色视 | 国产AV电影院 | 色吊丝永久性观看网站在线观看 | 国产最新在线 | 无码日韩一区 | 日骚逼网| 国产视频久久久 | 麻豆精品无码久久久 | 人人爱,天天草 | 免费一级黄色录像 | 久草香蕉视频 | 久久久久久99精品久久久 | 久久无码电影 | 免费无码人成视在线观看不卡 | HEZ-502搭讪绝品人妻系列 | 91视频成人一区二区 | 在线观看国产黄色 | 国产婷婷内射一级二 | 综合插插插网 | 成人淫色网站 | 中文在线A∨在线 | 国产极品在线播放 | 亚洲AV成人无码一区二区三区在线观看 | 国产天美传媒 | 日本一级黄色A片 | 操逼91视频 | 无码视频免费看 | 男女黄色在线观看 | 久久精品影片 | 香蕉视频黄在线观看 | 91成人亚洲 | 啪啪视频H | 麻豆成人久久精品二区三区91 | 成人三级片av | www.激情乱伦 | 爱爱黄色视频 | 亚洲AV无码国产精品 | 五月天婷婷av | 亚洲综合大香蕉 | 亚洲欧美国产精品久久久久久久 | 婷婷五月免费视频 | 就要看日逼网站 | 伊人大香蕉婷婷 | 国产视频第一区 | 久久久久久成人电影 | 一区二区三区无码中文 | 黄色免费一级片 | 付妙菱 女大学生羞涩 | 大香蕉国产三级 | www.婷婷五月天.com | 苍井空电影一区二区三区 | 国产自产21区 | 亚洲在线观看高清无码 | 操逼莫熊| 99热官网| A∨免费在线观看 | 69久久成人精品 | 亚洲AV无码乱码精品 | 国产一区二区免费看 | 人人爽人人爽人人爽AV片特级 | 久久久av影院 | 久99久在线观看视频 | 一级日皮视频 | 国产视频无码 | A片网站在线观看 | h片在线免费播放 | 自拍偷拍第六页 | 哪灬翁公你的鸣巴好大好爽视频 | 伊人大香蕉在线狼人 | 插一插色一色撸一撸视频在线 | 无码激情 | 免费的黄片网站 | 免费黄色1级毛片。 | 九九伊人大香蕉 | 青青青国产在线观看 | 欧美成人精品一区二区三区在线看 | 欧美成人有限公司 | 天天舔天天爱 | 韩国精品 A片 | 国产又嫩又爽又多水 | 91丨国产丨精品丨丝袜 | 在线无码视频免费观看 | 色婷婷在线播放视频 | 成人艹| 久久伊人色五月 | 欧美午夜激情视频 | 六月丁香五月婷婷 | AV无码网 | 三级片日日 | 狠狠躁日日躁夜夜躁A片2022 | www.国产乱伦 | 久久夜色精品国产亚洲AV |