Chinaunix

标题: 虚拟终端[virtual terminal]开发计划 [打印本页]

作者: romandion    时间: 2008-12-17 16:53
标题: 虚拟终端[virtual terminal]开发计划
在服务器或者许多没有终端界面的系统在调试下十分麻烦。想开发一个虚拟终端,DOS界面,可以集成到服务系统中,客户端可以通过telnet方面的调用。服务端库接口如下:

1.int vty_init(int port) ;

typedef int (*func_t)(int argc , char ** argv) ;

2.int vty_register_cmd(const char *cmd , func_t func) ;

3.int vty_unregister_cmd(cosnt char *cmd) ;

这个版本想借鉴ZEBRA的VTY,有兴趣的可以和我联系。
作者: flw    时间: 2008-12-17 17:33

作者: smalloc    时间: 2008-12-17 17:37
原帖由 flw 于 2008-12-17 17:33 发表

您吐啥?
作者: romandion    时间: 2008-12-17 17:57
原帖由 flw 于 2008-12-17 17:33 发表
utu:" /> utu:" /> utu:" /> utu:" /> utu:" />



哈,倒想请求FLW高见。
作者: flw    时间: 2008-12-17 18:07
你先搞个雏形出来,再来这里拉人吧。
前两天还有人说要搞操作系统呢。
再前两年还有人说要搞编译器呢。
再前几年还有人说要翻译 gdb 文档呢。
作者: romandion    时间: 2008-12-17 18:23
原帖由 flw 于 2008-12-17 18:07 发表
你先搞个雏形出来,再来这里拉人吧。
前两天还有人说要搞操作系统呢。
再前两年还有人说要搞编译器呢。
再前几年还有人说要翻译 gdb 文档呢。



虚拟终端很费时么?害得你老人家吃啥似的,狂吐不止呢。

我已经在做了,只是想快点完成而已。

如果有啥建议,我很欢迎。如果无聊的话,还是免开尊口。
作者: 雨过白鹭洲    时间: 2008-12-17 18:34
楼主应该把这个当成动力,等你搞出来的那一天,就可以有力地反驳

支持
作者: flw    时间: 2008-12-17 18:46
原帖由 romandion 于 2008-12-17 18:23 发表



虚拟终端很费时么?害得你老人家吃啥似的,狂吐不止呢。

我已经在做了,只是想快点完成而已。

如果有啥建议,我很欢迎。如果无聊的话,还是免开尊口。

你看你看,我本来就没打算说,是你“求”我说的,现在又骂我。
唉。你就不能把这当成是动力么。
作者: zdxvv    时间: 2008-12-17 18:49
吵架不好
泼冷水不好
作者: FuriousFive    时间: 2008-12-17 22:42
支持楼主行动证明!
作者: ilex    时间: 2008-12-17 23:15
支持楼主,
这样,如果楼主能够做到每5天回复一次本帖,贴当前的进展,我坚决用户楼主;

嗯嗯嗯,
如果,如果楼主一上来就咣咣咣的贴代码,那还是洗洗睡吧。
作者: romandion    时间: 2008-12-18 00:31
标题: 一. 我要作什么?
一.   我要作什么?

         虚拟终端是类似于TELNET/TELNETD的工具,他可以嵌入到无界面的服务系统中,允许用户通过远程登录到虚拟终端中,连接到目标服务系统。通过虚拟终端操作服务系统的内置命令,为无界面的服务系统提供一个友好的人机界面。
        第一阶段,我计划实现一个服务接口,允许TELNET的登录。这个接口以库的方式提供,可以很方便被其他服务系统所集成。
        第二阶段,我计划实现STDOUT/SSH等其他传输接口。
        第三阶段,我计划实现认证/加密等附加功能
        第四阶段,我计划添加自有协议,实现客户端接口。为图形界面提供支持。


