Java实现Socket5代理服务器

Java实现基于Socket的负载均衡代理服务器(含六种负载均衡算法) 手撸一个负载均衡代理服务器 阅读详情

直接贴代码,不解释

1 主服务,用来侦听端口

package org.javaren.proxy;

import java.net.ServerSocket;
import java.net.Socket;

public class SocketProxy {
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		ServerSocket serverSocket = new ServerSocket(8888);
		while (true) {
			Socket socket = null;
			try {
				socket = serverSocket.accept();
				new SocketThread(socket).start();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

2 核心代码,处理链接的代理线程

内部设计了Socket的认证,自己看吧

package org.javaren.proxy;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class SocketThread extends Thread {
	private Socket socketIn;
	private InputStream isIn;
	private OutputStream osIn;
	//
	private Socket socketOut;
	private InputStream isOut;
	private OutputStream osOut;

	public SocketThread(Socket socket) {
		this.socketIn = socket;
	}

	private byte[] buffer = new byte[4096];
	private static final byte[] VER = { 0x5, 0x0 };
	private static final byte[] CONNECT_OK = { 0x5, 0x0, 0x0, 0x1, 0, 0, 0, 0, 0, 0 };

	public void run() {
		try {
			System.out.println("\n\na client connect " + socketIn.getInetAddress() + ":" + socketIn.getPort());
			isIn = socketIn.getInputStream();
			osIn = socketIn.getOutputStream();
			int len = isIn.read(buffer);
			System.out.println("< " + bytesToHexString(buffer, 0, len));
			osIn.write(VER);
			osIn.flush();
			System.out.println("> " + bytesToHexString(VER, 0, VER.length));
			len = isIn.read(buffer);
			System.out.println("< " + bytesToHexString(buffer, 0, len));
			// 查找主机和端口
			String host = findHost(buffer, 4, 7);
			int port = findPort(buffer, 8, 9);
			System.out.println("host=" + host + ",port=" + port);
			socketOut = new Socket(host, port);
			isOut = socketOut.getInputStream();
			osOut = socketOut.getOutputStream();
			//
			for (int i = 4; i <= 9; i++) {
				CONNECT_OK[i] = buffer[i];
			}
			osIn.write(CONNECT_OK);
			osIn.flush();
			System.out.println("> " + bytesToHexString(CONNECT_OK, 0, CONNECT_OK.length));
			SocketThreadOutput out = new SocketThreadOutput(isIn, osOut);
			out.start();
			SocketThreadInput in = new SocketThreadInput(isOut, osIn);
			in.start();
			out.join();
			in.join();
		} catch (Exception e) {
			System.out.println("a client leave");
		} finally {
			try {
				if (socketIn != null) {
					socketIn.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println("socket close");
	}

	public static String findHost(byte[] bArray, int begin, int end) {
		StringBuffer sb = new StringBuffer();
		for (int i = begin; i <= end; i++) {
			sb.append(Integer.toString(0xFF & bArray[i]));
			sb.append(".");
		}
		sb.deleteCharAt(sb.length() - 1);
		return sb.toString();
	}

	public static int findPort(byte[] bArray, int begin, int end) {
		int port = 0;
		for (int i = begin; i <= end; i++) {
			port <<= 16;
			port += bArray[i];
		}
		return port;
	}

	// 4A 7D EB 69
	// 74 125 235 105
	public static final String bytesToHexString(byte[] bArray, int begin, int end) {
		StringBuffer sb = new StringBuffer(bArray.length);
		String sTemp;
		for (int i = begin; i < end; i++) {
			sTemp = Integer.toHexString(0xFF & bArray[i]);
			if (sTemp.length() < 2)
				sb.append(0);
			sb.append(sTemp.toUpperCase());
			sb.append(" ");
		}
		return sb.toString();
	}
}


3  读取线程,负责外面读数据,写入到请求端

package org.javaren.proxy;

/**
 * * 从外部读取,向内部发送信息
 */
import java.io.InputStream;
import java.io.OutputStream;

public class SocketThreadInput extends Thread {
	private InputStream isOut;
	private OutputStream osIn;

	public SocketThreadInput(InputStream isOut, OutputStream osIn) {
		this.isOut = isOut;
		this.osIn = osIn;
	}

	private byte[] buffer = new byte[409600];

	public void run() {
		try {
			int len;
			while ((len = isOut.read(buffer)) != -1) {
				if (len > 0) {
					System.out.println(new String(buffer, 0, len));
					osIn.write(buffer, 0, len);
					osIn.flush();
				}
			}
		} catch (Exception e) {
			System.out.println("SocketThreadInput leave");
		}
	}
}

4 写入线程,负责读取请求端数据,写入到目标端

package org.javaren.proxy;

import java.io.InputStream;
import java.io.OutputStream;

/**
 * 从内部读取,向外部发送信息
 * 
 * @author zxq
 * 
 */
public class SocketThreadOutput extends Thread {
	private InputStream isIn;
	private OutputStream osOut;

	public SocketThreadOutput(InputStream isIn, OutputStream osOut) {
		this.isIn = isIn;
		this.osOut = osOut;
	}

	private byte[] buffer = new byte[409600];

	public void run() {
		try {
			int len;
			while ((len = isIn.read(buffer)) != -1) {
				if (len > 0) {
					System.out.println(new String(buffer, 0, len));
					osOut.write(buffer, 0, len);
					osOut.flush();
				}
			}
		} catch (Exception e) {
			System.out.println("SocketThreadOutput leave");
		}
	}
}


效果还不错,用firefox/ ie都测试过,可用。


JAVA写HTTP代理服务器(一)-socket实现 HTTP代理服务器是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。 HTTP 代理有分两种: RFC 7230 - HTTP/1.1: Message Syntax and Routing(即修订后的 RFC 2616,HTTP/1 阅读详情

相关推荐

scRNA-seq的fastq文件处理流程——持续更新

获得了一批新的scRNA-seq的fastq.gz文件,每个样本的数据形式为: 我打算使用10X cellranger处理fastq.gz文件,下载及安装方式在官网:https://support.10xgenomics.com/single-cell-gene-expression/software/downloads/2.0这个网址写了10X cellranger处理fastq.gz文件的命名规则https://support.10xgenomics.com/single-cell-gene-expr

watermel__的博客 3199

JAVA写HTTP代理服务器-socket实现

HTTP代理服务器是一个中间服务器,它负责接收客户端的HTTP请求,然后将请求转发给目标服务器,并将目标服务器返回的响应返回给客户端。代理服务器可以处理各种HTTP请求,如GET、POST、PUT、DELETE等,并可以处理HTTPS请求。在开发Web应用程序时,使用代理服务器可以隐藏后端服务器的真实IP地址,增强安全性。

qq_41826150的博客 2776

RIGOL DS1102E示波器新手必看:从开机到捕获第一个波形的5分钟指南

本文为RIGOL DS1102E示波器新手提供了一份快速上手指南。内容涵盖从开机、探头校准到捕获第一个波形的完整流程,重点解析了触发设置、自动测量等核心操作,并指出了探头衰减比设置等常见误区,帮助用户快速掌握这款经典数字示波器的基本使用方法。

dream的博客 742

JAVA实现网络请求代理之Socket篇

JAVA实现网络请求代理之HTTP篇 (一) JAVA实现网络请求代理之Socket篇(二) Java代理服务器之截取,篡改HTTP请求(应用篇) 用Java实现Socket代理服务,原理上和http代理有些相似,只是两种协议的格式不一样。socket是对tcp/ip协议的抽象封装,...

chihuangxian4430的博客 1230

three.js中如何高效加载并播放GLB格式的3D动画

本文详细介绍了在three.js中高效加载并播放GLB格式3D动画的最佳实践。通过对比GLB与GLTF格式的优势,提供从环境搭建、模型加载到动画控制的完整解决方案,并分享性能优化技巧和常见问题排查方法,帮助开发者提升3D动画项目的开发效率和用户体验。

weixin_27890975的博客 362

基因的富集分析

通过RNA_seq差异表达分析等获得一组基因,想要进一步了解这些基因可能参与哪些生物学过程,具有哪些功能,一般就会用到基因的富集分析了。现在小麦基因注释信息已经可以获得,目前来看包括两套。一个是TGACv1,另一个就是IWGSC1.0。需要用到一个叫“clusterProfiler”的R包。下面用到的数据集来自TGACv1。1、安装source("https://bioconductor.org/b

xxxxx 1万+

Java实现sock5代理服务器

入职练手socks5代理服务器,过程总结一下。 1.下载火狐浏览器,设定代理为socks5代理,地址为127.0.0.1:1080。 2.socks5协议1928,中文版,原版,认真阅读 3.按照协议通过Java开发代理服务器。 4.代码在git上,https://github.com/Neal6/SimpleSocketProxy.git 5.说明:简略版,认证方式是默认的无认证,日志...

weixin_30878361的博客 1770

innovus中如何设置cts参数

上面是设置cts的一般设置,如果需要对某些skew group或者某些clock tree设置不一样的参数,如需要对clk1这个clock设置不一样的inverter,可以使用。需要查询已经设置过的ccopt参数,可以使用get_ccopt_property去查询,方法和set_ccopt_property一致。言归正传,cts的设置命令是set_ccopt_property,获取命令是get_ccopt_property。另外,set_ccopt_property提供一套命令查询方法。

芯冰乐 546

【Linux服务】socket5代理服务器搭建

如果在系统中需要搭建socket代理服务,可以参照如下脚本: 1、将账号密码替换成自己想要的设置 2、将"端口"替换成需要的端口号 3、运行脚本,即可完成安装 4、可通过netstat -lntp | grep ss5命令查看端口是否正常监听 5、通过脚本curl myip.ipip.net --socks5 ip:port -U user:password验证带来是否安装完成 #/bin/bash yum -y install gcc openldap-devel pam-devel op.

奋斗的佘先生丶 5710

Codex CLI 手机号验证失败?5 种接码平台实测对比与绕过地区限制的 3 步操作

揭示 Codex CLI 手机号验证失败的真实原因在于上下文污染而非网络问题,分析其通过 ASN、Accept-Language 和 TLS SNI 三重加权风控的机制,并实测对比 5 种接码平台在 DNS 解析路径、ASN 干净度和复用间隔上的差异,提出剥离浏览器指纹、固化 TLS SNI、隔离

weixin_42627902的博客 738

YOLO26优化:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 369

JAVA实现socket5代理

package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; ...

LGF的专栏 1297

SAP 销售订单BOM使用场景简介

通常在MTO的生产场景中,我们会根据已创建的SO去展开BOM去驱动生产,如果我们生产地产品BOM是通用性的通常我们用标准BOM的方式就可以实现,但是实际在生产过程中往往不会这样,不同的客户对某些物料的规格就不相同,就会涉及产生不同的BOM,但是该客户的产品又不存在通用性,这个时候就会引入概念就是销售订单BOM,先有销售订单然后根据销售订单+行项目创建BOM。销售BOM:根据销售订单号+行项目号创建的BOM,是根据特定的销售订单或者可以理解为特定的客户创建的BOM。

我小时候很黑的博客 4226

HTTP代理服务器的实现

接下来都是我对HTTP代理服务器的理解。 HTTP代理服务(proxy server) 器就是客户端也是服务端,是一个事务处理的中间人,就像下图所展示的一样, 图片来源于《HTTP权威...

DianaGreen7的博客 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机网络--http代理服务器的设计与实现

一、Socket编程的客户端和服务端的主要步骤: Java Socket编程:对于http传输协议 客户端: 1、创建新的socket,绑定服务器host和端口号 2、Socket创建成功后获得相应的输出流 3、将请求报文通过输出流传到服务器,记得flush()刷新缓存 4、创建该socket所对应的输入流,获取服务器的相应报文 服务端: 1、通过建立相应端口的socket实现监听

HIT_微笑前进的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java实现一个简单的代理服务器

这里实现了一个基础的代理服务器,就是socket管道的跳转,但是对于应用中的代理服务器,其中必有很多东西是要注意的,考虑的,这里的代码仅仅是为了使你去了解代理服务器的一个简单流程代理服务器类 package com.inetAddressTest.proxy;import jdk.internal.util.xml.impl.Input;import java.io.IOException; imp

A3536232的博客 2675

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Socket编程--自己动手的HTTP代理服务器

自己动手实现简单的HTTP代理服务器

idevede的博客 2万+

《疯狂java讲义》学习(50):使用代理服务器

1.使用代理服务器 从Java 5开始,Java在java.net包下提供了Proxy和ProxySelector两个类,其中Proxy代表一个代理服务器,可以在打开URLConnection连接时指定Proxy,创建Socket连接时也可以指定Proxy;而ProxySelector代表一个代理选择器,它提供了对代理服务器更加灵活的控制,它可以对HTTP、HTTPS、FTP、SOCKS等进行分别...

泛泛之素 850

使用java实现的socket代理(支持socket4和socket5)

代码如下: import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.nio.ByteBuffer; import java.text.DateFormat; import j...

weixin_30849403的博客 881

哈工大计算机网络实验一:HTTP代理服务器(Java语言实现)

否则可以直接将缓存中的数据返回。循环体中,我们对请求报文做一些解析用来提取一些必要的信息,然后建立与目标服务器的连接后,监听浏览器到服务器的数据传送,同时监听服务器到浏览器的数据传送。在Java中socket网络编程,慕课里也讲过,socket是点对点的,代理服务器程序在一次循环中,分别与浏览器客户端,目标服务器维持一个socket连接,那么数据流就可以在这条通路上传输。事实上,我们在浏览器地址栏上输入我们想访问的网址,到浏览器展示给我们丰富的页面,即使我们只访问一次,浏览器还是会发送许许多多的请求。

m0_61108725的博客 2566

Java 网络编程 —— Socket 详解

摘自《Java 网络编程核心技术详解》

低吟不作语的博客 5002

http代理服务器的实现原理

1.代理服务器 代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发网络信息。 代理服务器可以实现一下功能: 1.隐藏身份 2.充当防火墙 3.防止攻击 4.权限控制 代理服务器按照其使用方式和作用,分为正向代理服务器,反向代理服务器. 1.1代理服务器的分类 (1) HTTP代理 :能够代...

bpk_2的博客 973
上一篇: 蒙迪欧致胜豪华版钥匙没电了怎么启动汽车?
下一篇: Win7系统下载速度很快,上传速度超慢的解决
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值