`
yeshaoting
  • 浏览: 684339 次
  • 性别: 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短信验证源码DEMO

    8. **日志记录**:为了便于调试和监控,DEMO可能使用了日志记录框架如Log4j或Java内置的日志API,记录发送短信的全过程,包括成功和失败的情况。 以上就是"JAVA短信验证源码DEMO"中的主要技术点,通过学习和理解...

    代理设置代理设置代理设置

    9. **编程语言中的代理设置**:在开发环境中,编程语言如Python、Java或Node.js也有相应的库或配置选项来设置代理,以便在进行网络请求时使用代理服务器。 10. **安全性与隐私**:使用代理服务器可以隐藏真实的IP...

    网络流量监控

    网络流量监控是指对网络中传输的数据包进行实时监测和记录的过程,以便于了解网络的使用情况、识别潜在的安全威胁、优化网络性能以及确保网络资源的有效分配。在局域网环境中,通过路由器作为数据传输的关键节点,...

    java jdk实列宝典 光盘源代码

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

    基于RTP流媒体实时传输的Java实现

    ### 基于RTP流媒体实时传输的Java实现 #### 一、引言 随着互联网技术的迅猛发展,网络应用已经从简单的信息浏览、电子邮件等基础服务拓展到了更为复杂和高级的服务领域,如远程视频会议、IP可视电话、远程教育、...

    用Java实现对IP/TCP协议数据包的拦截和分析

    为了实现这个功能,我们需要使用一个名为Java Network Programming and Security(JNPAS)的库,或者更常见的,使用开源的libpcap库的Java封装,如Jpcap或Pcap4J。 1. **使用Jpcap或Pcap4J**: 这两个库允许Java程序...

    基于Java平台安全性的分析与研究.pdf

    Java作为一种广泛使用的编程语言,在安全性方面拥有其独特的优势和特点。Java的安全性不仅关系到编程语言本身,还涉及到Java平台上的应用程序,这些应用对个人用户和企业来说都是至关重要的。随着Java技术的普及和...

    java开发使用的snmp库

    本文将深入探讨Java环境下使用SNMP库的关键知识点。 一、SNMP协议基础 SNMP是由Internet工程任务组(IETF)制定的一套标准协议,主要分为三个版本:SNMPv1、SNMPv2c和SNMPv3。SNMPv1是最基础的版本,安全性较低;...

    java读取数据库群发邮件.zip

    Java是一种广泛使用的编程语言,尤其在企业级应用和服务器端开发中占据主导地位。本项目“java读取数据库群发邮件”是利用Java技术来实现从Access数据库中获取数据,并根据这些数据进行邮件群发的功能。Access是一款...

    Java创建ipc连接

    结合RMI和CORBA(Common Object Request Broker Architecture)的标准,允许Java对象通过IIOP(Internet Inter-ORB Protocol)与任何支持CORBA的系统进行通信,实现进程间的交互。 10. **Web服务** 使用SOAP...

    Java代码测试IP是否为真实IP

    7. **日志记录**:为了调试和监控,可以使用Log4j、SLF4J等日志框架记录程序运行中的信息、警告和错误。 8. **单元测试**:使用JUnit或其他测试框架编写单元测试,确保代码的正确性。对于测试IP是否可达的功能,...

    JAVA基于JAVA的电子邮件接收系统论文

    了解如何使用Java的JDBC(Java Database Connectivity)接口与关系型数据库如MySQL、Oracle等交互,或者使用NoSQL数据库如MongoDB。 8. **用户界面设计**: 虽然描述中并未提及,但一个完整的系统通常会有用户界面供...

    数据库课件MIS系统(1) Java+mysql(1) 开发工具Myeclipe(1) java(1) Java聊天系统(1) JBUILDER2006+SQL(1) Java+sql(1) Java+sql2000(2) server2000(1)

    Java聊天系统则是通过Java编程实现的实时通信应用。 4. **Java与数据库的交互**:Java通过JDBC(Java Database Connectivity)接口与数据库进行连接,实现数据的CRUD(创建、读取、更新、删除)操作。Java+sql2000...

    java实现的模拟ping功能

    通过这个示例,初学者可以更好地理解如何使用Java进行网络编程,尤其是如何模拟发送ICMP(Internet Control Message Protocol)请求的过程。 #### 二、技术背景 1. **ICMP协议**:ICMP是Internet Control Message ...

    Java.mail开发包

    2. **邮件接收**:使用POP3(Post Office Protocol version 3)或IMAP(Internet Message Access Protocol)协议,Java Mail 可以从邮件服务器下载新的邮件,甚至支持离线模式。 3. **MIME支持**:MIME...

    modbus TCP/IP 调试工具 Modbus Poll 和java 开发工具jar包

    Modbus是一种广泛使用的工业通信协议,它允许设备之间进行数据交换,特别适用于自动化系统和远程监控。TCP/IP是网络通信的基础协议,它为Modbus提供了一种通过Internet或局域网进行通信的方式。"Modbus Poll"是一款...

    IP视频监控 LINUX服务端/WIN客户端//IE插件/JAVA客户端

    标题中的“IP视频监控 LINUX服务端/WIN客户端//IE插件/JAVA客户端”指的是一个全面的IP视频监控系统,该系统包含多个平台的组件,旨在实现远程监控和视频流处理。下面将详细介绍这些组成部分及其相关的知识点。 1. ...

    Android 远程视频监控程序源码

    6. **权限管理**:由于涉及到网络访问和摄像头使用,源码必须正确请求并处理Android系统的权限,例如INTERNET权限和CAMERA权限。 7. **多线程处理**:视频流的处理通常需要在后台线程进行,以避免阻塞主线程导致UI...

    邮箱邮件监控工具,实时监测邮箱中是否有新邮件到达。

    1. **SMTP/IMAP协议**:邮件监控工具需要使用SMTP(Simple Mail Transfer Protocol)或IMAP(Internet Message Access Protocol)协议与邮件服务器进行通信。SMTP用于发送邮件,而IMAP用于接收邮件,特别是在实时...

    从0开始用Java做智慧物联网.zip

    5. 数据处理和存储:教授如何使用Java处理实时数据流,以及如何将数据存储到数据库(如MySQL、MongoDB)或云存储(如Amazon S3)。 6. 实战项目:可能包含一个或多个实际的物联网项目示例,比如智能家居控制系统、...

Global site tag (gtag.js) - Google Analytics