#! /usr/bin/env python # Minimal interface to the Internet telnet protocol. # # It refuses all telnet options and does not recognize any of the other # telnet commands, but can still be used to connect in line-by-line mode. # It's also useful to play with a number of other services, # like time, finger, smtp and even ftp. # # Usage: telnet host [port] # # The port may be a service name or a decimal port number; # it defaults to 'telnet'. import sys, posix, time from socket import * BUFSIZE = 1024 # Telnet protocol characters IAC = chr(255) # Interpret as command DONT = chr(254) DO = chr(253) WONT = chr(252) WILL = chr(251) def main(): host = sys.argv[1] try: hostaddr = gethostbyname(host) except error: sys.stderr.write(sys.argv[1] + ': bad host name\n') sys.exit(2) # if len(sys.argv) > 2: servname = sys.argv[2] else: servname = 'telnet' # if '0' <= servname[:1] <= '9': port = eval(servname) else: try: port = getservbyname(servname, 'tcp') except error: sys.stderr.write(servname + ': bad tcp service name\n') sys.exit(2) # s = socket(AF_INET, SOCK_STREAM) # try: s.connect((host, port)) except error, msg: sys.stderr.write('connect failed: ' + repr(msg) + '\n') sys.exit(1) # pid = posix.fork() # if pid == 0: # child -- read stdin, write socket while 1: line = sys.stdin.readline() s.send(line) else: # parent -- read socket, write stdout iac = 0 # Interpret next char as command opt = '' # Interpret next char as option while 1: data = s.recv(BUFSIZE) if not data: # EOF; kill child and exit sys.stderr.write( '(Closed by remote host)\n') posix.kill(pid, 9) sys.exit(1) cleandata = '' for c in data: if opt: print ord(c) s.send(opt + c) opt = '' elif iac: iac = 0 if c == IAC: cleandata = cleandata + c elif c in (DO, DONT): if c == DO: print '(DO)', else: print '(DONT)', opt = IAC + WONT elif c in (WILL, WONT): if c == WILL: print '(WILL)', else: print '(WONT)', opt = IAC + DONT else: print '(command)', ord(c) elif c == IAC: iac = 1 print '(IAC)', else: cleandata = cleandata + c sys.stdout.write(cleandata) sys.stdout.flush() try: main() except KeyboardInterrupt: pass
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
.broadcast.pyo.40009 | File | 546 B | 0644 |
|
.echosvr.pyo.40009 | File | 826 B | 0644 |
|
.finger.pyo.40009 | File | 1.13 KB | 0644 |
|
.ftp.pyo.40009 | File | 2.88 KB | 0644 |
|
.gopher.pyo.40009 | File | 10.08 KB | 0644 |
|
.mcast.pyo.40009 | File | 2.12 KB | 0644 |
|
.radio.pyo.40009 | File | 470 B | 0644 |
|
.rpython.pyo.40009 | File | 981 B | 0644 |
|
.rpythond.pyo.40009 | File | 1.3 KB | 0644 |
|
.telnet.pyo.40009 | File | 2.1 KB | 0644 |
|
.throughput.pyo.40009 | File | 2.41 KB | 0644 |
|
.udpecho.pyo.40009 | File | 1.98 KB | 0644 |
|
.unicast.pyo.40009 | File | 455 B | 0644 |
|
.unixclient.pyo.40009 | File | 424 B | 0644 |
|
.unixserver.pyo.40009 | File | 593 B | 0644 |
|
README | File | 628 B | 0644 |
|
broadcast.py | File | 283 B | 0644 |
|
broadcast.pyc | File | 546 B | 0644 |
|
broadcast.pyo | File | 546 B | 0644 |
|
echosvr.py | File | 739 B | 0755 |
|
echosvr.pyc | File | 826 B | 0644 |
|
echosvr.pyo | File | 826 B | 0644 |
|
finger.py | File | 1.23 KB | 0755 |
|
finger.pyc | File | 1.13 KB | 0644 |
|
finger.pyo | File | 1.13 KB | 0644 |
|
ftp.py | File | 3.84 KB | 0644 |
|
ftp.pyc | File | 2.88 KB | 0644 |
|
ftp.pyo | File | 2.88 KB | 0644 |
|
gopher.py | File | 9.55 KB | 0755 |
|
gopher.pyc | File | 10.08 KB | 0644 |
|
gopher.pyo | File | 10.08 KB | 0644 |
|
mcast.py | File | 2.16 KB | 0755 |
|
mcast.pyc | File | 2.12 KB | 0644 |
|
mcast.pyo | File | 2.12 KB | 0644 |
|
radio.py | File | 287 B | 0644 |
|
radio.pyc | File | 470 B | 0644 |
|
radio.pyo | File | 470 B | 0644 |
|
rpython.py | File | 714 B | 0755 |
|
rpython.pyc | File | 981 B | 0644 |
|
rpython.pyo | File | 981 B | 0644 |
|
rpythond.py | File | 1.19 KB | 0755 |
|
rpythond.pyc | File | 1.3 KB | 0644 |
|
rpythond.pyo | File | 1.3 KB | 0644 |
|
telnet.py | File | 2.94 KB | 0755 |
|
telnet.pyc | File | 2.1 KB | 0644 |
|
telnet.pyo | File | 2.1 KB | 0644 |
|
throughput.py | File | 2.04 KB | 0755 |
|
throughput.pyc | File | 2.41 KB | 0644 |
|
throughput.pyo | File | 2.41 KB | 0644 |
|
udpecho.py | File | 1.43 KB | 0755 |
|
udpecho.pyc | File | 1.98 KB | 0644 |
|
udpecho.pyo | File | 1.98 KB | 0644 |
|
unicast.py | File | 230 B | 0644 |
|
unicast.pyc | File | 455 B | 0644 |
|
unicast.pyo | File | 455 B | 0644 |
|
unixclient.py | File | 232 B | 0644 |
|
unixclient.pyc | File | 424 B | 0644 |
|
unixclient.pyo | File | 424 B | 0644 |
|
unixserver.py | File | 414 B | 0644 |
|
unixserver.pyc | File | 593 B | 0644 |
|
unixserver.pyo | File | 593 B | 0644 |
|