wertert has asked for the wisdom of the Perl Monks concerning the following question:

Hi All I have a system that has a standard telnet username password prompt to get access. Lets call this system X.
I also have a bit of software that can telnet to a port and performs a logging function. ( Records everything typed and printed on the console ). It also has a set of pattern based rules that can fire certain actions when certain stings are seen from system X.
The only problem with this piece of software is that it DOES NOT handle username and password prompts. Now - i hear you cry - thats rubbish. Yes is it but i've got to use it.
The idea : I create a process that sits between system X and the console. The process acts as both a telnet server and client. The client side performs a telnet onto the console using net::telnet which can handle the username password problem very nicely. The server side of the process creates a listen port using IO::socket into which the logging software can connect without a username password.
lines typed by the user from the logging software that arrive on the io::socket will simply be forwarded to the net::telnet connection. anything being printed on the console arriving from the net::telnet port will be forward back through the io::socket.
One slight complication is that events can occur on system X even if the user has not typed anything.
Has anyone written anything like this ?
wertert

Replies are listed 'Best First'.
Re: telnet passthrough
by strider corinth (Friar) on Nov 07, 2002 at 21:37 UTC
    This sounds like a great idea (but see below). As to your complication, I'd suggest taking a look at Net::Telnet's get() command. I don't know exactly how you plan for your system to work, but if there's a space in it where you think there might be unexpected output from system X, you could get() for a certain timeout in those places. If the problem is more generally present while your program is running, it might be a good idea to have a loop, get()ing output from system X with a timeout and then reading input from the logging system.

    I'm always thinking about this stuff, and you probably have too, but I feel compelled to mention that anybody who can telnet to your passthrough program will have access to machine X as the user you're logging in with. Telnet isn't the most secure protocol anyway, but it's worth thinking about.

    Overall, this sounds like a pretty cool solution to me.
    --
    Love justice; desire mercy.
Re: telnet passthrough
by logan (Curate) on Nov 08, 2002 at 04:47 UTC
    So, you need to simulate a telnet session? You send login and password, and detect a prompt for confirmation. You send string X, and expect response Y. You send string A, and expect response B, C, or D.

    I'd suggest using Expect.pm. It's got a built in function for detecting the prompt, and it's really easy to fork through possible responses.

    -Logan
    "What do I want? I'm an American. I want more."

Re: telnet passthrough
by Massyn (Hermit) on Nov 08, 2002 at 09:47 UTC

    I had a similar idea... You create like a firewall type application, where for example you could do an ssh connection to this box from the web, and it will then do the telnet for you from there on. Of course this idea requires some programming, or you could just ssh into a Linux box over the web, and then telnet from there ;-)

    One option would be to map a port (I think the command is redir on Linux), which will allow you to connect to a gateway box, which will then redirect you automatically to the other box.