源代码将参考TELNET/ZEBRA VTY。
作者: mingyanguo    时间: 2008-12-18 02:41
原帖由 flw 于 2008-12-17 02:07 发表
你先搞个雏形出来,再来这里拉人吧。
前两天还有人说要搞操作系统呢。
再前两年还有人说要搞编译器呢。
再前几年还有人说要翻译 gdb 文档呢。

这位同学总是说老实话……可是我们都不喜欢听老实话。都是那个什么大教堂集市的文章害的,让人真的以为弄根鸡毛放网上闭上眼念一句阿弥陀佛就能出来一锅鸡汤。
作者: 想飞的蜗牛    时间: 2008-12-18 09:50
呵呵 我前段时间才刚刚完成这个东东,程度就是你在12L说的第二阶段。第三第四阶段就是以后的事情咯。
不过我基于的系统是vxworks
作者: romandion    时间: 2008-12-18 10:37
标题: 走自己的路,让别人说去。
呵呵,楼上说的好啊,我想这个东西应该很有用。如果可以的话,可以发出来共享。当然能指导我的开发过程,也是很感激的。可能我作出的东西很烂,不过,既然这个东西有价值,就值得去做,难道不是么?


二.模块划分

1.传输层:负责客户端和服务端之间的数据传输,现在主要TELNET协议,以后还可能需要支持文件流或者其他协议,所以我准备以驱动模式做个接口,由其他协议来实现这个接口。现在先实现TELNET协议,参考TELNETD的代码。

2.命令管理:这个模块借鉴ZEBRA VTY的代码。以树管理,命令按目录存放,比如cmd/ls>。

3.线程管理:每个会话启动一个线程,该会话以串行方式,请求/应答。但允许中断应答,如ctrl+c。因为线程是平台相关,估计暂时先支持linux平台。
作者: romandion    时间: 2008-12-18 23:26
标题: 现有系统
呵呵,没有想到,已经有前辈完成了这样的功能,参考LIBCLI开源库,真是“英雄所见略同啊”。

感谢GUOSHA,我找到了LIBCLI,功能上基本能满足要求。看来也不是很难的样子。不过对TELNET的支持还是比较勉强,像带外数据什么的,都没有支持。
我还是继续按照自己的思路来做,即使作的不好,也可以来练练手。
作者: 期待天晴    时间: 2008-12-19 08:35
原帖由 flw 于 2008-12-17 18:07 发表
你先搞个雏形出来,再来这里拉人吧。
前两天还有人说要搞操作系统呢。
再前两年还有人说要搞编译器呢。
再前几年还有人说要翻译 gdb 文档呢。

搞操作系统的不是你么
作者: yangsf5    时间: 2008-12-19 09:10
原帖由 期待天晴 于 2008-12-19 08:35 发表

搞操作系统的不是你么

http://bbs.chinaunix.net/viewthread.php?tid=1327027

不是,谢谢。。
作者: romandion    时间: 2008-12-19 09:47
原帖由 yangsf5 于 2008-12-19 09:10 发表

http://bbs.chinaunix.net/viewthread.php?tid=1327027

不是,谢谢。。



呵呵,我没有那么大的目标,只想先做好一个,也许哪天想弄一个也说不定。

telnet.tar.gz

8.26 KB, 下载次数: 31

telnet规范协议中文版


作者: deadlylight    时间: 2008-12-19 09:56
楼主说的东西跟telnet,ssh之类的有啥区别呢
作者: flw    时间: 2008-12-19 10:22
原帖由 期待天晴 于 2008-12-19 08:35 发表

搞操作系统的不是你么

不才确实是在搞一个操作系统,不过深知自己的恒心有限,因此从来不敢对外声张,更不敢拉人一起来做。
作者: romandion    时间: 2008-12-19 12:41
标题: 区别
原帖由 deadlylight 于 2008-12-19 09:56 发表
楼主说的东西跟telnet,ssh之类的有啥区别呢



