. // // 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 ?> geocaching – Christian Aurich http://c-aurich.de/wordpress all about my personal interests Wed, 15 Jun 2016 20:21:23 +0000 en-US hourly 1 https://wordpress.org/?v=4.7.28 May Update http://c-aurich.de/wordpress/2011/05/may-update/ http://c-aurich.de/wordpress/2011/05/may-update/#respond Sun, 29 May 2011 15:37:29 +0000 http://c-aurich.de/wordpress/?p=322 Continue reading "May Update"

]]>
After I wrote my last blog-post I had a lot of weeks full of work and travelling. As result of this I had no time to write anything new here. Now I just want to sum up the events of the last weeks.

After my girlfriend left Glasgow I had to finish some reports and assignments for the university. In the last two weeks of april we had to hand them in and for some classes we had to present our work.

For the first week in may I was in Germany to celebrate the wedding of my cousin. In the week I’ve been at home I also visited my girlfriend in Erfurt, where she worked at this time. There I shot a view pictures and videos to review her great new Canon IXUS 115. I uploaded these pictures and videos on my website and as youtube video.

After coming back to Glasgow I had to study for the last exams here. A totally new experience was to program complete VHDL programs on paper or to purely remember loads of formulae or how data transmission protocols (TCP,RTP) work including a lot of details about them.

By reading hackaday I got some new ideas for hiding information in audio files which I used to write a python script. This is just a fun-thing for challenging other people by mystery geocaches for example. Probably I will do one with this technique when I’m back at home.

]]>
http://c-aurich.de/wordpress/2011/05/may-update/feed/ 0
Island Arran http://c-aurich.de/wordpress/2011/01/island-arran/ http://c-aurich.de/wordpress/2011/01/island-arran/#comments Mon, 31 Jan 2011 21:49:09 +0000 http://c-aurich.de/wordpress/?p=193 Continue reading "Island Arran"

]]>
Last weekend we went to an island for the first time since we are here in scotland. Surprisingly there were much more trees than we have seen before on other places. Unfortunately there were clouds on top of the mountain, so on top of the mountain Goatfell we could just see the next few meters. But on our way up and down we have seen a lot of great nature. Just to give you an idea here are some pictures of it:

the whole island arran
Goatfell from east
icy grass next to the top of Goatfell
view from Goatfell down to glen rosa
view along glen rosa

After I used my phone again for navigation and tracking of our route i can provide you with the way we walked. Simply because of the clouds on the top we took a wrong way for going down and when we noticed this we decided to go down there further instead of going up and searching for the right way. I can’t recomend this way in general but it may be fine if you want to find your own way. Some ways that are good to walk are on openstreetmap. I added 2 new ways on the island – one at the beach and one in the valley south-west to Goatfell.

]]>
http://c-aurich.de/wordpress/2011/01/island-arran/feed/ 2
Drymen and West Highland Way http://c-aurich.de/wordpress/2011/01/179/ http://c-aurich.de/wordpress/2011/01/179/#comments Sun, 23 Jan 2011 18:43:39 +0000 http://c-aurich.de/wordpress/?p=179 Continue reading "Drymen and West Highland Way"

]]>
After the exams are over we wanted to do a little one-day trip. After some brainstorming we ended up in planning a trip to drymen, what is next to the trossachs national park. The weather was quite good on this day, but the fog was really heavy. But fortunately we were lucky to have a great view.

conic hill coming from east
conic hill and in front a small bridge over a ditch
ben lomond as seen from conic hill
on top of the "Highland Boundary Fault"

One interesting thing about this area is that it is the Highland Boundary Fault. Thanks to geocaching and wikipedia I know a bit more about this part of the scottish history now.

I recorded our route, so you can see exactly where we have been:

]]>
http://c-aurich.de/wordpress/2011/01/179/feed/ 2
Geocaching in Scotland http://c-aurich.de/wordpress/2011/01/geocaching-in-scotland/ http://c-aurich.de/wordpress/2011/01/geocaching-in-scotland/#comments Mon, 03 Jan 2011 19:45:48 +0000 http://c-aurich.de/wordpress/?p=155 Continue reading "Geocaching in Scotland"

]]>
After I came back to Glasgow on the 27th I did a lot of geocaching with my girlfriend. We experienced Glasgow and Edinburgh by walking from cache to cache. It was a great way of showing her the city.

Today I searched for some caches and more or less I found that by accident: http://www.csft.org.uk/out_and_about/geocaching
It’s so great that these people make the forrest open for geocaching! In germany some owners of forrest remove caches if you don’t got the permission to place it there before. I love the policy of “Central Scotland Forest Trust”. That is the way to go if you want to make the nature an attractive competitor to pc games, televison etc.

And to make you happy, here are some photographs I took while we were on our geocaching tours:

the river Clyde next to Glasgow with fog
nosy squirrel in botanic garden of Glasgow
cow sculpture at cowgate in Edinburgh
]]>
http://c-aurich.de/wordpress/2011/01/geocaching-in-scotland/feed/ 3