| 1 | bulkquery - A program by Brent Bice - 02/2002 |
| 2 | |
| 3 | Bulkquery is a multi-threaded program that makes a large number of |
| 4 | DNS queries as fast as possible. It's tailored for making DNS queries for |
| 5 | specific IP addresses against specific DNS based RBLs. |
| 6 | |
| 7 | "Why bother?" |
| 8 | I've been asked this several times. While running SquirrelMail on a server |
| 9 | with very little bandwidth and very high latency (a dial-up account - snicker) |
| 10 | I noticed that while my filters plugin was making gethostbyname() function |
| 11 | calls, my dial-up line was mostly idle. This was, apparently, because all |
| 12 | the DNS function calls were being made in series. Once a DNS query had been |
| 13 | sent, no others were sent until a response had been received or until a |
| 14 | certain timeout period had occurred. And some of the RBLs were quite a |
| 15 | bit faster than the others. This seemed pretty inefficient. "Why not make |
| 16 | more DNS queries while waiting for the replies," I thought. |
| 17 | |
| 18 | After several attempts to make a multi-threaded program to make the queries |
| 19 | using the standard DNS library calls, I realized why. The library functions |
| 20 | weren't thread-safe and most of the replies would be lost. Luckily, a |
| 21 | friend of a friend told me about the lwres API in Bind 9.x and told me that |
| 22 | IT was definitely thread-safe and very fast. |
| 23 | |
| 24 | Boy was SHE right! |
| 25 | |
| 26 | So, how much faster is it? It will depend on your bandwidth and the |
| 27 | latency of your connection. But for those of us trying to make do with less, |
| 28 | bulkquery is a LOT faster. On a dial-up connection, I can make queries |
| 29 | anywhere from 6 to 10 times faster! On my T1 at work, the queries are |
| 30 | usually between 2 and 7 times faster. The bottom line of all of this is |
| 31 | that even on my T1 at work, the filters plugin can query ALL of the RBLs |
| 32 | for all the new email in my INBOX in less than half the time it takes using |
| 33 | the PHP gethostbyname() function calls. |