从客户端看,没有区别。但从服务端看,不一样。实际上是将TELNET服务端功能集成到其他服务系统中,比如APACHE,FTP等。而且命令不是可执行文件,而是目标服务中注册的函数。

比如在telnet中输入ls,正常的telnet服务会返回给你操作系统中,当前目录的所有文件和目录。但这里也许只是许多函数名。
作者: yylogo    时间: 2008-12-19 13:27
呵呵,我倒是支持flw
楼主说一个框架都没有,就让别人帮忙.
这你不如说把饭给别人吃啦
作者: deadlylight    时间: 2008-12-19 15:50
原帖由 romandion 于 2008-12-19 12:41 发表



从客户端看,没有区别。但从服务端看,不一样。实际上是将TELNET服务端功能集成到其他服务系统中,比如APACHE,FTP等。而且命令不是可执行文件,而是目标服务中注册的函数。

比如在telnet中输入ls,正常 ...


看起来像木马
作者: romandion    时间: 2008-12-19 16:45
原帖由 deadlylight 于 2008-12-19 15:50 发表


看起来像木马



晕,这个是开发者自己集成到自己的系统中。主要用来调试自己的服务系统,主要针对无界面系统。木马,应该是别人恶意注入到你的进程中的,除了远程功能外,哪都不像吧,呵呵。
作者: fcuk    时间: 2008-12-19 17:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: romandion    时间: 2008-12-21 00:01
标题: 一点进展
http://code.google.com/p/libevtd/downloads/list

在GOOGLE上建立了一个项目,叫LIBEVTD。全称是EMBED VIRTUAL TERMINAL DAEMON API。

今天创建了几个主要的头文件,并添加自己原来写的公共库。

由于工作原因,不能完全投入,每天只能抽1个小时左右的时间来作,呵呵,进展估计没法太快。

希望大家支持,或者也加入进来。
作者: romandion    时间: 2008-12-21 00:04
标题: 帮助?
原帖由 yylogo 于 2008-12-19 13:27 发表
呵呵,我倒是支持flw
楼主说一个框架都没有,就让别人帮忙.
这你不如说把饭给别人吃啦


我倒没想过要谁的帮助,只是希望一起合作,对人对己都有好处。

如果大家这个IDEA有价值,一起把他实现有何不可呢。反正这里

只有伙伴关系,有什么好计较的呢?
作者: romandion    时间: 2008-12-22 19:08
标题: 一点小进展
慢悠悠的又写了些东西。哈,争取年底弄出个能用的。继续努力...

欢迎您的加入...

http://code.google.com/p/libevtd
作者: vincentdpan    时间: 2008-12-22 20:11
s a_c
作者: system888net    时间: 2008-12-22 22:07
关注一下.
作者: romandion    时间: 2008-12-23 23:05
标题: 开发日志
开发日志 :
版本历史    0.0.3  2008-12-20

1.    定义driver,负责解析TELNET协议,对外接口只提供需要执行的命令参数,和触发事件,还未实现,
      计划中,估计开发量会比较大。
      现在打算用SELECT来管理IO而不是POLL和EPOLL,性能应该不成问题,不过可以通用。

2.   命令管理层类似于文件系统的树型结构。

3.   执行框架ARCH启动后,将在一个线程中完成命令的执行[未来可能会使用进程,但现阶段只使用线程,
      简单],管理命令由DRIVER负责触发,这样保证客户端的带外数据能被DRIVER接收被正确的传输到
      ARCH中,不会被执行过程所阻塞。

问题:
1.  没确定SELECT能否象EPOLL那样同时管理ACCEPT/READ/WRITE
2.  ARCH的执行线程  需要等待 新命令的到达,原来的libpr库没有这部分代码,需要添加
作者: romandion    时间: 2008-12-24 17:26
标题: 开发日志
开发日志 :
版本历史    0.0.4  2008-12-24

