Python中如何使用proxychains连接MongoDB?
如题,在 proxychains 下怎么连接本地的 mongodb ? 报错如下:
xiaokeke[@xiaokeke](/user/xiaokeke):~$ proxychains mongo
ProxyChains-3.1 ( http://proxychains.sf.net)
MongoDB shell version v4.0.2
connecting to: mongodb://127.0.0.1:27017
|S-chain|-<>-127.0.0.1:1080-<><>-127.0.0.1:27017-<><>-OK
2018-09-30T17:07:40.738+0800 E QUERY [js] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017' :
connect@src/mongo/shell/mongo.js:257:13
@(connect):1:6
exception: connect failed
同样其实 redis 也不可以... 为什么要这样呢?因为我要爬外国网站需要在 proxychains 下来跑。 求大神们解决!
Python中如何使用proxychains连接MongoDB?
这个问题其实有点混淆。proxychains 是一个系统级的代理工具,它通过 LD_PRELOAD 劫持网络库调用来工作。它不是一个 Python 库,所以你无法在 Python 代码里直接“使用”它。
正确的做法是:让你的 Python 进程本身通过 proxychains 启动。这样,该进程内所有的网络连接(包括 pymongo 发起的)都会自动走代理。
假设你已经安装并配置好了 proxychains(通常在 /etc/proxychains.conf 或 ~/.proxychains/proxychains.conf 中配置了代理服务器)。
步骤很简单:
- 正常编写你的 Python 连接 MongoDB 的脚本。 这里用
pymongo举例。 - 使用
proxychains命令来运行这个脚本。
示例代码 (connect_mongo.py):
import sys
from pymongo import MongoClient
def main():
# 你的 MongoDB 连接字符串。注意,这里的主机名/IP 会被 proxychains 代理出去。
# 例如连接本地MongoDB: mongodb://localhost:27017
# 连接远程MongoDB: mongodb://your-mongo-host:27017
mongo_uri = "mongodb://your-mongo-host:27017"
try:
client = MongoClient(mongo_uri, serverSelectionTimeoutMS=5000)
# 触发一个简单的命令来测试连接
client.admin.command('ping')
print("成功通过代理连接到 MongoDB!")
# 接下来可以进行你的数据库操作,例如:
# db = client['your_database']
# collection = db['your_collection']
# print(collection.find_one())
client.close()
except Exception as e:
print(f"连接失败: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
如何运行:
在终端中,不要直接用 python 命令,而是用 proxychains 包装它:
proxychains python connect_mongo.py
或者,如果你的 proxychains 命令是 proxychains4:
proxychains4 python connect_mongo.py
核心原理:
proxychains 会劫持 python 进程的 connect 等套接字调用,将它们重定向到你配置的代理服务器。对于你的 Python 代码和 pymongo 库来说,这一切是透明的,它们感知不到代理的存在,就像直接连接目标 MongoDB 一样。
一句话总结:用 proxychains 命令来启动你的 Python 脚本,而不是在脚本里调用它。
言辞有些不对,应该是求大神们帮忙!
http://lmgtfy.com/?q=proxychains+redirect+local
看看第一个 SO 的答案?

