. // // 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 ?> سنی ھزارہ کا اظہار وجود، عصرِ حاضرکا مبارک ترین واقعہ! - ھزارہ بین الاقوامی نیٹ ورک

سنی ھزارہ کا اظہار وجود، عصرِ حاضرکا مبارک ترین واقعہ!

تحریر- قنبرعلی تابش
تلخیص و ترجمہ- اسحاق محمدی

آج کل ذرایع ابلاغ اور سوشل میڈیا پرھزارہ اور تاجیک دوستوں کے درمیان کبھی دوستانہ اور کبھی غیر دوستانہ انداز میں ایک موضوع پر بحث و مباحثہ جاری ہیں جسکا تعلق سنی ھزارہ کی طرف سے گذشتہ کئی صدیوں سے "پوشیدہ” اپنی اصلی قومی شناخت کی طرف لوٹ آنے کے جرت مندانہ فیصلے سے ھے۔ یہ ایک مبارک فیصلہ اور افغنستان کی جدید تاریخ کا ایک اھم ترین واقعہ ھے۔55b72b7570e66 بلاشبہہ کئی ملین افراد پرمشتمل ایک قوم کیلیے صدیوں تک اپنی اصلی ھزارہ شناخت کو چھپانے پرمجبور ھونا بجاے خود ایک بڑا انسانی المیہ ھے جو قومی جبرکی نشاندہی کرتی ھے۔ اس بڑے المیہ کو الفاظ میں بیان کرنا مشکل ہی نہیں ناممکن ھے۔ ذرا اپنے آپکو چند لمحوں کیلیے بستر مرگ پر پڑی ایک بوڑھی دادی تصور کیجیئے جو اپنی زندگی کے آخری لمحوں میں اشکبار آنکھوں سے اپنے پیاروں پر یہ راز کھولتی ھے کہ "ھم ھزارہ ھیں” لیکن ساتھ ہی اسے رازمیں رکھنے کی تاکید بھی کرتی ھے۔ یا پھر اس نوجوان طالبعلم کی ذھنی اذیت کا انداہ لگا لیئے جسکے ھم جماعت روز اسے کہتے ہیں "ارے تم تاجیک کی بجاے ھزارہ زیادہ دیکھائی دیتے ھو” اور پھر قہقہوں کی زوردار آوازیں گونجنے لگتی ہیں، یا پھر کوئی اسے طعنہ دیتے ھوےکہتا ھے ” تو کیسا تاجیک ھے جسکا لہجہ ھزارہ گی ھے” !

اگرچہ افغانستان میں ھماری اجتماعی زندگی میں جبر و مصایب کی کمی نہیں لیکن ھمیں اس پر بجا طورپر فخر کرنی چاھیے کہ کم از کم اس دور میں "قومی شناخت سے انکار کا جبر” نہیں۔ بلا تردید قومی جبر کی بدترین شکل کسی قوم کو اسکی شناخت سے محروم کرکے دوسری شناخت اختیارکرنے پرمجبورکرنا ھے۔ ھم اسے جنوبی افریقہ سے نسلی امتیازکے نظام کے خاتمے سے تشبیہہ دے سکتے ہیں۔

اس حقیقت کے پیش نظر ھم بجا طورپر یہ امید رکھتے تھے کہ ملک کے روشنفکر حلقے تبدیلی کے اس واقعہ کو ملکی تاریخ کی اہم ترین موڑ سمجھتے ھوے اسکا والیہانہ استقبال کرینگے۔ ساتھ ھی ھماری انسانی حقوق کی تنظیم اور ذرایع ابلاغ بھی کھل کر اسکی حمایت کرینگے۔ یہ توقعات اپنی جگہ، لیکن زیادہ افسوس اس بات کا ھے کہ ھمارے تاجیک رایئٹرز غیرضروری طور پرغیر دوستانہ رویے کا اظہار کررہے ہیں اور نئی تشکیل شدہ "سنی ھزارہ کونسل” (شوریٰ سراسری ھزارہ ھای اھل سنت افغانستان) کے اکابرین پر جاہ طلبی اورتفرقہ اندازی کے الزامات لگا رہے ھیں جو کہ قطعاً درست نہیں۔ سنی ھزارہ صرف اتنا چاہتے ہیں کہ انکو، انکی اصلی قومی شناخت ملے یعنی تاجیک کی بجاے ھزارہ کہا جایں جو کہ انکا فظری حق ھے۔ میں کابل میں کئی ایسے تاجیک فیملیز سے واقف ھوں جنہوں نے بہ وجوہ ماضی میں اپنے آپکو سرکاری دستاویزات میں پشتون لکھواے ہیں اب اگر وہ اپنے اصلی شناخت کی طرف آتے ہیں تو بلا کس کو اعتراض ھوسکتا ھے۔

ھم تاجیک روشنفکر اکابرین جیسے ڈاکٹر اسپنتا، ڈاکٹرلطیف پدرام، استاد پرتونادری، مجیب مہرداد، یاسین اوردیگر سے یہ امید رکھتے ہیں کہ وہ اس اھم ترین قومی ایشو پر خاموشی اختیار کرنے کی بجاے آگے آکر تاجیک عوام کے درمیان شکوک وشبہات کو دور کرنے میں اپنا کردار ادا کرینگے۔

 


Join the Conversation