gpt4 book ai didi

sockets - 使用 tor 套接字通过 ssl 访问 imap

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:46 25 4
gpt4 key购买 nike

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

torify telnet imap.gmail.com 993

该命令运行良好,它使用 tor ip 而不是我的服务器 ip 访问 imap。问题是在尝试使用 socks 在 php 中执行此操作时。

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

$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);

它不工作。

我也曾尝试绑定(bind)到 tor,但它正在返回:

stream_socket_client(): failed to bind to '127.0.0.1:9050', system said: Address already in use

$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
)
);

我希望有人能找出我代码中的问题所在

最佳答案

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

由于您尝试打​​开 IMAP 连接,Privoxy 将无法工作,因为它希望使用 HTTP,而不是 IMAP。

您基本上需要找到一个支持 SOCKS5 的 IMAP 库。如果 cURL 是使用 imap 支持构建的,它应该也能正常工作。

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

编辑:根据您尝试执行的操作,cU​​RL 可能仍然是您的最佳选择。连接到 IMAP 时,您绝对希望使用 SSL/TLS,如果您使用 SOCKS 客户端,则必须手动实现 TLS。

这是一个 PHP 中的 IMAP cURL 示例:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'imaps://imap.gmail.com:993');
curl_setopt($ch, CURLOPT_USERPWD, 'username@gmail.com:12345');

curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:9050');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
/*
// some fetches don't return everything with RETURNTRANSFER.
// instead, you'll have to use the header function to get the data
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($ch, $data) {
echo $data;
return strlen($data);
});
*/

$cmd = 'select INBOX';

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $cmd);

$res = curl_exec($ch);

if ($res === false) {
// login failed or possible server connection error
}

var_dump($res, curl_getinfo($ch)); exit;

// need the headerfunction here to get the header info
$cmd = 'FETCH 1:10 (FLAGS BODY[HEADER.FIELDS (SUBJECT DATE FROM)])';

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $cmd);

$res = curl_exec($ch);

var_dump($res);

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

关于sockets - 使用 tor 套接字通过 ssl 访问 imap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47580883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com