LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 886|回复: 11

谁有编制telnet服务器的经验?

[复制链接]
发表于 2004-4-1 15:55:03 | 显示全部楼层 |阅读模式
要求telnet上去后运行一个自己编写的shell,这个shell已经完成了,即通过telnet连接接收终端用户输入的命令行,然后将这命令行给shell执行,执行结果通过telnet返回到终端。

有经验大虾的可以给小弟指导一二。
没有经验的可以大家一起探讨探讨。
发表于 2004-4-1 16:43:19 | 显示全部楼层
服务器端要用重定向。
发表于 2004-4-1 16:52:29 | 显示全部楼层
登陆时候从passwd里读的shell路径改下不行?
 楼主| 发表于 2004-4-1 17:29:30 | 显示全部楼层
To 版主:
我目前的想法是这样的:编一程序telnet_svr监听端口,有连接后fork一新的进程,服务器继续监听;新的进程马上将STDIO_FILENO和STDOUT_FILENO定向到刚才监听accept()返回的文件描述符(不知道这样会不会有问题),然后执行shell中的main()中的代码。
但是我试了一下,好像有问题。就是shell输出的时候是以'\n'作为换行符的,但是再telnet,换行是被定义为"\n\r"(即回车、换行),结果telnet终端输出是乱七八糟。有些系统命令像ping什么的也没有原码,不能改,怎么办?
还有,以上说的程序架构有没有问题?
发表于 2004-4-1 20:24:48 | 显示全部楼层
ping之类的肯定有源码,此类工具的源码应该不难找呀,随便找个发行版就可以,或者你去gnu上看看。
就算没源码没关系呀,fork以后先dup2文件描述符,再exec就行了
发表于 2004-4-1 20:27:14 | 显示全部楼层
没搞懂,你既然已经有shell了,那还要ping干什么?
直接在shell里运行ping不就行了?shell就是干这个的嘛
 楼主| 发表于 2004-4-1 20:53:14 | 显示全部楼层
To libinary:呵呵,那个shell是自己写的一个,其实也就是读入命令行,再调用exec执行。我的意思是对于回车键telnet传送"\n\r",'\n'换行,'\r'回到行首,所以要实现终端回车换行得发送"\n\r",但是很多程序中就用
printf("……\n"),在telnet传送后只能在终端实现换行而不能回到行首,这样打印的结果就很乱,这怎么解决?
发表于 2004-4-1 21:23:57 | 显示全部楼层
这个应该在你的telnet里处理,把'\n'换成"\r\n"
 楼主| 发表于 2004-4-1 21:31:23 | 显示全部楼层
这个我也想到了,因为是调用exec执行命令行,有些命令没有源码,没法将'\n'换成'\n\r'啊
发表于 2004-4-1 22:52:01 | 显示全部楼层
exec应该是在telnet_svr里调用的,
你在telnet里处理'\n'
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表