venti - 3:29 am on Aug 14, 2008 (gmt 0)
I like the idea of doing it at the server's firewall level, if you can find a way to do it. We use the free MaxMind ip to location binary database which has a 99.3% country identification level and custom APIs which can handle tens of thousands of requests per second. The C++ API in particular is blazing (we use the it and a Java API to access the data and both are very quick). It's updated every month which is nice. I have no affiliation to these guys but I must say after trying numerous paid and free services that they are the best we have used... and it's free.