首页 > 编程知识 正文

scrapy框架安装(python代码封装供第三方使用)

时间:2023-05-03 23:41:46 阅读:84293 作者:1719

今天,哥哥用Python代码带来了在各个平台上设置socks5代理的方法。

因为互联网上各个平台设置的文章很分散,各个平台设置时都有一些漏洞,所以代码哥决定写一篇总结文章。

声明:本文不介绍socks5代理服务的实现,而是介绍如何在Windows、Linux和OSX上使用代码设置socks5配置。

在某些情况下,某些桌面程序可能需要代理配置功能,例如企业中的某些工具软件访问内部资源。 在这种情况下,必须将该软件的本机流量转发给公司指定的内部服务。

当然,我们日常使用桌面系统时,可以手动进行代理设置。 但是,对于需要用户手动设置的软件,由于增加了用户的学习难度,降低了软件的用户体验,开发人员需要知道如何在代码中更改设置。

本文以Python为例进行说明。 由于Python库的实现特点,库函数接口与c版本接口的原型基本一致,因此也可以作为C/C开发人员的参考。

下面是每个平台的一个示例。 设置代理的方法各种各样,代码的哥哥一次也没有尝试过,所以只展示曾经尝试过的可行方案。

OSX(Mac)

导入操作系统

# #打开代理

OS.popen (网络设置-网络安全代理' wi-fi ' socks5_代理_ IP套接字5 _代理_端口' ) )

# #关闭代理

OS.popen (网络设置-网络安全代理' wi-fi '关闭' ) .其中,套接字5 _代理IP是代理的IP添加

Mac实际上通过命令行方式进行设定。 OSX有一个叫做网络设置的工具,可以设置代理。

Linux

导入操作系统

# #打开代理

操作系统(gsettingssetorg.gnome .系统.代理模式'手动' ) .关闭) )。

操作系统(全球通用名称.系统.代理.套接字主机'套接字5 _代理_ IP ' ) .关闭) ) ) ) ) )

OS.popen (gsettingssetorg.gnome.system.proxy.socksportsocks5_ proxy _ port .格式) conf.listen端口)

操作系统(gsettingssetorg.gnome .系统.代理合并-主机'合并_ IPS ' .格式)合并) ) ) )。

# #关闭代理

操作系统(gsettingssetorg.gnome .系统.代理模式'无' ).close )其中,套接字5 _代理_ IP和套接字5 _代理

['localhost ',' 127.0.0.0/8 ',' :1']请注意,这里写的是字符串而不是Python数组。 可以在“”中添加不离开代理的IP,并用引号将其与其他地址分隔。

Windows

#编码=utf8

从类型导入*

从类型导入*

汇入视窗

导入设置为连接

lw str=点对点(wchar ) (注) ) (注) ) (注) ) ) ) (注) ) (注) ) (注) ) ) (注) ) ) (注) ) ) ) (注)

h互联网=lpvoid

互联网连接代理服务器=2

互联网_选项_刷新=37

互联网_选项_设置_已更改=39

互联网连接选项=75

互联网连接代理=3

互联网连接标志=1

类互联网连接选项(结构) :

等级值(联合) :

字段=[

(dw值)、DWORD )、

(pszValue )、LPWSTR )、

(' ftValue ',文件时间),

]

字段=[

(d

wOption', DWORD), ('Value', Value), ] class INTERNET_PER_CONN_OPTION_LIST(Structure): _fields_ = [ ('dwSize', DWORD), ('pszConnection', LPWSTR), ('dwOptionCount', DWORD), ('dwOptionError', DWORD), ('pOptions', POINTER(INTERNET_PER_CONN_OPTION)), ] def set_proxy_settings(serverIp, status='off'): whitelist = "IGNORED_IPs" if status == 'on': setting = create_unicode_buffer("SOCKS5_PROXY_IP:SOCKS5_PROXY_PORT") whitelist += ';{};{}'.format(serverIp, conf.WEBHOST) else: setting = None InternetSetOption = windll.wininet.InternetSetOptionW InternetSetOption.argtypes = [HINTERNET, DWORD, LPVOID, DWORD] InternetSetOption.restype = BOOL List = INTERNET_PER_CONN_OPTION_LIST() Option = (INTERNET_PER_CONN_OPTION * 3)() nSize = c_ulong(sizeof(INTERNET_PER_CONN_OPTION_LIST)) Option[0].dwOption = INTERNET_PER_CONN_FLAGS Option[0].Value.dwValue = (2 if status=='on' else 1) Option[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER Option[1].Value.pszValue = setting Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS Option[2].Value.pszValue = create_unicode_buffer(whitelist) List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST) List.pszConnection = None List.dwOptionCount = 3 List.dwOptionError = 0 List.pOptions = Option InternetSetOption(None, INTERNET_OPTION_PER_CONNECTION_OPTION, byref(List), nSize) if status == 'on': key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'SoftwareMicrosoftWindowsCurrentVersionInternet Settings', 0, winreg.KEY_WRITE) winreg.SetValueEx(key, 'ProxyServer', 0, 1, 'socks://SOCKS5_PROXY_IP:SOCKS5_PROXY_PORT') winreg.CloseKey(key) InternetSetOption(None, INTERNET_OPTION_SETTINGS_CHANGED, None, 0) InternetSetOption(None, INTERNET_OPTION_REFRESH, None, 0) if __name__ == "__main__": #打开代理 set_proxy_settings('127.0.0.1', 'on') #关闭代理 set_proxy_settings('')

可以看到,windows的设置就相对复杂很多了。其中,IGNORED_IPs是不走代理的IP地址列表,其形式与Linux不相同,参见如下:

localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;172.32.*;192.168.*

即地址与地址间以分号相隔,且无括号括起。

虽然我们也可以使用命令行形式修改注册表来达到,但是这样在pyinstaller打包后的程序会被系统防火墙直接干掉,且即便可以运行,代理配置修改生效时间至少需要10分钟,体验非常差。

同时,Windows比较坑的一点是,当手工去设置socks代理后,看到注册表项ProxyServer的值为socks=SOCKS5_PROXY_IP:SOCKS5_PROXY_PORT,但如果真的这样设置,那么代理收到的一定是socks4报文,而不是socks5。

喜欢的朋友可以关注码哥,也可以在下方评论区给码哥留言讨论,谢谢观看!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。