1.  完成vtarch.c。当driver接收到数据后,按协议进行分析后,触发event_callback。vt_arch_event_callback根据事件
     类型对arch_thread进行操作。如果是pause/resume/quit等事件,由callback直接操作线程;如果是命令/数据/stop的
     话,生成消息,压入arch的消息队列。
2.  arch线程等待消息到来,否则阻塞在那边。
3.  封装pthread_cond_t,使用pthread_cond_wait来让消息读线程实现等待。
4.  pthread_cond_wait的时候会释放pthread_mutex_t,而获得pthread_cond_t本身的mutex。这个特点是最核心的本质。

问题:
1.  自行定义一个消息队列,2线程,一读一写。如何阻塞并保护消息队列,用简洁优美的办法。
2.  线程中执行一个函数,如vt_cmd_t。如何让他stop,就行用ctrl+c终止进程的执行。
作者: romandion    时间: 2008-12-25 20:17
标题: 开发日志
开发日志:
2008-12-25

今天没有写代码,而是把telnet协议研究了下。发表在博客
http://blog.csdn.net/romandion/archive/2008/12/25/3606013.aspx
欢迎指教。

圣诞节快乐。
作者: romandion    时间: 2008-12-29 12:15
标题: 开发日志
开发日志:
版本历史   0.0.6 2008-12-29
    现在开始做telnet驱动部分,本来想自己做一个,不过为了尽快拿出产品,决定先修改inetutils/telnet的源码,将
它拿过来用。关于telnet的协议细节在后面的版本将逐渐替换。

    呵呵,好像没什么人感兴趣,在第一个可用版本出来,我将终止在这个贴上发布开发日志,有兴趣的可以到google上
查看libevtd的开发进度,谢谢!
作者: mirnshi    时间: 2008-12-29 14:45
原帖由 romandion 于 2008-12-17 16:53 发表
在服务器或者许多没有终端界面的系统在调试下十分麻烦。想开发一个虚拟终端,DOS界面,可以集成到服务系统中,客户端可以通过telnet方面的调用。服务端库接口如下:

1.int vty_init(int port) ;

typedef  ...

貌似很简单的,就是一个socket服务端程序而已。要是做客户端,会麻烦一些,涉及到tty的一些东西。
作者: romandion    时间: 2008-12-29 15:37
貌似很简单的,就是一个socket服务端程序而已。要是做客户端,会麻烦一些,涉及到tty的一些东西。


如果只是一个服务端程序当然没有问题啊。不过要支持已经有的协议就比较麻烦了。如果要做好了,更麻烦了。如果你你有时间可以实现个telnet服务端看看就知道。

其实细节问题没有想的那么简单。呵呵,我自己做下来,还是要蛮东西要解决的。
作者: mirnshi    时间: 2008-12-29 17:07
我的理解是你想做一个支持远程telnet接口的库,利用库接口,远程通过命令串,执行相应的注册函数,用于获取或设置某些状态之类的。

这个库,不需要支持telnet协议吧。如同你可以telnet 25端口发送邮件,telnet 110查看邮件。是不是想复杂了
作者: ttplay    时间: 2008-12-29 17:22
其它人说做什么OS,我不相信,

不过redor应该可以做到, 因为这人的编码能力特强
作者: romandion    时间: 2008-12-29 17:56
原帖由 mirnshi 于 2008-12-29 17:07 发表

我的理解是你想做一个支持远程telnet接口的库,利用库接口,远程通过命令串,执行相应的注册函数,用于获取或设置某些状态之类的。

这个库,不需要支持telnet协议吧。如同你可以telnet 25端口发送邮件,teln ...


你的理解完全正确。

首先,客户端连接远程最常用的工具就是telnent/ssh之类的。所以支持这些协议有天生的优势。

其次,这些协议算是比较成熟的啊。支持他们比较容易使用。

如果支持私有协议,每次连接远程都需要启动自有的客户端。在使用上并不见得方便啊,除非你花大力气完善客户端。

