现在的位置: 首页 > 综合 > 正文

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

2018年04月20日 ⁄ 综合 ⁄ 共 1844字 ⁄ 字号 评论关闭

欢迎转载,转载请保留原文链接: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 struct
		bzero(&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

抱歉!评论已关闭.