2017-04-11 53 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