`
edwin492
  • 浏览: 117160 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Http隧道

    博客分类:
  • J2SE
阅读更多

 客户端序列化后封装在http中发送到服务端再进行反序列化操作,故此Message类必须是可序列化的,

   而且两端的类名必须相同。而在webservice中应用了SOAP(简单对象访问协议)实为对xml的序列化与反序列化。

   故HttpTunnel应用于Java方面,而webService可以应用在Java\.Net........ 

服务端servlet

public class HttpServer extends HttpServlet{
	@Override
	public void service(HttpServletRequest req, HttpServletResponse rsp){
		Message msg = (Message)this.reciveMsg(req);
		System.out.println("server recive msg ...." + msg);
		msg.setName("456");
		msg.setSignature("12345678910");
		sendMsg(rsp,msg);
		System.out.println("server send message...." + msg);
	}
	
	//发送数据
	public void sendMsg(HttpServletResponse rsp, Object msg){
		ByteArrayOutputStream baos = null;
		ObjectOutputStream oos = null;
		ServletOutputStream  sos = null;
		rsp.setContentType("application/octet-stream");
		try {
			//ByteArrayOutputStream针对字节数组的输出流,将数据从流中写入到字节数组中
			//ByteArrayInputStream从字节数组中读出数据到流中
			baos = new ByteArrayOutputStream();
			//ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream
			//只支持序列化的对象 
			oos = new ObjectOutputStream(baos);
			oos.writeObject(msg);
			byte[] buffer = baos.toByteArray();
			sos = rsp.getOutputStream(); 
			rsp.setContentLength(buffer.length);
			sos.write(buffer);
			sos.flush();
		} catch (IOException e) {
			e.printStackTrace();   
		}finally{
			try {
				if(null != baos){
					baos.close();
				}
				if(null != oos){
					oos.close();
				}
				if(null != sos){
					sos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();   
			}
		}
	}
	
	//接收数据
	public Object reciveMsg(HttpServletRequest req){
		Message msg = null;
		try {
			ServletInputStream sis = req.getInputStream();
			ObjectInputStream ois = new ObjectInputStream(sis);
			msg = (Message)ois.readObject();
		} catch (Exception e) {
			e.printStackTrace();   
		}
		return msg;
	}
	
}

 Message类封装数据,服务端与客户端相同

public class Message implements Serializable{
	
	private static final long serialVersionUID = 6460238717630911305L;
	
	private String name;
	private String signature;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSignature() {
		return signature;
	}
	public void setSignature(String signature) {
		this.signature = signature;
	}
	
	public String toString(){
		return "name="+this.name+" signature=" + this.signature;
	}
}

 web.xml配置servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<servlet>
		<servlet-name>HttpServer</servlet-name>
		<servlet-class>com.httptunnel.server.HttpServer</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>HttpServer</servlet-name>
		<url-pattern>/httpServer</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 客户端

public class HttpClient {

	public void sendAndRec(Object msg){
		URLConnection con = null;
		ByteArrayOutputStream baos = null;
		ObjectOutputStream oos = null;
		DataOutputStream dos = null;
		ObjectInputStream ois = null;
		try {
			URL url = new URL("http://localhost:8080/HttpTunnelServer/httpServer");
			con = url.openConnection(); 
			con.setUseCaches(false);
			con.setDoInput(true);
			con.setDoOutput(true);
			baos = new ByteArrayOutputStream();
			oos = new ObjectOutputStream(baos);
			oos.writeObject(msg);
			oos.flush();
			byte[] buffer = baos.toByteArray();
			con.setRequestProperty("content-type", "application/octet-stream");
			con.setRequestProperty("content-length", buffer.length+"");
			dos = new DataOutputStream(con.getOutputStream());
			dos.write(buffer);
			dos.flush(); 
			System.out.println("client send ...." + msg);
			//con.getInputStream()时才发送数据?
			InputStream is = con.getInputStream();
			ois = new ObjectInputStream(is);
			Object message = (Object) ois.readObject(); //读取服务端的数据
			System.out.println("client recive ...." + message);
		} catch (Exception e) {
			e.printStackTrace();   
		}finally{
			try {
				if(null != baos){
					baos.close();
				}
				if(null != oos){
					oos.close();
				}
				if(null != dos){
					dos.close();
				}
				if(null != ois){
					ois.close();
				}
			} catch (Exception e) {
				e.printStackTrace();   
			}
		}
	}
	
	public static void main(String[] args) {
		HttpClient client = new HttpClient();
		Message msg = new Message();
		msg.setName("123");
		msg.setSignature("12345 work is tired...");
		client.sendAndRec(msg);
	}

}
   客户端序列化后封装在http中发送到服务端再进行反序列化操作,故此Message类必须是可序列化的,

   而且两端的类名必须相同。而在webservice中应用了SOAP(简单对象访问协议)实为对xml的序列化与反序列化。

   故HttpTunnel应用于Java方面,而webService可以应用在Java\.Net........ 

分享到:
评论

相关推荐

    论文研究-一种基于多层联合分析的HTTP隧道木马检测方法.pdf

    针对现有的基于网络层或传输层的木马通信行为检测方法应用到HTTP隧道木马的检测中识别精度较低的问题,提出一种基于多层联合分析的HTTP隧道木马检测方法。从应用层、传输层和网络层三个层面提取HTTP会话过程中区分...

    http隧道通信例子

    学习http隧道协议进行通信的简单例子!

    第一百课:HTTP隧道reDuh第四季.docx

    第一百课:HTTP隧道reDuh第四季.docx

    第九十六课:HTTP隧道ABPTTS第一季.docx

    ### HTTP隧道ABPTTS知识点详解 #### 一、ABPTTS概述 ABPTTS(A Black Path Toward The Sun)是一款由NCC Group在2016年的Black Hat大会上推出的工具,该工具主要功能是将TCP流量通过HTTP/HTTPS协议进行转发。在...

    http隧道 防火墙穿透

    http隧道防火墙穿透 http隧道防火墙穿透是指一种绕过防火墙端口屏蔽的通讯方式,可以有效地解决防火墙对端口的屏蔽作用。其原理是将防火墙两端的数据包封装在防火墙所允许通过的数据包类型或是端口上,然后穿过...

    基于HTTP隧道的个人防火墙穿透技术研究

    基于HTTP隧道的个人防火墙穿透技术研究,硕士论文,较为全面的介绍了防火墙扫描和穿透技术,设计和实现了基于反弹连接+HTTP隧道的防火墙穿透技术。注意下载CAJView打开。

    PcShare 2.0反弹式HTTP隧道远程控制软件

    为HTTP隧道,可以控制局域网内部的机器。 控制功能包括屏幕控制,文件操作,注册表编辑,窗口管理,进程管理、服务管 理、按键记录、文件查找等大部分功能远程控制功能。 文件传输支持多文件下载,并能断点...

    http隧道源码

    HTTP隧道是一种网络通信技术,它允许通过HTTP或HTTPS协议来传输任意类型的数据,通常用于绕过网络限制或者伪装网络通信。在本主题中,我们主要探讨的是“HTTP隧道源码”,这可能是一个开源项目,名为...

    第九十八课:HTTP隧道reGeorg第二季.docx

    ### 第九十八课:HTTP隧道reGeorg第二季 #### reGeorg简介 reGeorg是一款功能强大的HTTP隧道工具,其历史可追溯至2008年的Black Hat USA会议上,由SensePost公司发布的一个名为reDuh的项目延伸而来。这款工具在...

    浅析HTTP隧道个人防火墙技术

    当今社会,人们的工作、生活已经离不开网络,这使得网络安全问题变...文章分析了个人防火墙技术,提出了HTTP隧道技术反向连接结合穿透防火墙通信方法,实现了其模块设计,并用于实际防火墙,验证了这种方法的有效性和可靠性。

    基于HTTP流量和DNS隧道技术进行检测

    本文主要关注两种关键的检测技术:基于HTTP流量的检测和DNS隧道检测。 【僵木蠕流量演变趋势】 在过去的年代,大多数恶意软件使用TCP和UDP协议进行通信,如Gh0st和ZeroAcess。然而,随着时间的发展,恶意软件开始...

    基于HTTP隧道的JavaRMI设计与实现

    基于HTTP隧道的JavaRMI设计与实现

    基于HTTP隧道的Java RMI设计与实现.pdf

    基于HTTP隧道的Java RMI设计与实现.pdf

    第一百课:HTTP隧道reDuh第四季1

    第一百课:HTTP隧道reDuh第四季1

    第九十六课:HTTP隧道abptts第一季1

    第九十六课:HTTP隧道abptts第一季1

    第九十九课:HTTP隧道Tunna第三季.docx

    第九十九课:HTTP隧道Tunna第三季.docx

    endlessssh:通过 HTTP 隧道传输 SSH

    无休止的通过 HTTP 隧道传输 SSH 无尽的sh(所有字符均为小写),是一个用Python编写的工具,包括一个SSH ProxyCommand和一个ProxyServer。 它让您有机会保持 ssh 会话永不中断,即使您将计算机(运行 ssh 客户端)...

    一种基于多层联合分析的HTTP隧道木马检测方法 (2016年)

    针对现有的基于网络层或传输层的木马通信行为检测方法应用到HTTP隧道木马的检测中识别精度较低的问题,提出一种基于多层联合分析的HTTP隧道木马检测方法。从应用层、传输层和网络层三个层面提取HTTP会话过程中区分...

    stunnel:简单的SOCKS5HTTP隧道

    隧道简单的SOCKS5 / HTTP隧道。 客户端上的SOCKS5仅提供NO AUTHENTICATION TCP方法。 . | . . f . . i .port1 ------| r |------ port1 | e | |

Global site tag (gtag.js) - Google Analytics