假设有个开发人员使用这套库嵌入到自己的系统中,他通过telnet直接就可以使用,不是很好么?

实际上这个库的作用就是嵌入到其他daemon系统中。跟telnet25/110收发邮件不是一回事。你能为你的系统提供完善的调试工具么?类似于邮件系统。

我觉得这不一定是最好的,但很情况下就是简单、易用。
作者: romandion    时间: 2008-12-29 20:26
原帖由 ttplay 于 2008-12-29 17:22 发表
其它人说做什么OS,我不相信,

不过redor应该可以做到, 因为这人的编码能力特强



Just Do It
作者: romandion    时间: 2008-12-30 14:12
标题: 开发日志:
开发日志:
版本历史   0.0.6 2008-12-30
    将telnetd部分的代码从Inetutils中剥离出来,编译通过,不过运行还不行,需要继续跟踪。

1、lib
2、libinetutils
3、libtelnet
4、telnetd

四个目录中,提取部分文件,特别是Lib库的文件,使用到的并不多。
作者: romandion    时间: 2008-12-31 17:26
标题: 开发日志
开发日志:
版本历史   0.0.7 2008-12-31
    慢慢地深入到telnet协议才发现问题不少啊。最奇怪是telnetd源码中居然有getpeername(0 , ...),不知道是怎么运行的。
    将telnetd源码分为几个模块:
    1、认证;这个模块代码比较多
    2、pty;虚拟终端
    3、telnet协议

     前面2个部分将先剥离出来。我将比对第三部分的源码,编写自己的源码。
作者: eveson    时间: 2009-01-01 00:39
有想法就好,建议发到开源项目那个板块把
作者: romandion    时间: 2009-01-01 20:04
原帖由 eveson 于 2009-1-1 00:39 发表
有想法就好,建议发到开源项目那个板块把



还不知道开源版块在哪里?
作者: eveson    时间: 2009-01-02 11:08
原帖由 romandion 于 2009-1-1 20:04 发表



还不知道开源版块在哪里?


http://linux.chinaunix.net/bbs/forum-71-1.html
作者: hightman    时间: 2009-01-02 11:16
原帖由 romandion 于 2008-12-31 17:26 发表
开发日志:
版本历史   0.0.7 2008-12-31
    慢慢地深入到telnet协议才发现问题不少啊。最奇怪是telnetd源码中居然有getpeername(0 , ...),不知道是怎么运行的。
    将telnetd源码分为几个模块:
    1、 ...


