. // // 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 ?> اک شخص سارے شہر کو ویران کر گیا - ھزارہ بین الاقوامی نیٹ ورک

اک شخص سارے شہر کو ویران کر گیا

اک شخص سارے شہر کو ویران کر گیا

تحریر: حسن رضا چنگیزی

بیاد داری کہ وقت زادن تو ہمہ خندان بودند و تو گریان

آن چنان زی کی وقت مردن تو ہمہ گریان بوند و تو خندان

مجھے نہیں معلوم کہ یہ شعرکس کا ہے لیکن وہ عموماَ جلسوں میں اسے پڑھا کرتے تھے ۔ اس نے تمام زندگی لوگوں میں خوشیاں اور قہقہے بانٹتے گذاری۔ اس نے ہلکے پھلکے انداز میں ہمیشہ قومی اور عوامی مسائل کو اجاگر کیا۔ اسے ہنسی مذاق میں لوگوں کا دکھ سب کے سامنے کھول کر رکھ دینے کا ہنر حاصل تھا ۔ وہ بلا کے ذہین تھے۔ وہ زندگی کے ان گوشوں پربھی نگاہ رکھتے تھے جن پر دوسروں کی نظر کم ہی پڑتی تھی ۔ ان کا مشاہدہ کمال کا تھا ۔ ہم جن واقعات پر ایک سرسری نظر ڈال کے گزر جاتے تھے وہ فوراَ اس کی تہہ تک پہنچ جاتے ۔ایک عام سی بات سے وہ ایسے نکتے نکال لاتے کہ عقل دنگ رہ جاتی ۔

