最近做一个项目需要使用代理,比如A需要发数据给B,原来是直接A发送给B,现在需要经过代理P,变成了A发送给P、P再发送给B,P是透明代理,不做内容的解析。代理的协议包括FTP、TCP、UDP。本文介绍3proxy代理服务器的配置以及JAVA代理的设置。
目录
代理服务器使用3proxy
配置文件3proxy.cfg的配置如下:
#!/usr/local/bin/3proxy #域名解析服务器和缓存 nserver 8.8.8.8 nserver 4.4.4.4 nscache 65536 #超时设置 timeouts 1 5 30 60 180 1800 15 60 #日志设置 log "/root/log/3proxy.log" D logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T" rotate 3 #IP设置,注意,此处外部IP使用0.0.0.0,不能直接使用机器的外网IP external 0.0.0.0 internal 192.168.168.14 #socks代理,ip验证,允许所有的链接 auth iponly flush allow * * * * CONNECT maxconn 65535 socks -p9000 #UDP转发 auth none udppm -s 9001 222.189.192.118 9999 udppm -s 9002 222.189.192.139 9999JAVA代理的设置
Apache Ftp client:
FTPClient client = new FTPClient(); client.setDefaultTimeout(30 * 1000); client.setDataTimeout(180 * 1000); client.setConnectTimeout(10 * 1000); SocketAddress addr = new InetSocketAddress(proxyIp, proxyPort); Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); client.setProxy(proxy); client.connect(ip, port);TCP:
Socket s =new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyIp, proxyPort))); SocketAddress addr = new InetSocketAddress(ip, port); s.setSoLinger(true, 0); s.setKeepAlive(true); s.setTcpNoDelay(true); s.setSoTimeout(3000); s.connect(addr, 10000);UDP:
本人目前还没找到JAVA UDP设置代理的方式,故采用UDP端口转发的方式,刚好3proxy也支持UDP转发,故在3proxy.cfg中配置端口和目标IP和端口的映射即可。
如本文对您有帮助,请关注【自学堂】头条号吧!