0 0

怎样用后台程序登陆win710

问题描述:我实现了一个socket,服务端在pc上,客户端在一台Android手机上。现在已经实现了两者的通信。
我的问题的是:当win7进入锁定状态,就是要那个输入密码才能进入系统的界面。我想用手机给PC上运行的服务端程序发一条指令,能实现登陆到windows里的效果。多谢指教。

问题补充:
泰山宏图 写道
你的问题是否类似于电脑的远程登录?

不是的。这个是要在系统内部一个程序里面发出命令。

问题补充:
khan 写道
只能telnet了,兄弟!

telnet命令选项里面,连password这项都没有,要怎么做呢?

问题补充:
khan 写道
有啊,
package com.surekam.collie.collecter.task.conn.inst;

import com.surekam.collie.collecter.task.conn.AbsActiveConn;
import com.surekam.collie.model.collecter.ProtocolDetail;
import com.surekam.conf.api.ConfigManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.telnet.TelnetClient;

import java.io.InputStream;
import java.io.PrintStream;
import java.util.Map;
import java.util.concurrent.*;

public class TelnetNConn extends AbsActiveConn implements Callable{
    private final static Log log = LogFactory.getLog(TelnetNConn.class);
    private TelnetClient telnetSession;
    private String destAddress;
    private int    destPort = 23;
    private String destUser;
    private String destPWD ;
    private String terminalEnv;
    private final  String TIMEOUT   = "telnetTimeOut";
    private long   timeout          = 40000;
    private String userPrompt       = "ogin: ";
    private String passPrompt       = ": ";
    private String prompt           = "$ ";
    private boolean isLogin         = false;
    private ExecutorService executor; //异步执行传入命令


