被動式Telnet研究及實現(解決內外網遠程維護的困難)-part B

歡迎轉載,轉載請保留原文鏈接: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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章