使用tor socket访问带有ssl的imap

时间:2017-11-30 19:06:52

标签: sockets ssl imap tor

您好在我的centos 6.9中安装tor之后,我使用以下命令通过tor:

访问imap
$aStreamContextSettings = array(
        'http' => array(
            'proxy' => '127.0.0.1:8118'
        )
        'ssl' => array(
            'verify_host' => false,
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );

    $rStreamContext = \stream_context_create($aStreamContextSettings);

    $connect = \stream_socket_client('ssl://imap.gmail.com:993',0, "", 10, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $rStreamContext);

该命令效果很好,它使用tor ip而不是我的服务器ip访问imap。 问题是尝试使用socks在php中进行。

以下代码使用端口8118(privoxy port)在tor端口9050中打开http隧道:

$aStreamContextSettings = array(
        'socket' => array(
            'bindto' => '127.0.0.1:9050',
        ),
        'ssl' => array(
            'verify_host' => false,
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );

它不能正常工作。

我也试图绑定到tor,但它已经回来了:

  

stream_socket_client():无法绑定到' 127.0.0.1:9050',系统说:地址已在使用

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    _, frame = cap.read()

    cv2.imshow('frame',frame)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

我希望有人可以弄清楚我的代码中的问题在哪里

1 个答案:

答案 0 :(得分:2)

问题是Privoxy是一个HTTP代理,它可以使用Tor的SOCKS代理作为上游,这样不支持SOCKS的HTTP应用程序仍然可以使用Tor。

由于您正在尝试打开IMAP连接,因此Privoxy不会起作用,因为它希望说HTTP而不是IMAP。

您基本上需要找到支持SOCKS5的IMAP库。如果cURL是使用imap支持构建的,那么它也可以正常工作。

由于PHP套接字不支持SOCKS,另一种选择是使用通用SOCKS客户端,然后使用它从远程IMAP服务器读/写。为此,请查看bitaurora/phsocks

编辑:根据您的目的,cURL可能仍然是您的最佳选择。连接到IMAP时,您绝对想要使用SSL / TLS,如果使用SOCKS客户端,则必须手动实现TLS。

以下是PHP中的IMAP cURL示例:

{{1}}

适用于Gmail。如果帐户启用了双因素身份验证,则无法使用常规密码登录。您需要生成应用密码并将其用作密码。