使用SOCKS代理通过Python连接IRC服务器失败求助
Python使用SOCKS代理连接IRC服务器失败
- SOCKS代理经检测可用,mIRC配置该代理后能正常连接IRC服务器,但Python代码无法成功连接
- 尝试更换多个SOCKS4、SOCKS5代理,均无效果:要么绕过代理直接使用真实IP连接,要么返回连接超时错误
原代码
import socks import time proxy_type = socks.PROXY_TYPE_SOCKS4 proxy = '192.111.135.17' port = 18302 network = "irc.icqchat.net" port = 6667 irc = socks.socksocket() irc.setproxy(proxy_type, proxy, port) irc.connect((network, port)) print (irc.recv ( 4096 )) irc.send(bytes( 'NICK test_connection \r\n' , "UTF-8")) irc.send(bytes( 'USER botty botty botty :Sup\r\n' , "UTF-8")) irc.send(bytes( 'JOIN #testing \r\n' , "UTF-8")) time.sleep(4)
报错信息
socks.ProxyConnectionError: Error connecting to SOCKS4 proxy 192.111.135.17:6667: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
问题分析与修复
核心错误:变量名冲突
代码中重复使用了port变量:先定义代理端口为18302,随后又将IRC服务器端口6667赋值给同一个port变量,导致调用setproxy()时传入的是IRC端口而非代理端口,这直接导致代理连接失败。
修复后的代码
修改变量名避免冲突,同时规范IRC命令格式(去掉多余空格):
import socks import time proxy_type = socks.PROXY_TYPE_SOCKS4 proxy = '192.111.135.17' proxy_port = 18302 # 重命名代理端口变量 network = "irc.icqchat.net" irc_port = 6667 # 重命名IRC服务器端口变量 irc = socks.socksocket() irc.setproxy(proxy_type, proxy, proxy_port) # 传入正确的代理端口 irc.connect((network, irc_port)) print(irc.recv(4096)) # 去掉命令中的多余空格,避免服务器解析异常 irc.send(bytes('NICK test_connection\r\n', "UTF-8")) irc.send(bytes('USER botty botty botty :Sup\r\n', "UTF-8")) irc.send(bytes('JOIN #testing\r\n', "UTF-8")) time.sleep(4)
额外注意事项
- 若使用SOCKS5代理,需将
proxy_type改为socks.PROXY_TYPE_SOCKS5;部分SOCKS5代理需要验证,可在setproxy()中添加username和password参数 - 发送IRC命令时尽量保持格式规范,避免多余空格,防止服务器无法正确解析命令
内容的提问来源于stack exchange,提问作者Sib
相关产品推荐
相关产品推荐

