我需要在Netty客户端配置socks代理(通过socks4或5个代理请求不同的站点).从免费袜子列表(如www.socks-proxy.net,http://sockslist.net/ 等)尝试了很多代理,但没有运气:
@Test
public void testProxy() throws Exception {
final String ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
final String host = "www.main.de";
final int port = 80;
Bootstrap b = new Bootstrap();
b.group(new NioEventLoopGroup())
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpClientCodec());
p.addLast(new HttpContentDecompressor());
p.addLast(new HttpObjectAggregator(10_485_760));
p.addLast(new ChannelInboundHandlerAdapter() {
@Override
public void channelActive(final ChannelHandlerContext ctx) throws Exception {
HttpRequest request = new …Run Code Online (Sandbox Code Playgroud) 我能够为NightmareJS设置一个HTTP代理,但是如何指定类型(http/socks5/socks4)?这是我用来设置HTTP代理的代码:
const nightmare = Nightmare({
show:true,
switches: {
'proxy-server': proxyHost + ':' + proxyPort,
'ignore-certificate-errors': true
},
waitTimeout: 400000
});
Run Code Online (Sandbox Code Playgroud) 有没有任何解决方案/补丁可以使nginx与袜子上游一起工作?
这样的事情:
server {
location / {
proxy_pass socks5://ip:port/
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用python发出HTTP请求.我尝试更改我的Windows系统代理(使用inetcpl.cpl)
url = 'http://www.whatismyip.com'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
request.set_proxy('127.0.0.1:9050', 'socks')
response = urllib2.urlopen(request)
response.read()
Run Code Online (Sandbox Code Playgroud)
给了我错误
回溯(最近一次调用最后一次):文件"",第1行,在响应中= urllib2.urlopen(请求)文件"C:\ Python27\lib\urllib2.py",第126行,在urlopen中返回_opener.open(url, data,timeout)文件"C:\ Python27\lib\urllib2.py",第400行,打开响应= self._open(req,data)文件"C:\ Python27\lib\urllib2.py",第423行,在_open'unknown_open',req)文件"C:\ Python27\lib\urllib2.py",第378行,在_call_chain中结果= func(*args)文件"C:\ Python27\lib\urllib2.py",第1240行,在unknown_open中提升URLError('未知网址类型:%s'%类型)URLError:
我有一个从我的笔记本电脑(机器A)到机器B的工作袜代理:
[A]$ ssh -ND 8888 B
我可以设置firefox在本地端口8888上使用socks代理,并且浏览工作.到现在为止还挺好.
但我在机器B和C之间也有一个袜子代理:
[B]$ ssh -ND 8157 C
所以我可以浏览B,好像我在C.
有没有办法链接两个代理,以便我能够在使用连接到C时本地使用firefox(在A上)?也就是说,以某种方式将所有firefox的socks请求从A转发到C.A和C不能直接看到对方,但我到处都有完全的root ssh访问权限.所有机器都是Debian.
请注意,我不想转发单个端口(如80),我想要一个完整的链式袜子代理.
我编写了一个应用程序(除其他外)在Windows中运行本地服务,充当Firefox的SOCKS v5代理.
我现在正处于调试阶段,发现某些网站无法正常运行.例如,Facebook.com上的图片上传Java Applet失败,因为无法查找域.
我的应用程序覆盖隐藏的FF配置设置network.proxy.socks__remote__dns将其设置为true.该应用程序的整个目的是允许在防火墙后面访问网站(例如,如果用户在中国),因此此设置对于确保远程解析域(而不仅仅是HTTP请求)至关重要.
在JRE6设置(此处记录)中没有等效的设置,因为远程DNS解析是SOCKS v5的一个功能而不是v4,因为文档似乎意味着我担心它是不可能的.
如何以编程方式确保JRE对所有请求(包括DNS)使用SOCKS v5代理?
更新:重现此问题的步骤:
它会因一系列类未找到的错误而失败,类似于:
load:未找到类com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class.
我相信这是失败的,因为JRE无法解析该类所在的域.我基于这样的信念,即文档(http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html)仅讨论SOCKS v4(其中据我所知,不支持远程DNS).我的deployment.properties文件位于%APPDATA%\ Sun\Java\Deployment中.我可以确认我在Java控制面板中进行的修改会写入该文件.如果不是"使用浏览器设置"而是Java的网络设置覆盖并尝试手动使用SOCKS代理设置,我仍然遇到问题.似乎没有一种简单的方法可以强制JRE通过代理远程执行DNS.
更新2:
没有SOCKS代理,来自我的本地客户端
两个主机都不可访问(因为防火墙)
如果我登录到远程服务器,我会得到:
几分钟后这两个IP都会发生变化,因为Facebook似乎使用循环DNS和其他负载均衡.
通过在Firefox中设置代理设置,我可以毫无困难地导航到www.facebook.com(因为DNS正在代理上远程解析).我转到带有Java applet的页面,它已经失败了,我已经报告了堆栈跟踪消息.
但是,如果我编辑Windows\System32\drivers\etc\hosts,为upload.facebook.com添加正确的IP我可以让applet加载并正常工作(有时需要重启FF).
这个证据似乎支持了我的理论,即Java Runtime 没有在代理上解析DNS,而只是通过它来路由流量.
我的应用程序是用于大规模部署,并且需要在其他站点(而不仅仅是facebook)上使用java applet.我真的需要解决这个问题.
更新3由ZZ Coder请求的Stacktrace转储:
load: class com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class not found.
java.lang.ClassNotFoundException: com.facebook.facebookphotouploader5.FacebookPhotoUploader5.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 我使用100%工作袜子,我无法通过我的应用程序连接.
SocketAddress proxyAddr = new InetSocketAddress("1.1.1.1", 12345);
Proxy pr = new Proxy(Proxy.Type.SOCKS, proxyAddr);
try
{
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(pr);
con.setConnectTimeout(proxyTimeout * 1000);
con.setReadTimeout(proxyTimeout * 1000);
con.connect();
System.out.println(con.usingProxy());
}
catch(IOException ex)
{
Logger.getLogger(Enter.class.getName()).log(Level.SEVERE, null, ex);
}
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?如果我将HTTP与一些HTTP代理一起使用,那么一切正常,但不是SOCKS.
我想知道,是否可以通过 websockets 协议传输/隧道 TCP 连接?
有一个websockets 包,似乎我可以将 TCP 连接 io.copy 复制到 websockets 连接中,但我不知道如何在另一端将其重新组装为 TCPConn。
例如,我想在一端创建一个 socks5 ServerN(在 NAT 后面),在另一端创建一个 ServerIE。互联网用户会向 ServerIE 发出socks5 请求(通过socks5 协议),ServerIE 会通过websocket 连接将socks5 请求发送到ServerNAT。ServerNAT 然后将处理socks5 请求(即它是socks5 服务器)。
编辑:
我写了一些代码,但不幸的是它在从 TCP 连接读取到 WS 时卡住了。运行它:go run main.go -logtostderr
package main
import (
"flag"
log "github.com/golang/glog"
"golang.org/x/net/websocket"
"bufio"
"net"
"net/http"
"time"
// "io"
)
func main() {
flag.Parse()
defer log.Flush()
log.Infof("wsServer()")
wsCh := wsServer()
log.Infof("wsNAT()")
natWS, err := wsNAT()
if err != nil {
log.Error(err)
return
} …Run Code Online (Sandbox Code Playgroud)