getpeername(0 有什么奇怪的.

0 也是一个合法的 socket fd 啊,  我估计这段代码是为支持 inetd 而设的.

不过, LZ 搞的这个东西纯粹就是 telnet + command list? 首先 telnet 是一个很不安全的协议, 您是想为一些不懂技术的用户提供类似的管理操作界面么?

对了, 对于屏幕绘制方面可以使用现成的 newt 库, 已经很好用了, 类似用文本方式安装 Linux 时的那种界面设计, 有选单\有确认框, 有输入框 ...

您所需要做的就是制一个了菜单+命令回调函数即可了.

[ 本帖最后由 hightman 于 2009-1-2 11:20 编辑 ]
作者: eveson    时间: 2009-01-02 12:04

作者: chinesedragon    时间: 2009-01-02 20:00
支持楼主行动证明!
作者: samon_fu    时间: 2009-01-02 21:34
标题: 回复 #49 chinesedragon 的帖子
支持。如果大家有精力,可以多参与这个项目呢
作者: eveson    时间: 2009-01-02 23:57
如何参加啊,谁组织啊?
作者: romandion    时间: 2009-01-03 18:24
标题: 参与方法
很高兴有人愿意参与这个项目,其实很简单,我在google上注册了项目libevtd。你在上面注册个用户,发个邮件给我就可以了,我在项目加你。其实很简单,整个项目模块规划还比较清晰。

在CU和CSDN上发布开发日志,直至第一个可用版本出来。
作者: romandion    时间: 2009-01-12 18:14
标题: 开发日志
开发日志
版本历史   0.0.8 2009-01-12
      这几天,由于公司的工作要赶进度,vt的进展缓慢,没好意思发代码上来,今天取了些小进展,所以发上来一点。
作者: romandion    时间: 2009-01-19 10:07
标题: 开发日志
开发日志
版本历史   0.0.9 2009-01-16
      编译通过,telnet举行协议内容还没有解析,快春节了,要抓紧时间了。
作者: romandion    时间: 2009-02-02 13:16
标题: 新年致谢
春节忙了阵子没有继续更新,没想到今天上班打开libevtd的下载,居然有49啊,很汗颜没有尽快完成。
很感觉大家的关注。我会在近期抓紧时间完成个可用版本。不过不再每个版本都写开发日志。
祝大家牛年好运!
作者: PKkingSon    时间: 2009-02-02 14:48
还是unix方便,只需要写成一个登陆shell就可以了,用ssh管理
作者: romandion    时间: 2009-02-08 23:14
呵呵,经过快2个月的努力,LIBEVTD快完成。更加完善的功能,会在GOOGLE上逐渐发布。
作者: romandion    时间: 2009-02-13 09:29
标题: LIBEVTD首次正式发布
经过2个的努力,第一个能正确运行的LIBEVTD正式发布,下载地址   http://code.google.com/p/libevtd/downloads/
后续将继续改善很修改,希望有需求的随时联系我:romandion@tom.com,没需求的也可以挑挑毛病共同进步,谢谢!!!
作者: ssafa    时间: 2009-02-13 09:37
LZ先弄出个东西来,最好是设计文档啊
作者: romandion    时间: 2009-02-13 14:06
原帖由 ssafa 于 2009-2-13 09:37 发表
LZ先弄出个东西来,最好是设计文档啊


就我一个人写,没有详细的文档,就自己弄了个草稿。现在已经能运行,但不还不是很完整。应用接口也很简单,都在evtd.h里面,就实现麻烦了点。
作者: lanying_wzw    时间: 2009-02-13 18:09
libcli我用了一下,确实不错
作者: beepbug    时间: 2009-02-13 18:59
我不知道楼主要做什么样的终端。
终端的基本功能只有两项,而且很简单。
1)将键盘键入的字符送主机;
2)将来自主机的字符显示在屏幕上。
作者: which    时间: 2009-02-13 22:34
啥终端啊?

仅仅是为了培养编程能力?
作者: romandion    时间: 2009-02-14 15:54
标题: 关于LIBEVTD
1、LIBEVTD的需求背景
    在大多数的系统开发中,特别是daemon等无交互界面的系统,在运行期间是很难的,很多情况下只能通过日志系统进行分析。这是我多年做开发的感受,特别需要能进行运行期调试和控制的工具。

2、LIBEVTD的功能实现
    LIBEVTD提供一种手段,使得开发者能够在系统运行时连接到系统,运行自定义的命令,帮助获取运行期信息。LIBEVTD以库的方式提供,很容易被系统所集成。可以将LIBEVTD想象成类似于TELNETD、SSHD之类系统,只不过他执行命令不是可执行文件,而是一个函数。但对客户端来说没有区别。如果你认为LIBCLI对你有用,那么LIBEVTD同样可以。当然,初始版本还有很多问题需要解决。

3、LIBEVTD的系统设计
    LIBEVTD从设计开发,就很注重可扩展性,尽量降低耦合性。所以将整个系统划分2个部分,如LINUX的虚拟文件系统一样。有个虚拟层,具体实现交给各种协议,如TELNET,还有以后的SSH。



很感谢大家的支持和关注,首次发布的版本,肯定问题不少,但一定继续努力改进中。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2