کہتے ہیں ایک مرتبہ ایک بڑا وکیل اپنی پرواز کے ٹکٹ وصول کرنے ان کے دفتر آیا ۔ ان کی مونچھوں پر نظر پڑی تو کہنے لگے ۔ برا تو نہیں مانو گے اگر آپ سے ایک بات پوچھوں ؟ وہ معاملہ بھانپ گئے ۔ لکھتے لکھتے رک گئے ۔ پین بند کرکے ایک طرف رکھا ا ور عینک اتار کے دوسری طرف رکھی ۔ پھر اپنی گھنی مونچھوں کی طرف اشارہ کرتے ہوئے کہنے لگے” آپ یقیناَ ان کے بارے میں کچھ کہنا چاہ رہے ہیں ” وکیل صاحب نے کہا کہ دیکھئے دراصل اتنی بڑی اور گھنی مونچھیں رکھنا شریعت کی رو سے مکروہ ہے ۔ وہ شاید مزید بھی کچھ کہنے کے موڈ میں تھے لیکن یہ ہتھے سے اکھڑ گئے مگر چونکہ آداب میزبانی سے واقف تھے لہٰذا نرمی سے پوچھ بیٹھے ” کس شریعت کی آپ بات کرتے ہیں ؟ اس شریعت کی جس کے نام پر آئے دن معصوم اور بے گناہ لوگوں کا خون بہایا جاتا ہے۔جس کے نام پر مخالفین کی گردنیں کاٹی جاتی ہیں اور جس کی ہر کوئی علیحدہ اور من پسندتشریح کرتا پھرتا ہے۔؟ پھر وہ ایک طرف اشارہ کرتے ہوئے کہنے لگے ” یہاں میرے دفتر کے ساتھ ہی شراب کی ایک دوکان ہے ۔ میں نے آج تک کسی بندے کو ایک معمولی ڈنڈے کے ساتھ بھی یہاں پہرہ دیتے نہیں دیکھا نہ ہی آج تک مجھےیہاں سے کسی لڑائی جھگڑے کی آواز سنائی دی ہے لیکن امام بارگاہوں اور مساجد میں جب تک مسلح پہرے نہ ہوں لوگ نماز ادا نہیں کر سکتے ” راوی کہتا ہے کہ ان کی بات سن کر وکیل صاحب کی بولتی بند ہوگئی اور وہ موضوع بدل کر پرواز کی تفصیلات معلوم کرنے لگ گئے ۔
وہ نمودو نمائش سے پرہیز کے عادی تھے ۔ نماز اور روزے کے پابند ہونے کے باوجود ریا کاری سے کوسوں دور رہتے تھے۔ میں نے انہیں کبھی عوامی مقامات پر نماز پڑھتے نہیں دیکھا۔ ان کے دفتر میں زیر زمین ایک جگہ تھی ۔ نماز پڑھنے وہی جایا کرتے تھے ۔ دوستوں کی محفل میں کبھی نماز کا وقت ہوتا تو چپکے سے اُٹھ جاتے اور کسی خلوت میں نماز پڑھ کے خاموشی سے واپس آجاتے ۔ میں نے انہیں کبھی اس حال میں نہیں دیکھا کہ آستینیں چڑھی ہوئیں ہوں بازؤں اور چہرے سے پانی ٹپک رہا ہو اور وہ ہر ایک کو بتاتے پھر رہے ہوں کہ ” آپ تشریف رکھیں میں ابھی نماز پڑھ کے آتا ہوں ”
وہ عقیدے کو ہر ایک کا ذاتی معاملہ سمجھتے تھے۔ کسی کے معاملات میں دخل دینا ان کا شیوہ نہیں تھا ۔ بڑی سے بڑی بات وہ انتہائی شستہ اور آسان پیرائے میں بیان کرنے کے عادی تھے۔ اپنے قتل سے ایک دن پہلے وہ میری احوال پرسی کے لئے میرے گھر تشریف لائے ۔احمد کوہزاد بھی ان کے ساتھ تھے۔گفتگو کے دوران کہنے لگے کہ چونکہ سیاسی معاملات سے دوری نے ہماری قوم کو بہت ساری مشکلات سے دو چار کردیا ہےلہٰذا ایسے میں سیاسی کارکنوں کی ذمہ داری بنتی ہے کہ وہ قوم میں سیاسی شعور بیدار کرنے کی خاطر زیادہ محنت کریں ۔ جب وہ اُٹھ کے جانے لگے تو شام ہورہی تھی ۔ میں نے پوچھا کہ حالات کچھ اچھے نہیں تو کیا اس وقت ہزارہ ٹاون جانا مناسب ہوگا۔ جاتے جاتے رک گئے اور بتایا کہ میں نے یہاں علمدار روڑ پر ہی ایک مکان کرائے پر لے رکھا ہے ۔ پھر اپنے خاص انداز میں مسکرا کر بتانے لگے کہ دراصل بروری تھانے سے کسی نے مجھے پیغام بھیجا ہے کہ میں کہیں آتے جاتے احتیاط برتوں کیوںکہ ان کے خیال میں میر ی جان کو خطرہ ہے اس لئے حفظ ما تقدم کے طور پر میں نے اپنی رہائش تبدیل کرلی ہے ۔ ان کی یہ بات سن کر ہم سارے دوست سن ہو کررہ گئے کیونکہ وہ یہ بات پہلی مرتبہ کسی کو بتا رہے تھے ۔ دوستوں نے ان سے پوچھا بھی کہ اب تک یہ بات ان سے چھپائی کیوں ؟ جواب میں کہنے لگے کہ میں نے ڈھنڈورا پیٹنا مناسب نہیں سمجھا ۔ پھر اس سے پہلے کہ دوست ان کی حفاظت کا کوئی بندوبست کرتے اگلے ہی دن انہیں ہم سے چھین لیا گیا۔
وہ بلاشبہ ایک نابغہ روزگارتھے جو کسی بھی روتے ہوئے شخص کو قہقہے لگانے پر مجبور کر سکتے تھے اور کسی بھی شخص کو ہنساتے ہنساتے رُلا سکتے تھے ۔ یہی تو کیا انہوں نے ۔ زندگی بھر لوگوں میں خوشیاں اورقہقہے بکھیرنے والا جب دنیا سے رخصت ہوا تو ان کے فراق میں ہزاروں لوگ دھاڑیں مارمار کر رو رہے تھے۔
تب مجھے اس شعر کا اصل مفہوم سمجھ میں آیا جسے وہ عموماَ جلسوں میں پڑھا کرتے تھے۔
” یاد ہے جب تم دنیا میں آئے تھے تو تم رو رہے تھے جبکہ سب کے ہونٹون پہ مسکراہٹ تھی۔اپنی زندگی ایسے جیو کہ جب مرنے لگو تو تمہارے ہونٹوں پہ مسکراہٹ ہو جبکہ باقی سب رو رہے ہوں “۔
یوسفی ہم تمہیں یاد کرکے مسکرائیں گے بھی اور روئیں گے بھی۔


Join the Conversation