我在Python2.6中使用的是带有urllib2的sockspy。一切都很好,除了当我点击一个挂起的网址超时。urllib2函数超时参数或全局套接字默认超时都不起作用。我甚至尝试过在下面的子cassed处理程序中以多种不同的方式设置超时,但都没有成功。有什么想法吗?在
下面是一个测试脚本(假设您安装了sockspy项目并将其添加到系统路径中):
import os, sys
import httplib
sys.path.append( "/parent/path/to/socksipy/project" )
import socks # import socksipy
import socket
socket.setdefaulttimeout(30.0)
import urllib2
class SocksiPyConnection(httplib.HTTPConnection):
def __init__(self, proxytype, proxyaddr, proxyport = None, rdns = False, username = None, password = None, *args, **kwargs):
self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password)
httplib.HTTPConnection.__init__(self, *args, **kwargs)
def connect(self):
self.sock = socks.socksocket()
self.sock.setproxy(*self.proxyargs)
if isinstance(self.timeout, float):
self.sock.settimeout(self.timeout)
self.sock.connect((self.host, self.port))
class SocksiPyHandler(urllib2.HTTPHandler):
def __init__(self, *args, **kwargs):
self.args = args
self.kw = kwargs
urllib2.HTTPHandler.__init__(self)
def http_open(self, req):
def build(host, port=None, strict=None, timeout=0):
conn = SocksiPyConnection(*self.args, host=host, port=port, strict=strict, timeout=timeout, **self.kw)
return conn
return self.do_open(build, req)
if __name__ == '__main__':
#
# this one works for non-hanging URL
#
proxyhost = "responder.w2"
proxyport = 1050
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, proxyhost, int(proxyport))
socket.socket = socks.socksocket
resp = urllib2.urlopen("http://www.google.com", timeout=30.0)
# hang here
print "returned 1"
#
# one way to go about it for a hanging URL
#
proxyhost = "responder.w2"
proxyport = 1050
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, proxyhost, int(proxyport))
socket.socket = socks.socksocket
resp = urllib2.urlopen("http://erma.orr.noaa.gov/cgi-bin/mapserver/charts?version=1.1.1&service=wms&request=GetCapabilities", timeout=30.0)
# it hangs here
print "returned 2"
#
# another way to go about it for hanging URL
#
proxyhost = "responder.w2"
proxyport = 1050
opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, proxyhost, int(proxyport)) )
resp = opener.open("http://erma.orr.noaa.gov/cgi-bin/mapserver/charts?version=1.1.1&service=wms&request=GetCapabilities", timeout=30.0)
# it hangs here
print "returned 3"
首先,让我从解释上面的Builder配置开始
注意-tun接口可以支持多个地址系列(IPv4/IPv6)。例如,您可以分配多个接口地址(例如一个v4、一个v6或两个v6地址,或任何组合)
类似地,您可以添加希望VPN处理的路由。现在,主要的问题是如何决定我的VPN应该处理哪些路由强>
嗯,有很多选择
也就是说,以下是对您的问题的一些回答
请参阅上面的“路由所有内容”
linux上的接口可以从不同的地址族中分配多个接口地址
如上所述,第一部分是IP地址,第二部分定义子网掩码。另见CIDR notation
0.0.0.0/0意味着整个IPv4地址空间将通过VPN路由。通常,VPN无法处理我上面提到的链路本地流量。因此,您必须排除某些本地子网(请参见上面的链接)。至于电话挂起和重启,我不确定这是否和VPN有关,除非VPN不能正确处理流量(这会导致网络相关应用程序崩溃)
相关问题 更多 >
编程相关推荐