2017-04-11 75 views
0

我的公司正在租用很多IP。我们的客户主要是邮寄者。在IP租约后,有时它们会让IP无法使用,因为IP在Yahoo,Gmail,AOL等某些提供商处被阻止。使用PHP和telnet的SMTP服务器可用性

目前,我们通过绑定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代替远程登录。这是自变量,对那些谁不熟悉netcat的含义:

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

但问题是我无法找到一个方法来关闭连接,它只是挂出,并保持开放。如果我找到一种方法来关闭连接,我可以在文件中存储$输出,过滤SMTP状态码,并继续使用第二个IP并检查它。

+0

难道你不能只通过PHP的exec()运行这个?或者,也许更好,只需要在文本文件或其他东西中运行IP地址的bash脚本? – junkfoodjunkie

+0

@junkfoodjunkie是的,我认为bash也是如此,但得到了stucked如何终止并获得现有连接的输出 – fugitive

+0

此脚本在这里应该有助于http://stackoverflow.com/questions/3675897/how-to-check-by- php-if-my-script-is-connecting-to-smtp-server – unixmiah

回答

0

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

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

是的,但它会通过主IP发送请求,而不是绑定的。 F.E.服务器的主要IP为'192.168.1.1',我想测试'10.0.0.0/24'子网。所以我会将'10.0.0.0/24绑定到我的界面,然后我将使用这些IP来做请求。 Ofc,这些都是私有IP,我举了一个例子。 – fugitive

+0

试试这个,我认为这将是有用的http://demo.phpipam.net/login/ https://github.com/phpipam/phpipam – unixmiah