///////////////////////////////////////////////////////////////////////////
//
// DNSBL - Spam IP address checker.
// Copyright (C) 2011 Alexey A.Znayev
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// Alexey A.Znayev, znaeff@mail.ru, http://xbsoft.org, http://xbsoft.ru
//
///////////////////////////////////////////////////////////////////////////
// This file contains public class DNSBL
// This class performs IP address check in spam blocking lists as described
// on http://ru.wikipedia.org/wiki/RBL
class DNSBL {
private $_aCheckers = array( // list of checkers available for individual checking
'spamhaus' => array('.zen.spamhaus.org', true), //available for group checking with 'all' key
'spamcop' => array('.bl.spamcop.net', true), //available for group checking with 'all' key
'dsbl' => array('.list.dsbl.org', false), //not available for group checking with 'all' key
'ordb' => array('.relays.ordb.org', false), //not available for group checking with 'all' key
'sorbs' => array('.dnsbl.sorbs.net', false), //not available for group checking with 'all' key
'njabl' => array('.dnsbl.njabl.org', false) //not available for group checking with 'all' key
); // AZ - 1. Key 'all' is illegal
// AZ - 2. Most of spammer IP addresses is covered by 'spamhaus' & 'spamcop' (and they are fast),
// some of the rest may not work sometimes, you can make them group checking available after individual testing
private $_sDefaultChecker = 'spamhaus';
///////////////////////////////////////////////////////////////////////////
// CheckSpamIP - check IP for spam in checkers : given, default or all available for group checking (may be slow)
// parameters:
// string $ip - ip address
// string $checker - checker name or 'all' or nothing
// returns:
// true when IP exitsts in spam-lists of $checker or at least one of all checkers
// false when not or when ip address is local or not correct
public function CheckSpamIP($ip, $checker = ''){
if(empty($ip)) return false;
if(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ip) != 1) return false;
$octets = explode('.', $ip);
if($octets[0] == '127') return false;
if($octets[0] == '10') return false;
if($octets[0] == '192' && $octets[0] == '168') return false;
if($octets[0] == '169' && $octets[0] == '254') return false; // ms windows
if((int)$octets[0] > 255 || (int)$octets[1] > 255 || (int)$octets[2] > 255 || (int)$octets[3] > 255 ) return false;
$ret_val = false;
$PTR = implode(array_reverse($octets), '.');
if($checker === 'all'){
foreach(array_values($this->_aCheckers) as $c){
if($c[1]){
$ret_val = $ret_val || $this->_CheckDNSAnswer(dns_get_record($PTR . $c[0], DNS_A));
}
if($ret_val) break;
}
}else if(array_key_exists($checker, $this->_aCheckers)){
$ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$checker][0], DNS_A));
}else{
$ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$this->_sDefaultChecker][0], DNS_A));
}
return $ret_val;
}
///////////////////////////////////////////////////////////////////////////
// GetCheckers - gets list of available checker names
// returns:
// array of strings
public function GetCheckers(){
return array_keys($this->_aCheckers);
}
///////////////////////////////////////////////////////////////////////////
// GetGroupCheckers - gets list of checker names available for group checking with 'all' key
// returns:
// array of strings
public function GetGroupCheckers(){
$ret_val = array();
foreach(array_keys($this->_aCheckers) as $k) if($this->_aCheckers[$k][1]) array_push($ret_val, $k);
return $ret_val;
}
///////////////////////////////////////////////////////////////////////////
// GetDefaultChecker - gets default checker name
// returns:
// string
public function GetDefaultChecker(){
return $this->_sDefaultChecker;
}
///////////////////////////////////////////////////////////////////////////
// SetDefaultChecker - sets default checker name
// parameters:
// string $new_checker - new default checker name
// returns:
// true when success
// false when failed ($new_checker is not in the list of available checker names)
public function SetDefaultChecker($new_checker){
if(array_key_exists($new_checker, $this->_aCheckers)){
$this->_sDefaultChecker = $new_checker;
return true;
}else{
return false;
}
}
///////////////////////////////////////////////////////////////////////////
// EnableGroupChecking - sets checker available for group checking
// parameters:
// string $checker - checker name
// returns:
// true when success ($checker is included)
// false when failed ($checker is not in the list of available checker names)
public function EnableGroupChecking($checker){
if(array_key_exists($checker, $this->_aCheckers)){
$this->_aCheckers[$checker][1] = true;
return true;
}else{
return false;
}
}
///////////////////////////////////////////////////////////////////////////
// DisableGroupChecking - sets checker not available for group checking
// parameters:
// string $checker - checker name
// returns:
// true when success ($checker is excluded)
// false when failed ($checker is not in the list of available checker names)
public function DisableGroupChecking($checker){
if(array_key_exists($checker, $this->_aCheckers)){
$this->_aCheckers[$checker][1] = false;
return true;
}else{
return false;
}
}
// private methods
///////////////////////////////////////////////////////////////////////////
// _CheckDNSAnswer - checks DNS-server answer for 127.0.0.* values
// returns:
// true when success
// false when failed
private function _CheckDNSAnswer($dns_answer){
if(!is_array($dns_answer)) return false;
$len = count($dns_answer);
if($len <= 0) return false;
for($i=0; $i<$len; $i++){
$obj = $dns_answer[$i];
if(!(is_object($obj) || is_array($obj))) return false;
$ip_str = $obj['ip'];
if(!is_string($ip_str)) return false;
$pos = strpos($ip_str, '127.0.0.');
if($pos !== false) return true;
}
return false;
}
} // end of class DNSBL
?>
انسانی حقوق Archives - Page 2 of 5 - ھزارہ بین الاقوامی نیٹ ورک
تحریر- علی امیری ترجمہ وتلخیص – اسحاق محمدی کوئی پانچ صدی قبل ھرات میں مقیم کمال الدین حسین بیھقی کاشفی المعروف ملا حسین واعظ کاشفی نے "روضتہ الشہداء” نامی کتاب لکھی۔ یہ کتاب دس ابواب...
تحریر- اسحاق محمدی بلا شبہہ اس وقت دنیا، انسانی مہاجرت کے سب سے بڑے بحران کا سامنا کررھی ھے۔ لاکھوں مرد،زن، چھوٹے بڑے مغربی یورپ میں اپنی قسمت کے فیصلے کے منتظراور لاکھوں دیگر مغربی...
ترجمہ- اسحاق محمدی عزتماب ڈاکٹر حسن روحانی، صدر اسلامی جمہوری ایران! نہایت ادب سے عرض ھے کہ حکومتی اہلکاروں نے افغانستانی مہاجرین کو 6 ستمبر تک ملک چھوڑنےکی ھدایت کی ھے۔ یہ پہلی یا شاید...
تحریر- اسحاق محمدی بلاشبہہ لاکھوں در بدر مہاجرین جن میں شامیوں کی تعداد سب سے زیادہ ہیں کی بر وقت مدد کیلئے اپنی سرحدیں کھولنے اور انہیں کھلے دل سےخوش آمدید کہنے میں اھل یورپ...
تحریر- ڈاکٹر کریم حمزہ ترجمہ ۔ اسحاق محمدی بابہ مزاری کی جدوجہد ایک عادلانہ نظام کیلیے تھی۔ انکو ایرانی انقلابیوں کے بے خردانہ پالیسیوں کو قریب سے مشاہدہ کرنے کا موقع ملا تھا۔ انکا سب...
خامہ پریس کے مطابق کے ھفتہ دو پہر کو مسلح افراد نے افغانستان کے شمالی صوبہ بلخ کے ضلع زاری سے مزار شریف کی طرف جانے والی گاڑیوں کو روک کر شناخت کے بعد 13...
تحریر-علی ھزارہ بالآخر بلوچستان میں قوم پرستوں کی پانچویں بغاوت خاموش ہوتی دکھائی دے رہی ہے اور ایسا لگتا ہے کہ جنرل مشرف کے دور سے شروع ہونی والی لڑائی اور آزاد بلوچستان کی تحریک...
تحریر- قنبرعلی تابش تلخیص و ترجمہ- اسحاق محمدی آج کل ذرایع ابلاغ اور سوشل میڈیا پرھزارہ اور تاجیک دوستوں کے درمیان کبھی دوستانہ اور کبھی غیر دوستانہ انداز میں ایک موضوع پر بحث و مباحثہ...
تحقیق و تحریر : اسحاق محمدی 1997کے وسط میں میرا ایک طویل مقالہ روزنامہ جنگ کے "سنڈے میگزین” میں بامیان کے عظیم بودا مجسموں کے متعلق چھپا تھا جیسے کافی سراہا گیا تھا۔ بعد میں...
تحریر- اسحاق محمدی اگرچہ گذشتہ صدی کی آٹھویں دھائی کے وسط تک پورے ریجن میں بڑے واقعات رونما ھوچکے تھے یعنی افغاستان میں سویت نواز حکومت قایم ھوچکی تھی اور ایران میں اسی طرز حکومت...