被动式Telnet研究及实现(解决内外网远程维护的困难)-part B

来源:互联网 发布:有毒网络剧有第二季吗 编辑:程序博客网 时间:2024/06/05 13:25

欢迎转载,转载请保留原文链接:http://blog.csdn.net/mikulee/article/details/40150791


上一篇文章实现了被动式Telnet的后台端口数据转接功能。

接着实现定制的telnet客户端。

首先下载netkit实现的telnet源码:http://ftp.de.debian.org/debian/pool/main/n/netkit-telnet/netkit-telnet_0.17.orig.tar.gz

里面包含telnet客户端及服务端的实现,而我们仅仅需要的是客户端的源码。


经过一些简单的提取与修复,telnet客户端即可编译及运行。下面我们将telnet客户端修改成监听某个端口,等待客户端请求,以便真正实现telnet通讯。


首先修改程序入口,以便接收监听的端口这个参数。

代码略过。。



接着修改netlink.cc文件,将netlink.cc中的connect注释掉,改成以下函数,并修改对应头文件。


<span style="font-size:14px;">int netlink::listenPort(int debug, int port){struct sockaddr_in server_addr;struct sockaddr_in client_addr;if ((psocket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {fprintf(stderr, "Socket Error\n");return 0;}// fill in server address structbzero(&server_addr, sizeof(struct sockaddr_in));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(port);int opt;//setsockopt(psocket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));if (bind(psocket, (struct sockaddr *) (&server_addr),sizeof(struct sockaddr)) == -1) {fprintf(stderr, "Bind error,no:%d\n",errno);exit(1);}if (listen(psocket, 1) == -1) {fprintf(stderr, "listen error\n");exit(1);}fprintf(stderr, "waitting for connection...\n");int sin_size= sizeof(struct sockaddr_in);if ((net = accept(psocket, (struct sockaddr *) (&client_addr),(socklen_t *)&sin_size)) == -1) {fprintf(stderr, "Accrpt error\n");return 0;}printf("Server get connection from %s,clientfd=%d\n",(unsigned char *) inet_ntoa(client_addr.sin_addr), net);return 2;}</span>

该程序启动以后,就会监听port端口,等等arm主机的连接到来。


下面说下该被动式Telnet的使用方法:


假设你编译的上面修改的客户端叫做:telnetPassive,arm主机上的叫做telnetPipe。

首先,用控制台运行telnetPassive,假设监听的端口是12345

  ./telnetPassive 12345

上篇文章已经说过将telnetPipe作为arm主机开机启动运行了。这里就不再说。

接着,我们自己的应用程序可以时刻的检测者web服务器端,等有需求的时候,自己的应用程序就可以通过socket发送数据“ip=服务器ip&port=服务器端口12345”到端口10109(这个端口是程序里设定的,可以在代码里自己修改)。接着telnetPipe就会为你完成一切,建立telnet连接。通过soket发送数据,网上一大堆代码教程。可以去搜一下。


接着送上我的源码,欢迎下载:

https://github.com/cat9/PassiveTelnet



0 0