`
yeshaoting
  • 浏览: 666911 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[JAVA实时屏幕监控]JAVA使用Internet代理设置

    博客分类:
  • J2SE
 
阅读更多

 

JAVA使用Internet代理设置

 

描述:首先获取注册表Internet设置,然后初始化代理服务器。

 

 

/**
 * Copyright (c) 2012 Trusted Software and Mobile Computing(TSMC)
 * All right reserved.
 *
 * Created on Apr 24, 2012 12:42:24 PM
 * http://jarg.iteye.com/
 * Author: Jarg Yee <yeshaoting@gmail.com>
 */
package com.iteye.jarg.monitor.util;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;

import com.ice.jni.registry.RegDWordValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryKey;
import com.ice.jni.registry.RegistryValue;

/**
 * TODO 使用代理服务器工具类
 * 2012-04-25 11:49
 */
public class ProxyUtil
{
	
	/** 获取系统配置句柄 */
	private static final Properties prop = System.getProperties();
	
	/** 注册表中Internet表项位置 */
	private static final String Internet = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";

	
	/** 初始化代理 from Internet Settings */
	public static void initProxy()
	{
		
		try
		{
			// 注册表表项值
			RegistryKey registryKey = Registry.openSubkey(Registry.HKEY_CURRENT_USER, Internet, RegistryKey.ACCESS_READ);
			
			// 注册表表项键
			RegistryValue registryValue = registryKey.getValue("ProxyEnable");
			boolean proxyEnable = ((RegDWordValue) registryValue).getData() != 0;	// 代理设置是否开启
//			System.out.println("IE 是否启用了代理设置: " + proxyEnable);

			if (proxyEnable == true)	// 开启了Internet代理
			{
				registryValue = registryKey.getValue("ProxyServer");
				String proxyServer = new String(registryValue.getByteData());
				ProxyUtil.initProxy(proxyServer);
				System.out.println("使用IE代理服务器.");
			}
		}
		catch (Exception e)
		{
			System.out.println("ERROR:操作Windows注册表失败.");
//			e.printStackTrace();
		}
	}
	
	/**
	 * 初始化代理
	 * @param proxyServer form Internet
	 * */
	public static void initProxy(String proxyServer)
	{
//		System.out.println("proxyServer:" + proxyServer + "\nlength:" + proxyServer.split(";").length);
		
		String[] proxy = proxyServer.split("=|;|:");
		if(proxy.length == 1)// IP地址不同,但端口默认的代理初始化
		{
			initProxy(proxyServer);
			initProxyFtp(proxyServer, "2121");
			initProxyGopher(proxyServer, "808");
			
			initProxyHttp(proxyServer, "808");
			initProxyHttps(proxyServer, "443");
			
			initProxySocks(proxyServer, "1080");
		}
		else if(proxy.length == 2)
		{
			initProxy(proxy[0], proxy[1]);	// 统一代理初始化,所有协议使用相同的代理服务器
		}
		else
		{
			for(int i=0; i<proxy.length; i=i+3)
			{
				initProxy(proxy[i], proxy[i+1], proxy[i+2]);		// 独立代理初始化
			}
		}
	}
	
	/** 独立代理初始化 */
	private static void initProxy(String proxyPotocol, String proxyIP, String proxyPort)
	{
//		System.out.println("proxyPotocol:" + proxyPotocol);
		String[] potocol = {"ftp", "gopher", "http", "https", "socks"};
		
		if(proxyPotocol.equals(potocol[0]))
		{
			initProxyFtp(proxyIP, proxyPort);		// 初始化FTP代理
		}
		else if(proxyPotocol.equals(potocol[1]))
		{
			initProxyGopher(proxyIP, proxyPort);	// 初始化GOPHER代理
		}
		else if(proxyPotocol.equals(potocol[2]))
		{
			initProxyHttp(proxyIP, proxyPort);		// 初始化HTTP代理
		}
		else if(proxyPotocol.equals(potocol[3]))
		{
			initProxyHttps(proxyIP, proxyPort);		// 初始化HTTPS代理
		}
		else if(proxyPotocol.equals(potocol[4]))
		{
			initProxySocks(proxyIP, proxyPort);		// 初始化SOCKS代理
		}
	}
	
	/**
	 * 初始化FTP代理
	 * */
	private static void initProxyFtp(String proxyIP, String proxyPort)
	{
		// 使用ftp代理服务器的主机、端口以及不需要使用ftp代理服务器的主机
		prop.setProperty("ftp.proxyHost", proxyIP);
		prop.setProperty("ftp.proxyPort", proxyPort);
		prop.setProperty("ftp.nonProxyHosts", "localhost|10.10.*");
	}
	
	/**
	 * 初始化GOPHER代理
	 * */
	private static void initProxyGopher(String proxyIP, String proxyPort)
	{
		prop.setProperty("gopher.proxyHost", proxyIP);
		prop.setProperty("gopher.proxyPort", proxyPort);
	}
	
	/**
	 * 初始化HTTP代理
	 * */
	private static void initProxyHttp(String proxyIP, String proxyPort)
	{
		// 设置http访问要使用的代理服务器的地址
		prop.setProperty("http.proxyHost", proxyIP);
		// 设置http访问要使用的代理服务器的端口
		prop.setProperty("http.proxyPort", proxyPort);
		// 设置不需要通过代理服务器访问的主机,可以使用*通配符,多个地址用|分隔
		prop.setProperty("http.nonProxyHosts", "localhost|10.10.*");
	}
	
	/**
	 * 初始化HTTPS代理
	 * */
	private static void initProxyHttps(String proxyIP, String proxyPort)
	{
		// 设置安全访问使用的代理服务器地址与端口
		// 它没有https.nonProxyHosts属性,它按照http.nonProxyHosts 中设置的规则访问
		prop.setProperty("https.proxyHost", proxyIP);
		prop.setProperty("https.proxyPort", proxyPort);
		// 设置不需要通过代理服务器访问的主机,可以使用*通配符,多个地址用|分隔
		prop.setProperty("http.nonProxyHosts", "localhost|10.10.*");
	}
	
	/**
	 * 初始化SOCKS代理
	 * */
	private static void initProxySocks(String proxyIP, String proxyPort)
	{
		// socks代理服务器的地址与端口
		prop.setProperty("socksProxyHost", proxyIP);
		prop.setProperty("socksProxyPort", proxyPort);
	}
	
	/** 统一代理初始化 */
	public static void initProxy(String IP, String port)
	{
		initProxy(IP);
		initProxyFtp(IP, port);
		initProxyGopher(IP, port);
		
		initProxyHttp(IP, port);
		initProxyHttps(IP, port);
		
		initProxySocks(IP, port);
	}
	
	/**
	 * 使用代理
	 * */
	private static void testProxy() throws IOException
	{
		/** 使用代理连接网络 */
		URL url = new URL("http://www.baidu.com/");
		URLConnection conn = url.openConnection();
		conn.setConnectTimeout(3000);

		InputStream in = conn.getInputStream();
		BufferedInputStream bin = new BufferedInputStream(in);
		byte[] buf = new byte[1024]; // 缓存连网获得的数据
		while (bin.read(buf) > 0)
		{
			System.out.print(new String(buf, "GBK"));
		}
		System.out.println();
	}

	/**
	 * for debugging.
	 * 
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException
	{
		initProxy(); // 初始化代理
		testProxy(); // 使用代理
	}
}
 

 

分享到:
评论

相关推荐

    java jdk实列宝典 光盘源代码

    applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容java的web浏览器中运行的程序;...

    基于JAVA的远程视频监控系统设计开题报告.doc

    区别于传统手机视 " "频监控手机为图像采集端,通过计算机来来实时监控,本设计是通过固定摄像头采 " "集视频信息,手机为实时是监控端,使用户可以随时随地知道监控信息确保自身人 " "身或者财产的安全。...

    采用Java技术和Java 3D虚拟现实技术实现设备远程监控系统的设计

    设备的远程监控是制造系统远程监控中的重要... 然而,由于图形图像等视频信息和音频信息的数据量非常大,严重阻碍了具有海量数据的信息在远程监控系统中的使用,特别是在基于Intranet/Internet的远程监控系统中的应用

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    基于ARM9的网络视频监控系统实现

    传统的实时网络监控系统是通过视频采集卡在PC机上构建网络视频。提出了网络数字视频监控系统,其系统硬件以ARM9处理器S3C2410为核心,包含Flash、SDRAM、USB...用户通过Internet在浏览器上就可以实时监控远程的视频图像。

    Android高级编程.pdf

    10.7.1 监控和管理Internet连接 10.7.2 管理活动的连接 10.7.3 管理你的Wi-Fi 10.8 控制设备震动 10.9 小结 第11章 Android高级开发 11.1 Android的安全性 11.1.1 Linux内核安全 11.1.2 权限简介 11.1.3 声明和...

    weblogic 服务器管理(中文版)

    第3章,“节点管理器”说明了如何设置和使用节点管理器。节点管理器被用来远程启动与终止WebLogic服务器 第4章,“配置WebLOgic服务器与集群”讲述配置在一个WebLogic服务器域资源的功能部件 第5章,“监控WebLogic...

    基于Java的奖学金评定系统的设计与实现开题报告.doc

    使用 " " "单独的管理模块+数据库来实现,与学校的学生信息管理系统和数据库相互独立, " " "数据不能共享,但是这种方式开发的程序是一种桌面程序,功能强大,很同意对数" " "据库进行实时监控和报警;而使用ASP/...

    fona:Adafruit FONA Sim800 蜂窝模块的 Java 库

    该库为支持 Java 的设备(包括 BeagleBone 和 Raspberry Pi)和应用程序提供对 Internet 和蜂窝网络的轻量级访问。 虽然大多数能够运行 Java 的设备也能够建立 PPP 链接,但这可以快速消耗低成本 GPRS/M2M 数据...

    安防与监控中的基于SMS通信的UPS监控系统设计

    这些远程通信手段包括公共电话网、Internet网络及无线网络等。无线通信网络不需要传输线,可以在覆盖范围内的任何地点进行通信,显然,这些优点是有线网络难以比拟的。  GSM(全球移动通信系统)网络是目前国内覆盖...

    InternetFileMonitor:Java+Bash Internet File Monitor,适用于 linuxunixmac OS(2014 年来自 Trusteer 的挑战)

    互联网文件监视器Java+Bash Internet 文件监视器,适用于 linux/unix/mac OS 语境: 我们需要不断地监控一些重要的公共文件/页面,以确保它们的内容不会改变(除非我们故意这样做)。 用法: 解压,chmod a+x ./mail...

    基于SMTP邮件截获与还原技术研究.pdf

    2.3 Java和Jpcap环境变量的设置 23 2.4 Java的多线程技术 24 2.4.1 线程与进程的区别 24 2.4.2 多线程的调度 26 2.4.3 线程的状态 26 2.4.4 线程的同步机制 27 2.4.5 系统多线程的实现 28 第三章 监控系统的整体设计...

    各关键进程的名称及意义

    用于使用可视化脚本工具对Internet Explorer除错。注意:该进程同时可能是Win32.Lydra.a木马,该木马允许攻击者访问你的计算机,窃取密码和个人数据。mdm.exe本身就在C:\Program Files\Common Files\Microsoft ...

    网络架构师148讲视频课程

    java架构师148讲视频教程 │ ├─1-148视频教程 │ 第01节:整体课程概览.flv │ 第02节:分模块、分工程管理.avi │ 第03节:多模块多Web应用合并War包.avi │ 第04节:Git基本原理和安装配置使用.avi │ 第05节...

    Oracle数据库管理员技术指南

    8.5.2 使用 DBMS_SYSTEM 设置用户 会话外的跟踪 8.5.3 生成系统跟踪 8.5.4 使用 tkprof 解释跟踪文件 8.5.5 使用 AUTOTRACE 获得 SQL 语句 执行计划和统计数据 8.6 优化回退段 8.6.1 最小化回退段争用 8.6.2...

    &nbsp;基于网络远程实验监控系统的实现

    提出了基于网络远程监控系统设计中所涉及的关键技术,采用了基于Internet远程监控实验系统,通过设计,能够接受来自网络服务器验证的远方客户端请求,并能执行远方用户的操作代理请求,允许远方用户通过动态网页查询...

    湿度和温度监控系统-项目开发

    快速简便的系统,可监控环境的湿度和温度。

    SSH协议在资源监控系统数据传输中的应用 (2013年)

    随着互联网的快速发展,基于互联网远程数据传输方法起到了越来越重要的作用。本文主要介绍SSH 协议,并通过一个Java 实现的基于Internet 资源监控系统为例,介绍SSH 协议在监控系统中对远程数据传输的设计与实现。

Global site tag (gtag.js) - Google Analytics