SOCKS5代理 的含义是?地址,端口是啥?HTTP代理又是啥,它的地址,端口又该怎样填写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SOCKS5代理 的含义是?地址,端口是啥?HTTP代理又是啥,它的地址,端口又该怎样填写?相关的知识,希望对你有一定的参考价值。
什么是HTTP代理:www对于每一个上网的人都再熟悉不过了,www连接请求就是采用的http协议,所以我们在浏览网页,下载数据(也可采用ftp协议)是就是用http代理。它通常绑定在代理服务器的80、3128、8080等端口上。什么是socks代理:相应的,采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks 不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks 代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。如果您在企业网或校园网上,需要透过防火墙或通过代理服务器访问 Internet就可能需要使用SOCKS。一般情况下,对于拨号上网用户都不需要使用它。注意,浏览网页时常用的代理服务器通常是专门的http代理,它和SOCKS是不同的。因此,您能浏览网页不等于 您一定可以通过SOCKS访问Internet。 常用的防火墙,或代理软件都支持SOCKS,但需要其管理员打开这一功能。为了使用socks,您需要了解一下内容:
① SOCKS服务器的IP地址
② SOCKS服务所在的端口
③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令
知道了上述信息,您就可以把这些信息填入“网络配置”中,或者在第一次登记时填入,您就可以使用socks代理了。
在实际应用中SOCKS代理可以用作为:电子邮件、新闻组软件、网络传呼ICQ、网络聊天MIRC和使用代理服务器上联众打游戏等等各种游戏应用软件当中
SOCKS是一组由Internal工程工作小组(IETF)所开发出来的开放软件开放标准,用来处理网络安全的事宜。SOCKS象一堵墙被夹在Internal服务器和客户端之间,对于出入企业网络的资讯提供流量和安全的管理。SOCKS这个名词并不是一组英文字头的缩写,而是一个和TCP/IP的Socket端口有关的安全标准,一般防火墙系统通常是象网关(Gateway)一样是作用在OSI模型的第七层也就是应用层上,对TCP/IP的高级协议,如Telnet、FTP、HTTP和SMTP加以管制,而SOCKS作用在OSI模型的第四层也就是会话层上,象一个代理一样对客户端到服务器端或服务器和服务器之间的数据联系,提供安全上的服务。由于SOCKS作用在会话层上,因此它是一个提供会话层到会话层间安全服务的方案,不受高层应用程序变更的影响。
那SOCKS4和SOCKS5又有什么不同?具体表现在SOCKS4只能代理TCP协议,而SOCKS5什么协议都可以代理,而QQ使用的是UDP协议,所以它不能使用SOCKS4代理,而象国外的ICQ使用比UDP协议安全的TCP协议,所以就可以使用SOCKS4代理。
那SOCKS代理和HTTP代理有什么不同?从上文我们知道SOCKS工作在会话层上,而HTTP工作在应用层上,SOCKS代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求),所以SOCKS代理服务器比应用层代理服务器要快得多。
常在一些软件的设置中可以看到HTTP代理、SOCKS代理和FTP代理等方面的设置项目。请问,这些代理之间有什么区别?
通常按照不同的用途选择不同的代理:浏览器用HTTP或SOCKS代理、下载软件用HTTP或SOCKS代理、上传软件用FTP或SOCKS代理、其他方面(聊天,MUD游戏等)一般用SOCKS代理。
SOCKS代理使用范围很广,但SOCKS有SOCK4和SOCK5之分。其中SOCK4只支持TCP协议,SOCK5支持TCP和UDP协议,还支持身份验证、服务器端域名解释等。SOCK4能干的SOCK5都可以干,反过来就不行。我们常用的聊天软件(如QQ),起初就一直用的是TCP和UDP协议,所以只能用SOCK5的代理。 参考技术A SOCKS5介绍
如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
通常不必关心 SOCKS5 协议。
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
外部 Internet 的机器访问外部时,有用。
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
网中的服务器,或者使通讯更加安全。
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
器的响应后,也原样转发给前端。
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
面。
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
利用SOCKS5代理服务器。
一个支持SOCKS5协议的前端,通常具有两种运行状态:
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
的。
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
端口要看 你的免费代理 是什么 地址也是 看他们提供 地址就是指那个代理的IP
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以http://开头的原因。
地址也是 HTTP 代理的 IP 和提供的端口 80 参考技术B socks4和socks5都属于socks协议,只是由于所支持的具体应用不同而存在差异。socks4代理只支持TCP应用,而socks5代理则可以支持TCP和UDP两种应用。不过由于socks5代理还支持各种身份验证机制,服务器端域名解析等,而socks4代理没有,所以通常对外开放的socks代理都是socks4代理,因此,UDP应用通常都不能被支持。 参考技术C socks4,socks5是代理的规范。
socks5代理服务器就是采用socks5协议的代理服务器。
好像可以实现tcp,udp的代理,其他的协议我也不清楚。可以让你通过他连接到你当前无法连接到的服务器上。 参考技术D 跳板 呵呵 就是代理软件了 地址应该就是 ip 端口 就是800 之类的
java.net.UnknownHostException:主机是未解析的 SOCKS 代理
【中文标题】java.net.UnknownHostException:主机是未解析的 SOCKS 代理【英文标题】:java.net.UnknownHostException: Host is unresolved SOCKS proxy 【发布时间】:2018-11-13 03:06:55 【问题描述】:我在特定端口上设置了 Tor,并希望通过该端口访问该网站。以下代码在 Android 7.0 中完美运行,但在 android 6.0 中出现以下错误。可能是什么问题? Tor 服务在我发送请求的特定端口成功运行。 运行这个库的示例代码(https://github.com/jehy/Tor-Onion-Proxy-Library)
错误
java.net.UnknownHostException:主机未解析:google.com W/System.err:在 java.net.Socket.connect(Socket.java:893) W / System.err:在 cz.msebera.android.httpclient.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:74) W / System.err:在 com.example.nandan.sampletorproxyapp.MyConnectionSocketFactory.connectSocket(MyConnectionSocketFactory.java:33) W / System.err:在 cz.msebera.android.httpclient.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134) W / System.err:在 cz.msebera.android.httpclient.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) W / System.err:在 cz.msebera.android.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) W / System.err:在 cz.msebera.android.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:236) W / System.err:在 cz.msebera.android.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) W / System.err:在 cz.msebera.android.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:88) W / System.err:在 cz.msebera.android.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:110) W / System.err:在 cz.msebera.android.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) W / System.err:在 cz.msebera.android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) W / System.err:在 cz.msebera.android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) W / System.err:在 com.example.nandan.sampletorproxyapp.MainActivity$TorTask.doInBackground(MainActivity.java:85) W / System.err:在 com.example.nandan.sampletorproxyapp.MainActivity$TorTask.doInBackground(MainActivity.java:60) W/System.err:在 android.os.AsyncTask$2.call(AsyncTask.java:295) W / System.err:在 java.util.concurrent.FutureTask.run(FutureTask.java:237) W/System.err: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) W / System.err:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W / System.err:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err:在 java.lang.Thread.run(Thread.java:818)
主要活动
HttpClient httpClient = getNewHttpClient();
int port = onionProxyManager.getIPv4LocalHostSocksPort();
InetSocketAddress socksaddr = new InetSocketAddress("127.0.0.1", port);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("socks.address", socksaddr);
HttpGet httpGet = new HttpGet("http://google.co.in");
HttpResponse httpResponse = httpClient.execute(httpGet, context); // GETTING ERROR HERE
static class FakeDnsResolver implements DnsResolver
@Override
public InetAddress[] resolve(String host) throws UnknownHostException
return new InetAddress[] InetAddress.getByAddress(new byte[] 1, 1, 1, 1 ) ;
public HttpClient getNewHttpClient()
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new MyConnectionSocketFactory())
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg,new FakeDnsResolver());
return HttpClients.custom()
.setConnectionManager(cm)
.build();
MyConnectionSocketFactory.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import cz.msebera.android.httpclient.HttpHost;
import cz.msebera.android.httpclient.conn.socket.PlainConnectionSocketFactory;
import cz.msebera.android.httpclient.protocol.HttpContext;
public class MyConnectionSocketFactory extends PlainConnectionSocketFactory
@Override
public Socket createSocket(final HttpContext context)
InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address");
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
return new Socket(proxy);
@Override
public Socket connectSocket(
int connectTimeout,
Socket socket,
final HttpHost host,
final InetSocketAddress remoteAddress,
final InetSocketAddress localAddress,
final HttpContext context) throws IOException
InetSocketAddress unresolvedRemote = InetSocketAddress
.createUnresolved(host.getHostName(), remoteAddress.getPort());
return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context);
【问题讨论】:
【参考方案1】:尝试改变
HttpGet httpGet = new HttpGet("http:google.co.in");
到
HttpGet httpGet = new HttpGet("http://google.co.in");
或
URI uri = new URIBuilder()
.setScheme("http")
.setHost("google.co.in")
.build();
HttpGet httpGet = new HttpGet(uri);
更新 - 试试这个
HttpHost target = new HttpHost("google.co.in", 80, "http");
HttpGet httpGet = new HttpGet("/");
HttpResponse httpResponse = httpClient.execute(target, httpGet, context);
如果它不起作用,我不太确定。也许试试这个链接希望这有助于How to use HttpClientBuilder with Http proxy?
【讨论】:
我使用的是HttpGet httpGet = new HttpGet("http://google.co.in");
,对不起,我确实弄错了为什么发布这个问题。第二个也不行。
更新了我的答案。希望对您有所帮助
另外,如果您打印port
变量,它会给您一个有效的端口号还是为空?以上是关于SOCKS5代理 的含义是?地址,端口是啥?HTTP代理又是啥,它的地址,端口又该怎样填写?的主要内容,如果未能解决你的问题,请参考以下文章