【问题标题】:SMTP server availability with PHP and telnet使用 PHP 和 telnet 的 SMTP 服务器可用性
【发布时间】:2017-09-06 22:23:27
【问题描述】:

我的公司正在租用大量 IP。我们的客户大多是邮寄者。在 IP 租用后,有时他们会使 IP 无法使用,因为 IP 在某些提供商处被阻止,例如 Yahoo、Gmail、AOL 等。

目前,我们通过绑定 IP 并从我们的 CentOS 系统运行 telnet 命令来进行简单的检查,如下所示:

telnet -b $IP smtp.gmail.com 25

获取输出,如果是 220 表示 OK,或者其他表明 IP 不是 dirty 的内容。

我正在寻找的是一个 PHP 脚本,或者首先是如何做到这一点的想法。 基本上,我们会绑定 IP,PHP 会检查连接的输出并写入 csv 文件。

我过去做过很多 php 项目,但没有类似的。从哪里开始有什么想法吗? 感谢您的建议。

编辑

由于我的调查,我能够做这样的事情,

    $eol= system("nc  -4 -w 2 -s $Binded_IP smtp.gmail.com 25", $output );
var_dump($output); 

并得到如下输出:

-bash-4.2$ php script.php 

220 smtp.gmail.com ESMTP 13sm2795405wml.25 - gsmtp

我正在尝试使用netcat 而不是telnet。对于不熟悉netcat的人来说,这就是参数的含义:

-4 to bind only IPv4
-s Source IP to bind to
-w 2  Timeout

但问题是我找不到关闭该连接的方法,它只会挂起并保持打开状态。如果我找到关闭该连接的方法,我可以将 $output 存储在文件中,过滤 SMTP 状态代码,然后继续使用第二个 IP 并检查它。

【问题讨论】:

  • 你不能通过 PHP 的 exec() 来运行它吗?或者,可能更好,只是做一个通过文本文件或其他东西中的 IP 运行的 bash 脚本?
  • @junkfoodjunkie 是的,我也考虑过 bash,但是卡住了如何终止并获取现有连接的输出
  • 这里的脚本应该可以帮助stackoverflow.com/questions/3675897/…

标签: php bash smtp telnet


【解决方案1】:

您可以使用以下脚本检查是否有与服务器的连接。

$f = fsockopen('smtp smtp.gmail.com', 25) ;
if ($f !== false) {
    $res = fread($f, 1024) ;
    if (strlen($res) > 0 && strpos($res, '220') === 0) {
        echo "Success!" ;
    }
    else {
        echo "Error: " . $res ;
    }
}
fclose($f) ;

【讨论】:

  • 是的,但它会通过主IP发送请求,而不是绑定一个。 F.e.服务器的主IP是192.168.1.1,我想测试10.0.0.0/24子网。因此,我将 `10.0.0.0/24 绑定到我的接口,然后我将使用这些 IP 来执行请求。 Ofc,那些是私有 IP,我只是举个例子。
  • 试试这个,我认为这会很有用demo.phpipam.net/logingithub.com/phpipam/phpipam
猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 2012-06-04
  • 2013-03-21
  • 2015-03-22
  • 2023-03-18
  • 2015-04-09
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多