///////////////////////////////////////////////////////////////////////////
//
// 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
?>
کوئٹہ: ہزارہ نسل کشی جاری‘ آٹھ بیگناہ ہزارہ شہری شہید، دو زخمی - ھزارہ بین الاقوامی نیٹ ورک
کوئٹہ:پاکستان کے جنوب مغربی صوبے بلوچستان کے دارالحکومت کوئٹہ کے مضافاتی علاقے ہزار گنجی میں نامعلوم افراد کی فائرنگ سے آٹھ بیگناہ ہزارہ شہری شہید ہوگئے ہیں۔ ھزارہ بین الاقوامی نیٹ ورک سے بات کرتے ہوئے ایک سینئر پولیس آفیسر عمران قریشی کا کہنا تھا کہ دو موٹر سائیکلوں پر سوار نامعلوم مسلح افراد نے ایک گاڑی پر فائرنگ کردی اور جائے واردات سے فرار ہونے میں کامیاب ہوگئے۔
انہوں نے کہا کہ ابتدائی طور پر چھ افراد کے ہلاک ہونے کی اطلاع ملی تھی، لیکن دو زخمی ہسپتال پہنچنے کے بعد چل بسے، جس کے بعد تعداد اموات کی تعداد آٹھ ہوگئی ہے۔
ایک شخص کو شدید زخمی حالت میں ہسپتال منتقل کیا گیا ہے، جبکہ ہلاک ہونے والے تمام افراد کا تعلق ہزارہ برادری سے بتایا جاتا ہے۔
پولیس کا کہنا ہے کہ بظاہر یہ ٹارگٹ کلنگ کا واقعہ لگتا ہے۔
فائرنگ کے بعد ہزار گنجی اور اطراف کے علاقوں میں خوف پایا جاتا ہے۔
پولیس ایس پی سریاب کے مطابق اس واقعہ میں آٹھ افراد ہلاک ہوئے ہیں۔ لاشوں کو بولان میڈیکل کمپلیکس منتقل کردیا گیا ہے۔
خیال رہے کہ گزشتہ کئی سالوں سے بلوچستان میں ہزارہ برداری شدت پسندوں کے نشانہ پر ہے اس علاقے میں ماضی میں بھی اس طرح کے واقعات پیش آتے رہے ہیں۔
تاہم اب تک اس تازہ واقعے کی ذمہ داری کسی گروپ یا تنظیم نے قبول نہیں کی ہے۔
اس واقعہ کے بعد ہزارہ ڈیموکریٹک پارٹی (ایچ ڈی پی) نے کل یعنی جمعہ کو کوئٹہ میں شیٹر ڈاؤں ہڑتال کا اعلان کیا ہے۔
ایچ ڈی پی کی جانب سے جاری ہونے والے ایک بیان میں ان واقعات پر صوبائی حکومت اور قانون نافذ کرنے والے اداروں کو تنقید کا نشانہ بنایا گیا۔
رواں سال جولائی میں انسانی حقوق کی عالمی تنظیم ہیومن رائٹس واچ نے اپنی ایک رپورٹ میں حکومتِ پاکستان سے مطالبہ کیا تھا کہ وہ صوبہ بلوچستان میں ہزارہ قوم برداری کے قتلِ عام کو روکنے کے لیے اقدامات کرے۔
رپورٹ میں ان واقعات پر تشویش کا اظہار کرتے ہوئے کہا گیا تھا کہ 2008ء سے اب تک ان واقعات میں زیادہ تر افرا کو بدترین تشدد کا نشانہ بنایا گیا۔
یاد رہے کہ ان میں سب سے بڑا واقعہ سن 2013ء میں ہوا تھا جب صوبائی دارالحکومت کوئٹہ کے علاقے ہزارہ ٹاؤن میں ہونے والے دو بم دھماکوں کے نتیجے میں کم سے کم 180 افراد ہلاک ہوئے تھے۔
قمبرانی روڈ پر دھماکا، دو افراد ہلاک
کوئٹہ کے علاقے قمبرانی روڈ پر ایک دھماکے کے نیتجے میں کم سے کم دو افراد ہلاک اور 12 زخمی ہوگئے ہیں۔
ھزارہ بین الاقوامی نیٹ ورک نیوز کے مطابق دھماکا خیز مواد ایک موٹر سائیکل میں نصب کیا گیا تھا جس سے ایف سی کی گاڑی کو نشانہ بنانے کی کوشش کی گئی۔
دھماکے کی آواز دور دور تک سنی گئی اور اطلاع ملتے ہی سیکیورٹی فورسز کی بھاری نفری موقع پر پہنچ گئی۔
پولیس کا کہنا ہے کہ دھماکے کے بعد فائرنگ کی بھی آوازیں سنی گئیں جس سے علاقے میں خوف پھیل گیا۔
ابتدائی اطلاعات کے مطابق دھماکے میں زخمی ہونے والوں میں خواتین و بچے بھی شامل ہیں جن کو قریبی ہسپتال منتقل کردیا گیا ہے۔