[ Previous ] [ Next ] [ Index ] [ C-Kermit Home ] [ Kermit Home ]
Article: 11031 of comp.protocols.kermit.misc
From: [email protected] (Frank da Cruz)
Newsgroups: comp.protocols.kermit.misc
Subject: Case Study #13: PPP Dialing
Date: 21 Jan 2000 18:09:01 GMT
Organization: Columbia University
For years, people have been asking us how to use C-Kermit as their PPP dialer in Linux and other kinds of Unix. Until now, there has never been a good answer. There were some half-good answers, such as those found in Item 27 of the Kermit FAQ. The problem was that any connection opened by C-Kermit would be closed when it exited, so C-Kermit had to be kept alive (even though it wasn't doing anything) for the duration of the PPP connection.
C-Kermit 7.0 includes a new command that handles PPP dialing in a natural and straightforward way:
In the normal case, no files are closed, so the EXEC'd command inherits the open files, read/write pointers, working directory, process ID, user ID (unless the command is setuid'd), group ID (unless the command is setgid'd), etc; in UNIX, the EXEC command is simply a front end for the execvp() system service.
If the /REDIRECT switch is included, then if a connection is open (SET LINE or SET HOST), it becomes the standard input and output of the EXEC'd program. This is how PPP dialing is done.
Here's an example for Linux, in which we dial a traditional terminal server that issues a login and password prompt (as opposed to, say, using PAP or CHAP authentication). We assume that the script has already set up the myuserid and mypassword variables (normally the password should be prompted for, not stored on disk).
set modem type usr ; Specify the kind of modem you have set line /dev/ttyS1 ; Specify the device it's connected to set speed 57600 ; and the speed set flow rts/cts ; and flow control. set dial retries 100 ; Try the dial sequence up to 100 times. dial {{+1(212)555-1212}{+1(212)555-1213}{+1(212)9-555-1214}} if fail exit 1 for \%i 1 16 1 { ; Try up to 16 times to get login prompt input 10 Login: ; Wait 10 sec for it to appear if success break ; Got it - proceed... output \13 ; Send a carriage return and try again } if ( > \%i 16 ) exit 1 NO LOGIN PROMPT lineout \(myuserid) ; Send user ID input 30 assword: ; Wait for Password prompt if fail stop 1 NO PASSWORD PROMPT lineout \m(mypassword) ; Send the password. exec /redirect pppd ; Replace ourselves with pppd.
Just before the EXEC command, you might also need to send a command to the terminal server that tells it to start PPP; some terminal servers always start PPP, some give you a choice of Telnet, Rlogin, PPP, SLIP, LAT, and/or other services.
Notice the advantages over the well-known "chat script":
The EXEC command is documented in Section 1.23 of the C-Kermit 7.0 Update Notes. The syntax of the DIAL command in the example is explained in Section 2.1.15; it lets you give a list of numbers to be dialed in case the first one doesn't answer; as noted, the only way to do this in earlier C-Kermit versions was with a dialing directory.
If you have trouble dialing, add the command SET DIAL DISPLAY ON before the DIAL command, so you can watch the interactions between Kermit and the modem.
The sample script is not universal, but not that hard to generalize by making it a Kerbang script (called, say, "startppp") that takes phone numbers, username, and password as command-line arguments and prompts interactively for any of these that are missing.
- Frank
[ Top ] [ Previous ] [ Next ] [ Index ] [ C-Kermit Home ] [ Kermit Home ]
C-Kermit 7.0 / Columbia University / [email protected] / 21 Jan 2000