    /**
     * telnet 连接初始化
     */
    public void init(ProtocolDetail protocolDetail) throws Exception {
        /**
         * 参数,成员初始处理
         */
        Map<String, String> params = protocolDetail.getParamsMap();
        destAddress = params.get("IP").trim();
        destUser    = params.get("USER");
        destPWD     = params.get("PASSWORD");
        terminalEnv = params.get("TERMINALENV");  //终端模拟,如使用不正确可能导致采集结果返回乱码,数值主要包括:VT220、VT100、LINUX等
        destPort    = Integer.parseInt(params.get("PORT"));
        prompt      = params.get("PROMPT").trim();
        terminalEnv = null==terminalEnv||terminalEnv.trim().length()<1?"VT100":"";
        timeout     = Long.parseLong(ConfigManager.getInstance().getConfiger().getParameter(TIMEOUT));
        executor    = Executors.newSingleThreadExecutor();  //命令任务处理

        /**
         * 连接初始处理
         */
        try{
            telnetSession = new TelnetClient(terminalEnv);
            telnetSession.setReaderThread(false);
            telnetSession.connect(destAddress, destPort);
            login(destUser,destPWD);
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * 登陆到telnet服务端
     * @param destUser
     * @param destPWD
     */
    private void login(String destUser, String destPWD) {
        try{
            if(telnetSession.isConnected()){
                sendString("");
                String welcomeInfo = (String)call();
//                log.info("welcome:"+welcomeInfo);
                sendString(destUser);
                String fillUserInfo  = (String)call();
//                log.info("fillUserInfo:"+fillUserInfo);
                sendString(destPWD);
                String fillPWDInfo   = (String)call();
//                log.info("filePWD:"+fillPWDInfo);
                /**
                 *  根据填充完密码返回信息
                 *  判断登陆是否成功
                 */
                if(fillPWDInfo.trim().endsWith(prompt.trim())){
                        isLogin = true;
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * telnet连接后执行系统指令
     * @param cmd
     * @return
     * @throws Exception
     */
    public Object execCommand(final String cmd) throws Exception {
//        log.info("isLogin:"+isLogin);
        if(isLogin){
            sendString(cmd);
            Future future = executor.submit(this);
            return  future.get(timeout,TimeUnit.MILLISECONDS);
        }else{
            throw new Exception("连接问题导致连接异常");
        }
    }

    /**
     * 发送指令到telnet服务端
     * @param s
     * @throws Exception
     */
    private void sendString(String s) throws Exception {
        PrintStream os = new PrintStream(telnetSession.getOutputStream());
        os.println(s);
        os.flush();
    }

    /**
     * 读取telnet服务端返回数据
     * @return
     * @throws Exception
     */
    public Object call() throws Exception {
            InputStream inputStream = telnetSession.getInputStream();
            StringBuffer stringBuffer = new StringBuffer();
            try {
                    byte[] buff = new byte[1024];
                    int ret_read = 0;
                    boolean loopFlag = true;
                    while (loopFlag && ret_read >= 0){
                            /**
                             *  读取数据
                             */
                            ret_read = inputStream.read(buff);
                            if (ret_read > 0) {
                                String temp = new String(buff, 0, ret_read);
                                stringBuffer.append(temp);
                            }
                            /**
                             *  判断返回
                             */
                            if(isLogin){ //login的情况下不处理冒号
                                if(stringBuffer.toString().trim().endsWith(prompt.trim())){
                                      loopFlag = false;
                                }
                            }else {     // 登陆成功只判断命令提示符
                                if(stringBuffer.toString().trim().endsWith(":")||stringBuffer.toString().trim().endsWith(prompt.trim())){
                                      loopFlag = false;
                                }
                            }
                    }
		    } catch (Exception e) {
			    log.debug("telnet读取命令返回数据错误",e);
		    }
            return  new String(stringBuffer.toString().getBytes(),"utf-8");
    }

    /**
     * 适配抽象方法
     * @return
     */
    public Object getInnerConnection() {
        throw new UnsupportedOperationException("Telnet连接不支持此操作!");//示例不支持的操作写法
    }

    /**
     * InnerConnection底层抽象实现
     * @return  true:alive
     */
    public boolean isAlive() {
    	try {
			String result = (String) this.execCommand("echo testLink");
			if(!(result.indexOf("testLink")>-1)){
				return false;
			}
		} catch (Exception e) {
			log.error("判断连接错误",e);
			return false;
		}
        return true;

    }

    /**
     * 端口与telnet服务端的连接
     */
    public void close() {
        try {
        	if(telnetSession!=null)
        		telnetSession.disconnect();
        }
        catch (Exception e) {
            log.error(e);
        }
    }


    public static void main(String[] args) {
        ProtocolDetail protocolDetail = new ProtocolDetail();
        Map params = protocolDetail.getParamsMap();
        params.put("IP", "192.168.1.103");
        params.put("USER", "itim");
        params.put("PASSWORD", "itim");
        params.put("TERMINALENV", "VT100");
        params.put("PORT", "23");
        params.put("PROMPT", "$");

        TelnetNConn conn = new TelnetNConn();
        try {
              conn.init(protocolDetail);
              System.out.println(conn.isAlive());
              System.out.println(conn.execCommand("ll"));
              System.out.println("执行完毕");
        }catch (Exception e) {
			e.printStackTrace();

		}finally{
			conn.close();
		}
    }


}

谢谢。程序里用到的另外3个类文件能给我看看吗?basketball520@gmail.com

问题补充:
khan 写道
哪三个文件啊?

你外部导入的这三个啊
import com.surekam.collie.collecter.task.conn.AbsActiveConn;  
import com.surekam.collie.model.collecter.ProtocolDetail;  
import com.surekam.conf.api.ConfigManager;
OS 
2011年11月21日 18:04

4个答案 按时间排序 按投票排序

0 0

哪三个文件啊?

2011年11月21日 21:14
0 0

有啊,

package com.surekam.collie.collecter.task.conn.inst;

import com.surekam.collie.collecter.task.conn.AbsActiveConn;
import com.surekam.collie.model.collecter.ProtocolDetail;
import com.surekam.conf.api.ConfigManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.telnet.TelnetClient;

import java.io.InputStream;
import java.io.PrintStream;
import java.util.Map;
import java.util.concurrent.*;

public class TelnetNConn extends AbsActiveConn implements Callable{
    private final static Log log = LogFactory.getLog(TelnetNConn.class);
    private TelnetClient telnetSession;
    private String destAddress;
    private int    destPort = 23;
    private String destUser;
    private String destPWD ;
    private String terminalEnv;
    private final  String TIMEOUT   = "telnetTimeOut";
    private long   timeout          = 40000;
    private String userPrompt       = "ogin: ";
    private String passPrompt       = ": ";
    private String prompt           = "$ ";
    private boolean isLogin         = false;
    private ExecutorService executor; //异步执行传入命令


    /**
     * telnet 连接初始化
     */
    public void init(ProtocolDetail protocolDetail) throws Exception {
        /**
         * 参数,成员初始处理
         */
        Map<String, String> params = protocolDetail.getParamsMap();
        destAddress = params.get("IP").trim();
        destUser    = params.get("USER");
        destPWD     = params.get("PASSWORD");
        terminalEnv = params.get("TERMINALENV");  //终端模拟,如使用不正确可能导致采集结果返回乱码,数值主要包括:VT220、VT100、LINUX等
        destPort    = Integer.parseInt(params.get("PORT"));
        prompt      = params.get("PROMPT").trim();
        terminalEnv = null==terminalEnv||terminalEnv.trim().length()<1?"VT100":"";
        timeout     = Long.parseLong(ConfigManager.getInstance().getConfiger().getParameter(TIMEOUT));
        executor    = Executors.newSingleThreadExecutor();  //命令任务处理

        /**
         * 连接初始处理
         */
        try{
            telnetSession = new TelnetClient(terminalEnv);
            telnetSession.setReaderThread(false);
            telnetSession.connect(destAddress, destPort);
            login(destUser,destPWD);
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * 登陆到telnet服务端
     * @param destUser
     * @param destPWD
     */
    private void login(String destUser, String destPWD) {
        try{
            if(telnetSession.isConnected()){
                sendString("");
                String welcomeInfo = (String)call();
//                log.info("welcome:"+welcomeInfo);
                sendString(destUser);
                String fillUserInfo  = (String)call();
//                log.info("fillUserInfo:"+fillUserInfo);
                sendString(destPWD);
                String fillPWDInfo   = (String)call();
//                log.info("filePWD:"+fillPWDInfo);
                /**
                 *  根据填充完密码返回信息
                 *  判断登陆是否成功
                 */
                if(fillPWDInfo.trim().endsWith(prompt.trim())){
                        isLogin = true;
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * telnet连接后执行系统指令
     * @param cmd
     * @return
     * @throws Exception
     */
    public Object execCommand(final String cmd) throws Exception {
//        log.info("isLogin:"+isLogin);
        if(isLogin){
            sendString(cmd);
            Future future = executor.submit(this);
            return  future.get(timeout,TimeUnit.MILLISECONDS);
        }else{
            throw new Exception("连接问题导致连接异常");
        }
    }

    /**
     * 发送指令到telnet服务端
     * @param s
     * @throws Exception
     */
    private void sendString(String s) throws Exception {
        PrintStream os = new PrintStream(telnetSession.getOutputStream());
        os.println(s);
        os.flush();
    }

    /**
     * 读取telnet服务端返回数据
     * @return
     * @throws Exception
     */
    public Object call() throws Exception {
            InputStream inputStream = telnetSession.getInputStream();
            StringBuffer stringBuffer = new StringBuffer();
            try {
                    byte[] buff = new byte[1024];
                    int ret_read = 0;
                    boolean loopFlag = true;
                    while (loopFlag && ret_read >= 0){
                            /**
                             *  读取数据
                             */
                            ret_read = inputStream.read(buff);
                            if (ret_read > 0) {
                                String temp = new String(buff, 0, ret_read);
                                stringBuffer.append(temp);
                            }
                            /**
                             *  判断返回
                             */
                            if(isLogin){ //login的情况下不处理冒号
                                if(stringBuffer.toString().trim().endsWith(prompt.trim())){
                                      loopFlag = false;
                                }
                            }else {     // 登陆成功只判断命令提示符
                                if(stringBuffer.toString().trim().endsWith(":")||stringBuffer.toString().trim().endsWith(prompt.trim())){
                                      loopFlag = false;
                                }
                            }
                    }
		    } catch (Exception e) {
			    log.debug("telnet读取命令返回数据错误",e);
		    }
            return  new String(stringBuffer.toString().getBytes(),"utf-8");
    }

    /**
     * 适配抽象方法
     * @return
     */
    public Object getInnerConnection() {
        throw new UnsupportedOperationException("Telnet连接不支持此操作!");//示例不支持的操作写法
    }

    /**
     * InnerConnection底层抽象实现
     * @return  true:alive
     */
    public boolean isAlive() {
    	try {
			String result = (String) this.execCommand("echo testLink");
			if(!(result.indexOf("testLink")>-1)){
				return false;
			}
		} catch (Exception e) {
			log.error("判断连接错误",e);
			return false;
		}
        return true;

    }

    /**
     * 端口与telnet服务端的连接
     */
    public void close() {
        try {
        	if(telnetSession!=null)
        		telnetSession.disconnect();
        }
        catch (Exception e) {
            log.error(e);
        }
    }


    public static void main(String[] args) {
        ProtocolDetail protocolDetail = new ProtocolDetail();
        Map params = protocolDetail.getParamsMap();
        params.put("IP", "192.168.1.103");
        params.put("USER", "itim");
        params.put("PASSWORD", "itim");
        params.put("TERMINALENV", "VT100");
        params.put("PORT", "23");
        params.put("PROMPT", "$");

        TelnetNConn conn = new TelnetNConn();
        try {
              conn.init(protocolDetail);
              System.out.println(conn.isAlive());
              System.out.println(conn.execCommand("ll"));
              System.out.println("执行完毕");
        }catch (Exception e) {
			e.printStackTrace();

		}finally{
			conn.close();
		}
    }


}

2011年11月21日 19:58
0 0

只能telnet了,兄弟!

2011年11月21日 18:43
0 0

你的问题是否类似于电脑的远程登录?

2011年11月21日 18:32

相关推荐

    VC++实现QQ自动登陆器源程序.7z

    - **Win32 API**:VC++程序通常会调用Windows操作系统提供的API来实现窗口、消息处理、事件驱动等功能。例如,使用`CreateWindowEx`创建登录窗口,`SetWindowText`设置窗口标题,`ShowWindow`显示或隐藏窗口。 - *...

    完整仿hao123导航带后台管理网址导航源码 v8.0.zip

    前台模版与后台程序完全分离,简单实用的标签调用,可以自己独立制作模板,非常简单实用的标签,子类可以单独设置模板,制作出属于自己的个性网址导航。 6、后台集成各大搜索引擎联盟账号! 百度、淘宝、迅雷、...

    Dvbbs7.x To knetbbs2.x 转换程序

    Dvbbs7.x To knetbbs2.x 转换程序:为win32的exe,暂只支持mdb,需安装.net framework 一定要使用最新下载的knetbbs2数据库(DB/knetbbs2.cs)! 注意:转换后的管理员为admin,如果原先数据库有该...

    2016最新仿hao123带后台网址导航源码 v2016

    前台模版与后台程序完全分离,简单实用的标签调用,可以自己独立制作模板,非常简单实用的标签,子类可以单独设置模板,制作出属于自己的个性网址导航。 6、后台集成各大搜索引擎联盟账号! 百度、淘宝、迅雷、搜狗...

    枫の网络整站程序

    版本名称:枫の网络 版 本 号:V8.1 数 据 库:ACCESS 2000 发布日期:2004-03-12 网站地址:http://flash520.net 后台管理员帐号及密码匀为:admin 备注: 通过免费下载、复制 等方式直接获得本站免费程序的使用权 ,...

    两代Windows性能大比拼,Win8完胜Win7.docx

    在对两代Windows系统——Windows 7和Windows 8进行性能对比时,我们可以从多个方面来探讨它们的差异。在此次测试中,Windows 8在多个环节上展现出了优于Windows 7的性能。 首先,从安装占用空间来看,Windows 8 Pro...

    精仿hao123网址导航系统 网址导航源码 hao123网址导航 hao123带后台版

    前台模版与后台程序完全分离,简单实用的标签调用,可以自己独立制作模板,非常简单实用的标签,子类可以单独设置模板,制作出属于自己的个性网址导航。 6、后台集成各大搜索引擎联盟账号! 百度、淘宝、迅雷、搜狗...

    win10优化教程解放强迫症.pdf

    Win10 优化教程解放强迫症,这篇文章旨在帮助用户解决 Win10 升级后出现的高 CPU 使用率和硬盘使用率问题,并提供了一系列的优化技巧和方法,帮助用户提高 Win10 的性能和流畅度。 1. 解决 360 优化 win10 后开不了...

    2015最新版精仿hao123网址导航系统,带qq登陆,会员推广功能

    前台模版与后台程序完全分离,简单实用的标签调用,可以自己独立制作模板,非常简单实用的标签,子类可以单独设置模板,制作出属于自己的个性网址导航。 6、后台集成各大搜索引擎联盟账号! 百度、淘宝、迅雷、搜狗...

    ASP.NET通用权限管理系统(FrameWork) v1.0.3

    在我们开发软件过程中,经常会需要开发一个后台管理程序.用于管理我们开发的前台软件. 当你开发的软件越来越多的时候,你的管理后台也会越来越多.这时如果有一个统一的管理后台.来进来管理.有统一台帐号,统一的授权来...

    精仿hao123网址导航系统2015最新版,带qq登陆,会员推广功能

    前台模版与后台程序完全分离,简单实用的标签调用,可以自己独立制作模板,非常简单实用的标签,子类可以单独设置模板,制作出属于自己的个性网址导航。 6、后台集成各大搜索引擎联盟账号! 百度、淘宝、迅雷、搜狗...

    好251网址大全源码 v3.2 高仿好123网址导航ASP版.rar

    更新同步了最新的数据,增加了广告连接的管理,更新修改了首页变形不兼容WIN7,美化了首页代码的整体优化。增加了广告JS代码管理! 增加了数据库安全性。数据库默认的地址:/admin/hao251.asa 如果不是在根目录 ...

    很不错的用户登陆注册源代码

    通过MFC,开发者可以更高效地构建用户界面,而不需要直接操作底层的Win32 API。在本例中,源代码利用MFC创建了一个用户登录和注册的交互界面,包括输入框、按钮等控件,以及相应的事件处理函数。 关于登录和注册...

    kuku265网址导航 v1.0.rar

    kuku265网址导航系统更新同步了最新的数据,增加了广告连接的管理,更新修改了首页变形不兼容WIN7,美化了首页代码的整体优化。增加了广告JS代码管理! kuku265网址导航系统安装帮肋 1.修改siteconfig/conn.asp的...

    最新精仿hao123网址导航系统 v20161102.zip

    前台模版与后台程序完全分离,简单实用的标签调用,可以自己独立制作模板,非常简单实用的标签,子类可以单独设置模板,制作出属于自己的个性网址导航。 6、后台集成各大搜索引擎联盟账号! 百度、淘宝、迅雷、搜狗...

    java程序员个人简历01.doc

    + 项目简述:门户网站的前台和后台程序设计,包含有后台登陆、计数器、信息发布、公证团队发布、网上申请、在线咨询、友情连接、图片上传、数据库定期备份等功能模块。 + 该项目基于 MVC 模式,采用 Jsp+jquery + ...

    kuku265网址导航 v2.0

    kuku265网址导航 v2.0更新同步了最新的数据,增加了广告连接的管理,更新修改了首页变形不兼容WIN7,美化了首页代码的整体优化。增加了广告JS代码管理、网址提交、网站留言、网址反馈等栏目。 kuku265网址导航...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    7.这时执行程序,可实现按下登录按钮进入主窗口,按下退出按钮退出程序。 8.添加用户名密码判断功能。将登陆按钮的槽函数改为: void loginDlg::on_loginBtn_clicked() { if(m_ui-&gt;usrLineEdit-&gt;text()==tr("qt")&&m...

    电子教案管理系统ASP源程序

    『电子教案管理系统』使用说明 ===========================================================程序名称:『电子教案管理系统』=========================================================== 【设计思路】随着计算机...

    超漂亮版网上商城源码程序免费版下载(整合论坛)

    多处的安全更新:进行了多处安全更新,加入了防SQL注入程序,后台管理均使用MD5不可逆加密,数据库做了防下载处理,最新版中我们对程序代码进行了全面的检查,修补了暴库漏洞、SQL注入漏洞 &lt;br&gt;QQ:294990966,...

Global site tag (gtag.js) - Google Analytics