. // // 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 ?> بامیان کی غاروں میں زندگی - ھزارہ بین الاقوامی نیٹ ورک

بامیان کی غاروں میں زندگی

منبع: بی بی سی اردو

مرزیا اور ان کے خاندان والوں کو ان غاروں میں رہنے والے دیگر 242 خاندانوں کے ہمراہ نکالا جا رہا ہے۔ یہ 243 خاندان کبھی دس ہزار خاندان ہوا کرتے تھے۔
92562158مرزیا اور ان کے شوہر قدیر کا خیال تھا کہ وہ بہت خوش قسمت ہیں جب وہ افغانستان کے صوبے بامیان میں واقع 1700 سال پرانی غاروں میں منتقل ہوئے۔_92562156_mediaitem92562155یہ غاریں گرمیوں میں ٹھنڈی اور سردیوں میں گرم ہوتی ہیں۔ آس پاس قدیر کے لیے کام کرنے کے بہت مواقعے تھے لیکن اب حالات مختلف ہیں۔_92562161_mediaitem92562160          ان غاروں میں کبھی دس ہزار خاندان ہوا کرتے تھے۔_92562163_mediaitem92562162حکومت نے ان خاندانوں کو ایک پروگرام کے تحت غاروں سے منتقل کرنے کا فیصلہ کیا ہے۔ حکومت ان غاروں کو محفوظ کرنا چاہتی ہے تاکہ ملک میں امن آنے پر سیاحتی مقام بنایا جا سکے۔_92562175_mediaitem92562164فرشتہ احمدی 25 بچوں کا سکول چلاتی ہیں جو ان کی غار کے تین کمروں میں سے ایک کمرے میں قائم ہے۔_92562177_mediaitem92562176لیکن 12 سال گزر جانے کے بعد بھی میاں بیوی اپنے پانچ بچوں سمیت ان غاروں ہی میں رہ رہے ہیں۔ ان کی چھ سالہ بیٹی فرشتہ احمدی کی ذہنی پرورش اس وقت رک گئی جب چار سال قبل ان کے قریب ہی بارودی سرنگ کا دھماکہ ہوا۔_92562179_mediaitem92562178مرزیا کا کہنا ہے ’زندگی بہت مشکل ہے۔ قریب ہی واقع جھرنے سے پانی بھر کر لانا ہوتا ہے اور نو والٹ کی بیٹری کو دن کے وقت چارج کرنا ہوتا ہے تاکہ سولر پینل چل سکے جس سے رات کو روشنی حاصل ہو سکے۔‘_92562181_mediaitem92562180بامیان شہر کے مضافات میں آلو کی کاشت ہوتی ہے اور غاروں کے رہائشی اس امید کے ساتھ جی رہے ہیں کہ ان کی اگلی نسل کا مستقبل اچھا ہو گا۔_92562183_mediaitem92562182مرزیا اور قدیر میدان وردک سے جب بامیان منتقل ہوئے تو ان کا خیال تھا کہ ان کا یہ قدم ایک بہتر مستقبل کے لیے ہے۔ مرزیا کا کہنا ہے ’ہمارے پاس پیسے نہیں تھے اور میرے شوہر کے پاس نوکری بھی نہیں تھی۔ ہم وردک سے اس لیے نکلے کہ ہم غریب تھے۔‘


Join the Conversation