You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Stem文档示例时Tor启动失败:无法绑定监听端口

解决Stem示例代码中OSError: Process terminated: Failed to bind one of the listener ports错误

我之前也碰到过这个问题,这个错误本质是Tor进程没法绑定你指定的SOCKS端口,最常见的原因是目标端口已经被其他进程占用,下面给你几个靠谱的解决办法:

1. 检查并释放占用的端口

先确认你的7000端口是不是被其他程序占了:

  • Windows系统:打开命令提示符,运行:
    netstat -ano | findstr :7000
    
    找到输出里的PID(最后一列数字),打开任务管理器,找到对应PID的进程并结束它。
  • Linux/macOS系统:打开终端,运行:
    lsof -i :7000
    # 或者用netstat
    netstat -tulpn | grep :7000
    
    用kill <PID>命令结束占用端口的进程(需要权限就加sudo)。

2. 更换未被占用的端口

如果不想折腾释放端口,直接换一个未被使用的端口就行,比如Tor默认的SOCKS端口9050,或者1080、8080这类常用端口。修改代码里的端口定义:

SOCKS_PORT = 9050  # 换成你确认未被占用的端口

3. 确保端口权限(针对低端口)

如果你非要用1024以下的端口(比如80、443),需要以管理员/root权限运行脚本,但不推荐这么做,尽量用1024以上的非特权端口,避免权限问题。

4. 其他排查点

  • 暂时关闭防火墙试试,有些防火墙规则可能会阻止本地端口绑定;
  • 更新Stem和Tor到最新版本,版本不兼容也可能导致奇怪的绑定问题:
    pip install --upgrade stem
    
    同时去Tor官网下载最新的稳定版Tor客户端。

补全后的完整示例代码

你提供的代码里getaddrin没写完,这里给你补全正确的版本(以更换到9050端口为例):

import socks
import socket
import stem.process
import urllib.request
from stem.util import term

SOCKS_PORT = 9050

# Set socks proxy and wrap the urllib module
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket

# Perform DNS resolution through the socket
def getaddrinfo(*args):
    return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]

socket.getaddrinfo = getaddrinfo

# Start Tor process
def print_bootstrap_lines(line):
    if "Bootstrapped " in line:
        print(term.format(line, term.Color.BLUE))

try:
    stem.process.launch_tor_with_config(
        config = {
            'SocksPort': str(SOCKS_PORT),
            'ExitNodes': '{us}',
        },
        init_msg_handler = print_bootstrap_lines,
    )
except stem.SocketError as e:
    print(f"Tor connection error: {e}")

内容的提问来源于stack exchange,提问作者Preston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:38:50