用Python实现telnet,即编写telnet的服务端程序
用python实现一个telnet的服务端程序,仿telnet的.
客户端为cmd.exe就可以了.
怎么实现?比如登陆过程
我的计划是这样的:
在登陆上服务端的IP,PORT后,
服务端向客户端发登陆消息
服务端向客户端发送"name:",提示用户输入用户名.
客户端,用户在控制台输入字符
服务端接收客户端发过来的字符,并回显到客户端.
当客户端按回车时,服务端接收到回车字符,判断当前命令(在此为用户输入的登陆用户名),记录该用户名及其密码.并向客户端发送"password:",继续等待客户端的输入.
客户端输入命令(此处为密码),这个过程同上,也是通过服务端回显.然后读到回车时,判断输入的密码是否于已经记录下的密码相符.
如果相符,服务端向客户端输出命令提示符,如:cisco>
否则向客户端输出错误提示信息...
这个过程的python程序应该如何写?求各位高人帮忙,急需,谢谢!!!
问题点数:100、回复次数:6Top
1 楼ChumpKlutz(朽木)回复于 2006-03-09 09:43:44 得分 10
用telnetlib中的Telnet类
Telnet类的方法如下:
read_until( expected[, timeout])
read_all( )
read_some( )
read_very_eager( )
read_eager( )
read_lazy( )
read_very_lazy( )
read_sb_data( )
open( host[, port])
msg( msg[, *args])
set_debuglevel( debuglevel)
close( )
get_socket( )
fileno( )
write( buffer)
interact( )
mt_interact( )
expect( list[, timeout])
set_option_negotiation_callback( callback)
例:
import getpass
import sys
import telnetlib
HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()
Top
2 楼ndzmh(冰点)回复于 2006-03-09 13:39:19 得分 0
你写的这个是python的客户端,客户端用cmd.exe就行了.
我想实现的是服务端,模拟就行了.
最好是命令,提示符,报文消息都是存在文件中.
比如说,我们在控制台输入telnet IP port,回车后,
服务端会向客户端发送登陆消息(该消息存在文件中,比如:文件中登陆消息为"login success!",则控制台登陆成功后就会显示"login success!")
然后用户在控制台用键盘手动敲入admin(用户名),服务器收到,然后怎么处理一下,再向控制台输出密码提示符,等待用户输入.
然后用户再输入密码,服务器接收,与文件中记录的用户名密码比较,如果正确,将文件中相应的报文信息输出到客户端....
Top
3 楼xyzxyz1111(程序员的自我修养)回复于 2006-03-09 15:57:02 得分 0
最基本的socket编程就可以了
socket
listen
while ...
select
accept
read
write
无非如此
Top
4 楼ndzmh(冰点)回复于 2006-03-09 23:28:00 得分 0
模式大概就是这个样子,我当然知道啦~
但我现在是从文件中读命令,读返回给Client的消息,只有命令是从cmd.exe输入的.
而对于特定命令的输入,要返回特定的消息.
比如你在name:提示符下输入user,则返回的消息是:password:
但你再次输入user,就不会再返回那个消息了.Top
5 楼shhgs()回复于 2006-03-10 07:48:36 得分 10
Python标准类库里有TCPServer,你实现它,让它侦听端口,把听到的字符串送到subprocess模块,把返回的file object读出来,返回给客户端。
真搞不懂你实现这个干吗。Telnet的服务器到处都是,有必要用Python实现吗?Top
6 楼xyzxyz1111(程序员的自我修养)回复于 2006-03-10 11:05:10 得分 80
你是不是要实现一个有状态的server?实现一个状态机?
响应根据状态来决定行为,如果处于接受username状态,则响应Client送来的username信息,否则就不响应。
一般状态机可以用两种方法,一种是在一个函数里判断if .. elif ...
非形式化的描述如下
def handle(self, data):
if self.state == 0: # user name input
take_username(data)
write("password")
self.state == 1
elif self.state == 1: # take password
take_password(data)
if data == password"
write("cisco>")
self.state == 2
else:
self.close()
elif ...
这种模式
另外一种是定义一个__current_func,
def handle(self, data):
if self.__current_func:
self.__current_func = self.__current_func(data)
else:
self.close()
然后定义一系列的处理函数处理每个状态
def __on_init(self, data):
write("username")
return self.__on_username
__current_func = __on_init
def __on_username(self, data):
take_username(data)
write("password")
return self.__on_password
def __on_password(self, data):
if data == password:
write("cisco>")
return self.__on_other
else:
return None
如此而已
以上是非形式化的描述,你可以自己看看。
Top




