| 1 | Copyright (c) 2006-2007, Joseph B. Kowalski
|
|---|
| 2 | Portions Copyright (c) 2007 Kasimir Gabert
|
|---|
| 3 | See LICENSE for licensing information
|
|---|
| 4 |
|
|---|
| 5 | TorStatus - Tor Network Status Changes
|
|---|
| 6 |
|
|---|
| 7 | ===============================================================================
|
|---|
| 8 | Version 3 Changes {{{
|
|---|
| 9 | ===============================================================================
|
|---|
| 10 | --Version 3.5--
|
|---|
| 11 | * Complete interface redesign
|
|---|
| 12 | * Integrated operating system detection in by default
|
|---|
| 13 | * Bandwidth change to have a progress bar
|
|---|
| 14 | * Legend created
|
|---|
| 15 | * WHOIS query integrated for IP addresses
|
|---|
| 16 | * Background colors for different router status
|
|---|
| 17 | * Overall softer colors
|
|---|
| 18 | * Added notifications for Asc or Desc sort orders
|
|---|
| 19 |
|
|---|
| 20 | --Version 3.4.2--
|
|---|
| 21 |
|
|---|
| 22 | * (ticket 12) Fixed error with server IP detection for non-Squid servers
|
|---|
| 23 | * (ticket 12) Added config option for Squid server
|
|---|
| 24 |
|
|---|
| 25 | --Version 3.4.1-- (changes made by Kasimir Gabert)
|
|---|
| 26 |
|
|---|
| 27 | * Fixed bottom headers for new domain
|
|---|
| 28 | * Updated IP detection so it works through Squid
|
|---|
| 29 | * Added known mirrors bar
|
|---|
| 30 |
|
|---|
| 31 | TODO:
|
|---|
| 32 | * Move the two changes into configuration items
|
|---|
| 33 | * Centralize the known mirrors and make it dynamic
|
|---|
| 34 |
|
|---|
| 35 | --Version 3.4-- (end of changes by Joseph Kowalski)
|
|---|
| 36 | Rename of the DNSBL server to DNSEL (DNS Exit List) server. This was by
|
|---|
| 37 | recommendation of Roger Dingledine of the Tor project. All filenames, variable
|
|---|
| 38 | names, etc, have been adjusted to reflect the rename.
|
|---|
| 39 |
|
|---|
| 40 | Added basic hit counting functionality to the DNSEL server. Now, every five
|
|---|
| 41 | minutes, the DNSEL server will write a record to the "DNSEL_LOG" table with a
|
|---|
| 42 | timestamp, a TotalResponses counter, and counters of how many "NOERROR",
|
|---|
| 43 | "SERVFAIL", "NXDOMAIN", and "NOTIMP" responses it has sent out since it was
|
|---|
| 44 | started. This procedure runs in it's own thread, and so should not have any
|
|---|
| 45 | measurable effect on performance.
|
|---|
| 46 |
|
|---|
| 47 | Improved the code that detects whether a user is accessing the site via a Tor
|
|---|
| 48 | hidden service. Previously, I checked to see if the user was coming from
|
|---|
| 49 | 127.0.0.1. Now, I check to see if the "HOST" header provided by the client
|
|---|
| 50 | upon access exists in the "$Hidden_Service_URL" from the config file. If so,
|
|---|
| 51 | we tell them they are accessing the site as a hidden service. If not, we
|
|---|
| 52 | proceed on to the normal checks to see if they are accessing through the Tor
|
|---|
| 53 | network.
|
|---|
| 54 |
|
|---|
| 55 | Modified the DNSEL server to return SERVFAIL instead of NXDOMAIN for requests
|
|---|
| 56 | which are outside of the zone the DNSEL server is authoritative for.
|
|---|
| 57 |
|
|---|
| 58 | Modified the DNSEL server to return NXDOMAIN instead of NOTIMP for requests
|
|---|
| 59 | other than type 'A' and 'ANY' when the request is in the authoritative zone.
|
|---|
| 60 |
|
|---|
| 61 | Modified the documentation / default variables for the DNSEL server to use the
|
|---|
| 62 | "ip-port.torhosts.example.com" domain, rather than "tor.dnsel.example.com".
|
|---|
| 63 | This encourages users to setup servers that are consistent with the
|
|---|
| 64 | "torel-design.txt" document maintained by the Tor project.
|
|---|
| 65 |
|
|---|
| 66 | --Version 3.3--
|
|---|
| 67 | Complete rewrite of the DNSBL server in Java. This provided a performance
|
|---|
| 68 | increase on the order of approximately 5x over the old Perl version of the
|
|---|
| 69 | server. On a Pentium 2.4 GHz machine with 2 GBs of RAM, I was able to
|
|---|
| 70 | consistently obtain load test results of 200 queries/sec or more. These tests
|
|---|
| 71 | were conducted across the internet, and not on the local machine.
|
|---|
| 72 |
|
|---|
| 73 | Addition of the "dnsbl_server.php" page. This page provides usage instructions
|
|---|
| 74 | for the DNSBL server, and informs users of it's domain name. Note that the
|
|---|
| 75 | link to "dnsbl_server.php" from the main page will only display if you
|
|---|
| 76 | set the "$DNSBL_Domain" variable in the "config.php" file, so you can leave
|
|---|
| 77 | this variable set to 'null' if you are not running a DNSBL server, or do not
|
|---|
| 78 | wish to advertise it on the web site.
|
|---|
| 79 |
|
|---|
| 80 | Addition of the "$Hidden_Service_URL" variable to the "config.php" file. If
|
|---|
| 81 | you are also making the TorNetworkStatus site available through a Tor Hidden
|
|---|
| 82 | Service, you can enter the URL here, and a link will be added to the main page.
|
|---|
| 83 | If you are not making the site available as a Hidden Service, or do not wish
|
|---|
| 84 | to advertise it on the web site, you can leave this variable set to 'null'.
|
|---|
| 85 |
|
|---|
| 86 | Removal of the "tor_exit_status" page. This functionality is already provided
|
|---|
| 87 | by the main page (Tells a user if they are accessing the site through the Tor
|
|---|
| 88 | network or not), and the user already has two options to do custom exit
|
|---|
| 89 | queries if desired: The "tor_exit_query" page, and the DNSBL server. Both are
|
|---|
| 90 | linked to from the main page.
|
|---|
| 91 |
|
|---|
| 92 | Modifications to the "tns_update.php" file and the database create script to
|
|---|
| 93 | accommodate the re-write of the DNSBL server.
|
|---|
| 94 |
|
|---|
| 95 | --Version 3.2--
|
|---|
| 96 | Removed the first type of query that the DNSBL server could perform, which
|
|---|
| 97 | was to simply lookup if a provided IP address was an active Tor server or not.
|
|---|
| 98 | This was causing confusion amongst some users, and causing people to focus on
|
|---|
| 99 | whether or not an IP is a Tor server at all, which is exactly what we are
|
|---|
| 100 | trying to get away from by providing an answer to the more granular question
|
|---|
| 101 | "Is this IP address a Tor server that is capable of exiting to my destination
|
|---|
| 102 | IP and port?", which is precisely what the second (and now only) query type
|
|---|
| 103 | does. This had the added benefit or making the server a little faster, since
|
|---|
| 104 | a bit of logic was removed. Please see the "README_DNSBL" file in the source
|
|---|
| 105 | distribution for full setup and usage information.
|
|---|
| 106 |
|
|---|
| 107 | --Version 3.1--
|
|---|
| 108 | Nearly a complete redesign of the DNSBL server added in the last version to
|
|---|
| 109 | improve performance. Major changes:
|
|---|
| 110 |
|
|---|
| 111 | 1) Previously, there was a Perl script which performed the actual listening
|
|---|
| 112 | for DNS requests, and when one was received, the script passed on the details
|
|---|
| 113 | of the request to a PHP script, which is where the main processing happened.
|
|---|
| 114 | The PHP script would then return a value to the Perl script indicating success
|
|---|
| 115 | or failure of the request. This had the horrible performance penalty of
|
|---|
| 116 | needing to invoke PHP every time a new request was received. Now, the entire
|
|---|
| 117 | process is handled within the same Perl script -- All of the PHP code to
|
|---|
| 118 | process the DNSBL request has been ported over to Perl -- So there is no
|
|---|
| 119 | calling an external executable again and again. Additionally, Perl runs faster
|
|---|
| 120 | than PHP with all other factors being equal.
|
|---|
| 121 |
|
|---|
| 122 | 2) With the old PHP script, since it had to be invoked anew from within the
|
|---|
| 123 | Perl script with each request, this also meant that a new database connection
|
|---|
| 124 | had to be setup with each request. This also caused a performance penalty.
|
|---|
| 125 | Now, since everything is handled from within a single script, a single
|
|---|
| 126 | database connection can be maintained the entire time the script is running.
|
|---|
| 127 |
|
|---|
| 128 | 3) Previously, when the DNSBL script did it's database queries to pull the
|
|---|
| 129 | IP addresses and exit policies of Tor routers, it did it the same way that the
|
|---|
| 130 | main application does, which means joining two large tables together on the
|
|---|
| 131 | router fingerprint key. While this works fine for the main application and
|
|---|
| 132 | it's very large queries, it did not suit the performance needs of a DNS
|
|---|
| 133 | server. Now, I have added two new in-memory database tables specifically for
|
|---|
| 134 | the DNSBL functionality. These two tables are populated during the update
|
|---|
| 135 | cycle, and contain only the necessary information (prejoined) required by the
|
|---|
| 136 | DNSBL server. The fact that they are in memory and are a lot smaller than the
|
|---|
| 137 | other tables should help the DNSBL server to return queries much quicker.
|
|---|
| 138 | These two tables act just like the set of NetworkStatus and Descriptor tables
|
|---|
| 139 | in that only one is ever active at a given time. The update cycle will always
|
|---|
| 140 | be updating the non-active table in the background while requests can continue
|
|---|
| 141 | being served by the active table. When the update is done successfully, a flag
|
|---|
| 142 | in the Status table is toggled to tell the application to begin using the
|
|---|
| 143 | other table as the active one, and the process repeats -- No downtime for
|
|---|
| 144 | updates.
|
|---|
| 145 |
|
|---|
| 146 | Fixed a bug that would cause the DNSBL server to only return "NXDOMAIN"
|
|---|
| 147 | responses if the database connection was lost until the script was restarted,
|
|---|
| 148 | even if the database connection came back up later. Now, the server will
|
|---|
| 149 | return "SERVFAIL" responses while the database server is down, but it will
|
|---|
| 150 | resume correct operation once the database server comes back up.
|
|---|
| 151 |
|
|---|
| 152 | Various other minor bug fixes, mainly relating to the "Tor Exit Status" and
|
|---|
| 153 | "Tor Exit Query" functionality that was added in the last release.
|
|---|
| 154 |
|
|---|
| 155 | --Version 3.0--
|
|---|
| 156 | Complete redesign of the way that the application determines if you are
|
|---|
| 157 | accessing the site through the Tor network or not, or if the provided IP
|
|---|
| 158 | belongs to a Tor server capable of exiting to the specified IP and port (See
|
|---|
| 159 | section on "Tor Exit Query" page, below). Previously, we would simply check to
|
|---|
| 160 | see if the IP address that the user was coming from was a Tor server with the
|
|---|
| 161 | 'Exit' flag set to true, and tell them they were coming through the Tor
|
|---|
| 162 | network if so. Now, we check if the user is coming from the IP address of a
|
|---|
| 163 | Tor server, regardless of it's 'Exit' flag status. If so, we pull the Exit
|
|---|
| 164 | Policy for the matching Tor server(s), look at what IP and Port the client is
|
|---|
| 165 | accessing us on, and parse the exit policy to determine if the Tor server(s)
|
|---|
| 166 | would allow or deny such an access. We then give the user information on each
|
|---|
| 167 | Tor server that matches their exit IP, letting them know if it would allow
|
|---|
| 168 | access to us or not considering it's exit policy. Finally, we also tell the
|
|---|
| 169 | user if it appears that they are coming to the site via a Tor Hidden Service
|
|---|
| 170 | or from the local machine directly. This is determined by checking if the user
|
|---|
| 171 | is coming to the site from the '127.0.0.1' IP address. Note that the
|
|---|
| 172 | application now handles situations where there are multiple Tor servers with
|
|---|
| 173 | IP's that match where the user is coming from (Or the IP provided, in the case
|
|---|
| 174 | of the "Tor Exit Query" page, see below). In these cases, it will cycle through
|
|---|
| 175 | each applicable Tor server to provide Exit Policy match information.
|
|---|
| 176 |
|
|---|
| 177 | Addition of "Tor Exit Status" page. This page provides the same information
|
|---|
| 178 | about whether a user is accessing the site through the Tor network as is
|
|---|
| 179 | available on the main page, but without all the other information. This may be
|
|---|
| 180 | easier for someone who just wants a simple answer for "Is my Tor installation
|
|---|
| 181 | working?", and should serve as a good entry point for such situations. This
|
|---|
| 182 | page also contains a link to the main Tor documentation page.
|
|---|
| 183 |
|
|---|
| 184 | Addition of "Tor Exit Query" page. This page allows a user to enter in an IP
|
|---|
| 185 | to check if it matches that of one or more Tor servers, and, if it does,
|
|---|
| 186 | checks to see if those Tor servers are capable of exiting to the destination
|
|---|
| 187 | IP address and port that the user provides.
|
|---|
| 188 |
|
|---|
| 189 | Addition of a DNSBL server. This allows a standard, non-web interface method
|
|---|
| 190 | for clients to query whether or not an IP address belongs to an active Tor
|
|---|
| 191 | server, and whether or not an IP address belongs to an active Tor server that
|
|---|
| 192 | would allow exiting to a specified destination IP address and port. Please
|
|---|
| 193 | see the "README_DNSBL" file in the source distribution for full setup and
|
|---|
| 194 | usage information.
|
|---|
| 195 | ===============================================================================
|
|---|
| 196 | }}}
|
|---|
| 197 | ===============================================================================
|
|---|
| 198 |
|
|---|
| 199 | ===============================================================================
|
|---|
| 200 | Version 2 Changes {{{
|
|---|
| 201 | ===============================================================================
|
|---|
| 202 | --Version 2.0--
|
|---|
| 203 |
|
|---|
| 204 | Small performance enhancement to background update process. When clearing old
|
|---|
| 205 | data from the descriptor and network status tables, we now use the "truncate
|
|---|
| 206 | table" command rather than the "delete from" command. This is faster because
|
|---|
| 207 | "truncate table" deletes all records from the table at once, while "delete
|
|---|
| 208 | from" deletes records one row at a time.
|
|---|
| 209 |
|
|---|
| 210 | Enhancement of "Require Flags" custom query option so that the user now has
|
|---|
| 211 | three options available for each flag: "Off", "Yes", and "No". "Off" means
|
|---|
| 212 | the status of the flag is not a factor in the search. "Yes" means a router
|
|---|
| 213 | must have flag set in order to show up in result set. "No" means that a router
|
|---|
| 214 | must not have flag set in order to show up in result set. Previously, a user
|
|---|
| 215 | only had the equivalent of the "Off" and "Yes" options. Also, when a flag is
|
|---|
| 216 | set to "Off", it's column header in the result list will have a blue
|
|---|
| 217 | background, "Yes" will have a green background, and "No" will have a red
|
|---|
| 218 | background. This further increases the level of flexibility with searches.
|
|---|
| 219 |
|
|---|
| 220 | Addition of "Country Code" field to "Tor Server Providing Network Status
|
|---|
| 221 | Opinion" section.
|
|---|
| 222 |
|
|---|
| 223 | Addition of background color to drop-down lists and edit box in advanced
|
|---|
| 224 | search section.
|
|---|
| 225 |
|
|---|
| 226 | Minor changes to text in custom query section to facilitate clarity.
|
|---|
| 227 |
|
|---|
| 228 |
|
|---|
| 229 | --Version 2.1--
|
|---|
| 230 |
|
|---|
| 231 | Addition of "Aggregate Network Statistic Graphs / Details" page. This page
|
|---|
| 232 | contains four graphs of network-wide aggregate information: Number of Routers
|
|---|
| 233 | by Country Code, Number of Routers by Observed Bandwidth, Number of Routers
|
|---|
| 234 | by Time Running, and an aggregate summary of various criteria including router
|
|---|
| 235 | flags.
|
|---|
| 236 |
|
|---|
| 237 | Addition of "EventDNS" and "Hibernating" statistics to newly renamed
|
|---|
| 238 | "Aggregate Network Statistics Summary" section on main page.
|
|---|
| 239 |
|
|---|
| 240 | Improvement to the way that the "Aggregate Network Statistics Summary" section
|
|---|
| 241 | of the main page gets it's data. Previously, each piece of information used
|
|---|
| 242 | was collected by a separate SQL query. Now, all of this has been joined into
|
|---|
| 243 | one large query to cut out the overhead of multiple SQL calls.
|
|---|
| 244 |
|
|---|
| 245 | Change to CSS which affects the highlight color of links which are on a white
|
|---|
| 246 | background, for increased readability.
|
|---|
| 247 |
|
|---|
| 248 |
|
|---|
| 249 | --Version 2.2--
|
|---|
| 250 |
|
|---|
| 251 | Fixed a bug in the code that detects whether or not the user is connecting to
|
|---|
| 252 | the server through the Tor network. Previously, it would tell a user they were
|
|---|
| 253 | connecting through the Tor network if their IP address matched the IP address
|
|---|
| 254 | of any Tor server. Now, it will only tell the user they are connecting through
|
|---|
| 255 | the Tor network if their IP address matches the IP address of a Tor server AND
|
|---|
| 256 | that Tor server is an exit node.
|
|---|
| 257 |
|
|---|
| 258 | Addition of exit node only CSV file download, for those who don't want the
|
|---|
| 259 | IP's of all Tor servers.
|
|---|
| 260 |
|
|---|
| 261 | Addition of graph of exit routers by country code to Network Detail page. This
|
|---|
| 262 | is useful for letting us see where we are most likely to exit the Tor network.
|
|---|
| 263 |
|
|---|
| 264 | Addition of "BadDirectory" flag information everywhere we make use of flags.
|
|---|
| 265 | The "BadDirectory" flag was added in Tor version 0.1.2.5-alpha.
|
|---|
| 266 |
|
|---|
| 267 | Minor cleanups to documentation to enhance readability.
|
|---|
| 268 |
|
|---|
| 269 | Fixed minor bug in SQL database create script.
|
|---|
| 270 |
|
|---|
| 271 |
|
|---|
| 272 | --Version 2.3--
|
|---|
| 273 |
|
|---|
| 274 | Redesign of the "Custom / Advanced Query Options" box on the main page. I am
|
|---|
| 275 | now using drop-down lists for the sort request, sort order, and address mode
|
|---|
| 276 | parameters instead of radio buttons, which takes up a lot less screen real-
|
|---|
| 277 | estate and also makes adding new options for these parameters in the future
|
|---|
| 278 | more practical.
|
|---|
| 279 |
|
|---|
| 280 | Slight changes to the "Application Server Details" (Previously "Application
|
|---|
| 281 | Server Information") box on the main page to enhance readability.
|
|---|
| 282 |
|
|---|
| 283 | Addition of the "Number of Descriptors In Cache" field to the "Application
|
|---|
| 284 | Server Details" box.
|
|---|
| 285 |
|
|---|
| 286 | Movement of the "Application Server Details" box to the bottom of the page.
|
|---|
| 287 | This has the dual purpose of improving page readability as well as making the
|
|---|
| 288 | "Approximate Page Generation Time" figure more accurate, since it is now
|
|---|
| 289 | calculated closer to the bottom of the page. Previously, the PHP code which
|
|---|
| 290 | generates the "Custom / Advanced Query Options" box still ran after this time
|
|---|
| 291 | was calculated.
|
|---|
| 292 |
|
|---|
| 293 | Update of source URL at bottom of page to new domain.
|
|---|
| 294 |
|
|---|
| 295 |
|
|---|
| 296 | --Version 2.4--
|
|---|
| 297 | Modified "Aggregate Network Statistic Summary" box to also show "percent of
|
|---|
| 298 | total network" values for each statistic listed. This allows you to easily see
|
|---|
| 299 | what percent of Tor routers are exit nodes, what percent are mirroring the
|
|---|
| 300 | directory, what percent of the total network your current result set makes up,
|
|---|
| 301 | etc.
|
|---|
| 302 |
|
|---|
| 303 | Modified "Network Status Opinion Source" box to allow clicking on the nickname
|
|---|
| 304 | of the router to jump directly to its router detail page. This makes it easy
|
|---|
| 305 | for a user to get detailed information about the source of the network data
|
|---|
| 306 | that they are seeing.
|
|---|
| 307 |
|
|---|
| 308 | Modified code that detects whether a user is accessing the site through the
|
|---|
| 309 | Tor network or not. Now, if the user is accessing through the Tor network, the
|
|---|
| 310 | name of their exit node is displayed in addition to the IP address. Also, the
|
|---|
| 311 | user can click on the name of the exit node to jump directly to its router
|
|---|
| 312 | detail page. This makes it easy for a user to get detailed information about
|
|---|
| 313 | the exit node they are currently coming through.
|
|---|
| 314 |
|
|---|
| 315 | Modified page footer to also include a link to the change history and license
|
|---|
| 316 | of the application.
|
|---|
| 317 |
|
|---|
| 318 | Removed the "$MinRouterThreshold" variable from the config file, and all code
|
|---|
| 319 | that made use of the variable. This really became obsolete when version 1.4 of
|
|---|
| 320 | the application was released and we started using two sets of tables in the
|
|---|
| 321 | database for storing router information instead of one. Since that time, a
|
|---|
| 322 | user will always have their page generated from the active set of router
|
|---|
| 323 | tables in the database, while the next refresh operation is being performed on
|
|---|
| 324 | the inactive set. This makes this variable, which was used to see if a
|
|---|
| 325 | database refresh was in progress and display an error to the user back when we
|
|---|
| 326 | used a single set of tables, obsolete.
|
|---|
| 327 |
|
|---|
| 328 | Fixed a bug in the generation of the Comma Separated Value (CSV) list of exit
|
|---|
| 329 | nodes. A comma was incorrectly being added after the last entry in the file,
|
|---|
| 330 | which might have caused problems for parsers.
|
|---|
| 331 |
|
|---|
| 332 | Added "Number of Routers by Platform" graph to network detail page. This lets
|
|---|
| 333 | us easily see how popular different operating systems are for running Tor
|
|---|
| 334 | routers.
|
|---|
| 335 |
|
|---|
| 336 | Modified "Number of Routers by Time Running (Weeks)" graph on network detail
|
|---|
| 337 | page to be full page width. This makes this graph easier to read since it
|
|---|
| 338 | usually has a lot of items along the x axis.
|
|---|
| 339 |
|
|---|
| 340 |
|
|---|
| 341 | --Version 2.5--
|
|---|
| 342 | Fixed lots of minor HTML and CSS errors. All pages now validate as "CSS
|
|---|
| 343 | version 2.1" and "HTML 4.01 Transitional".
|
|---|
| 344 |
|
|---|
| 345 | Modified the handling of all SQL queries which return a result set so that the
|
|---|
| 346 | result set populates into an associative array rather than a numerically
|
|---|
| 347 | indexed array. This allows items in the result set to be referred to by column
|
|---|
| 348 | name rather than a numerical array index. This is a significant step towards
|
|---|
| 349 | being able to offer the user the ability to do things such as select which
|
|---|
| 350 | columns they want displayed on the page, etc, as it is much more flexible
|
|---|
| 351 | than using numerical indexes because your entire result set handling code is
|
|---|
| 352 | no longer affected by re-arranging the order of items in your query, or adding
|
|---|
| 353 | and removing items on the fly. It is also generally considered a database
|
|---|
| 354 | programming best practice, as a lot of confusion and potential for bugs is
|
|---|
| 355 | eliminated by being able to use easily recognizable column names as opposed to
|
|---|
| 356 | numerical indexes.
|
|---|
| 357 |
|
|---|
| 358 | Modified the "Address Display Mode" in the "Custom / Advanced Query Options"
|
|---|
| 359 | so that users now have a third choice -- "Hostname + IP Address". Previously,
|
|---|
| 360 | the user could only choose one at a time, and had no way to view both
|
|---|
| 361 | simultaneously. "IP Address Only" mode is still the default as the "Hostname +
|
|---|
| 362 | IP Address" mode can result in a much larger amount of data being returned,
|
|---|
| 363 | but now the option is there for those who want it.
|
|---|
| 364 |
|
|---|
| 365 |
|
|---|
| 366 | --Version 2.6--
|
|---|
| 367 | Added the ability for users to select which columns they want displayed in the
|
|---|
| 368 | main router table. This should be good for ensuring that the page does not
|
|---|
| 369 | grow larger and larger as new informational items about Tor routers become
|
|---|
| 370 | available, since we can just maintain reasonable default settings and leave
|
|---|
| 371 | the obscure stuff off unless a user intentionally turns it on. Also, the SQL
|
|---|
| 372 | query for obtaining the main router list has been made dynamic so that it will
|
|---|
| 373 | only request columns from the database if the user will actually be displaying
|
|---|
| 374 | them.
|
|---|
| 375 |
|
|---|
| 376 | Added "Fingerprint" as a column display option.
|
|---|
| 377 |
|
|---|
| 378 | Removed "Address Mode" from "Custom / Advanced Query Options" since it is made
|
|---|
| 379 | obsolete by the users ability to select which columns they want displayed,
|
|---|
| 380 | which offers more granularity.
|
|---|
| 381 |
|
|---|
| 382 | Efficiency improvement in the way that it is determined if a given flag
|
|---|
| 383 | column for a given router should display the red "x" or green check mark.
|
|---|
| 384 | Previously, there was an "If" statement that set the appropriate CSS class for
|
|---|
| 385 | the table data cell based on whether a flag variable for that router was '0'
|
|---|
| 386 | or '1'. Now, there is a CSS class that ends in '0' and '1', and the variable
|
|---|
| 387 | value is just dumped directly into the class statement in the appropriate
|
|---|
| 388 | place. This saves up to '$NumberOfDifferentFlags X $NumberOfRoutersInResultSet'
|
|---|
| 389 | 'If' statements from being executed on each page load, normally many thousand.
|
|---|
| 390 |
|
|---|
| 391 | Fixed a bug in the generation of CSV files that was causing a comma to be
|
|---|
| 392 | added after the last column in a row. According to RFC 4180, this is incorrect.
|
|---|
| 393 | Also, added a newline character (\n) to the end of files.
|
|---|
| 394 |
|
|---|
| 395 | Added "Comma Separated Value (CSV) List of Current Result Set" option. This
|
|---|
| 396 | lets a user get a comma separated value (CSV) file of their current search
|
|---|
| 397 | result set, exactly as displayed on screen (Including sort preferences, column
|
|---|
| 398 | display preferences, and any other custom query parameters that may be
|
|---|
| 399 | applied). The first record (row) in the generated CSV file will contain the
|
|---|
| 400 | column names for reference. This should be very useful for users wishing to
|
|---|
| 401 | export the data from a custom query into an external data source.
|
|---|
| 402 |
|
|---|
| 403 |
|
|---|
| 404 | --Version 2.7--
|
|---|
| 405 | Moved the column display options to their own page, rather than having them on
|
|---|
| 406 | the main page in the "Custom / Advanced Query Options" box. You can get to the
|
|---|
| 407 | column display options by following the "Custom / Advanced Display Options"
|
|---|
| 408 | link from the top of the page and then clicking on the "Column Display
|
|---|
| 409 | Preferences" link. This should provide a much more comfortable interface for
|
|---|
| 410 | customizing column display options.
|
|---|
| 411 |
|
|---|
| 412 | Added the ability for users to re-configure the order that columns display in.
|
|---|
| 413 | Previously, users could only add and remove columns. This should allow much
|
|---|
| 414 | more flexibility to users wishing to customize the look of the page.
|
|---|
| 415 |
|
|---|
| 416 | Updated "Comma Separated Value (CSV) List of Current Result Set" functionality
|
|---|
| 417 | to support the newly added ability of users to re-configure column display
|
|---|
| 418 | order. This way, the CSV file of the current result set benefits from the same
|
|---|
| 419 | level of flexibility as the main page display.
|
|---|
| 420 |
|
|---|
| 421 |
|
|---|
| 422 | --Version 2.8--
|
|---|
| 423 | Added the ability for users to display four additional columns on the main
|
|---|
| 424 | page: "Platform", "Contact", "EventDNS", & "Hibernating". Users can sort by
|
|---|
| 425 | the new columns and, in the case of the "EventDNS" and "Hibernating" items,
|
|---|
| 426 | filter query results based on whether they are true or false, as they are
|
|---|
| 427 | treated as "Flags" by the application. All four of the newly added columns are
|
|---|
| 428 | set to "Off" by default.
|
|---|
| 429 |
|
|---|
| 430 | Updated the "Comma Separated Value (CSV) List of Current Result Set" script to
|
|---|
| 431 | support the addition of the new columns.
|
|---|
| 432 |
|
|---|
| 433 | Bug fix to the "Comma Separated Value (CSV) List of Current Result Set" script:
|
|---|
| 434 | Commas (,) and double-quotes (") are now replaced with a dash (-) and a single-
|
|---|
| 435 | quote ('), respectively, when they occur in a field to be written to the CSV
|
|---|
| 436 | file, as these characters would cause problems for automatic parsers.
|
|---|
| 437 |
|
|---|
| 438 | Modified the "Router Detail" page to display information on the "EventDNS" and
|
|---|
| 439 | "Hibernating" items alongside the other flags, since it has now been
|
|---|
| 440 | determined that the application will be treating these items like any other
|
|---|
| 441 | flag. Previously, these two items were displayed in the "General Information"
|
|---|
| 442 | section of the page, not the "Router Flags" section.
|
|---|
| 443 |
|
|---|
| 444 | Modified the order in which some items display in the "Aggregate Network
|
|---|
| 445 | Statistic Summary" section of the main page and the "Aggregate Summary --
|
|---|
| 446 | Number of Routers Matching Specified Criteria" graph on the "Network Detail"
|
|---|
| 447 | page to enhance consistency throughout the application.
|
|---|
| 448 |
|
|---|
| 449 | Minor source code cleanups to enhance consistency between scripts.
|
|---|
| 450 |
|
|---|
| 451 |
|
|---|
| 452 | --Version 2.9--
|
|---|
| 453 | Various application-wide code cleanups to fix all known situations that would
|
|---|
| 454 | generate PHP warnings.
|
|---|
| 455 |
|
|---|
| 456 | Fixed a rare division by zero bug that could occur during the generation of
|
|---|
| 457 | the bandwidth history graphs on the router detail page.
|
|---|
| 458 |
|
|---|
| 459 | Updates to the way "Uptime" information is presented. Previously, the "Router
|
|---|
| 460 | Detail" page would calculate the real-time uptime of the router (By looking
|
|---|
| 461 | at the difference between the current time and when the router descriptor was
|
|---|
| 462 | last published, and adding this value to the published "Uptime" value in the
|
|---|
| 463 | descriptor, compensating for time zone differences), but the other places that
|
|---|
| 464 | made use of the "Uptime" value did not, such as the main page, the "Network
|
|---|
| 465 | Detail" page, and the "Comma Separated Value (CSV) List of Current Result Set"
|
|---|
| 466 | functionality. These places would simply use the static "Uptime" value from
|
|---|
| 467 | the latest descriptor, and would not perform any real-time calculations on it.
|
|---|
| 468 | Now, all places that make use of the "Uptime" value perform the real-time
|
|---|
| 469 | calculations on it. This eliminates discrepancies between what the "Router
|
|---|
| 470 | Detail" page shows and what is shown everywhere else. Additionally, code to
|
|---|
| 471 | gracefully deal with situations where a certain descriptors publish time is
|
|---|
| 472 | obviously wrong, such as when it's in the future, was added to all places
|
|---|
| 473 | doing the "Uptime" calculations.
|
|---|
| 474 |
|
|---|
| 475 | Modified all places that display a "DirPort" value to say "None" rather than
|
|---|
| 476 | "0" for routers that do not mirror the directory. This is less confusing.
|
|---|
| 477 |
|
|---|
| 478 | Modified all places that display a "CountryCode" value to say "N/A" rather than
|
|---|
| 479 | nothing for routers where country code information could not be retrieved.
|
|---|
| 480 | Again, less confusing.
|
|---|
| 481 |
|
|---|
| 482 | Made the "Tor Network Status" text at the top and bottom of each page a link
|
|---|
| 483 | to get back to the main page. This should be more user-friendly than having to
|
|---|
| 484 | hit "back" to get to the main page when on the "Network Detail" and "Router
|
|---|
| 485 | Detail" pages. The links also exist on the main page itself, which will just
|
|---|
| 486 | refresh the page with the user's current settings.
|
|---|
| 487 |
|
|---|
| 488 | Added two new array variables to the config file to allow the default column
|
|---|
| 489 | display options to be set on a global scale. These options are what will be
|
|---|
| 490 | used when the user has not yet performed any customization on their display
|
|---|
| 491 | preferences. Both the active/inactive columns and their display order can be
|
|---|
| 492 | specified.
|
|---|
| 493 |
|
|---|
| 494 | Changed default column display preferences -- Added "Hostname" and removed
|
|---|
| 495 | "Bad Dir" and "Bad Exit".
|
|---|
| 496 |
|
|---|
| 497 | Removed support for the "EventDNS" descriptor flag entirely. The logic for this
|
|---|
| 498 | functionality was faulty, and since all new Tor versions have EventDNS enabled
|
|---|
| 499 | by default, and the Tor developers plan to remove the old DNS logic entirely
|
|---|
| 500 | at some time in the future (According to the "dir-spec" document), I decided
|
|---|
| 501 | to just go ahead and remove this now since it is becoming irrelevant.
|
|---|
| 502 |
|
|---|
| 503 | Removed "IRIX" as a listed operating system on the "Platform Graph", as it
|
|---|
| 504 | seems there have been no Tor servers running on this OS for some time now.
|
|---|
| 505 |
|
|---|
| 506 | Other minor fixes/enhancements.
|
|---|
| 507 | ===============================================================================
|
|---|
| 508 | }}}
|
|---|
| 509 | ===============================================================================
|
|---|
| 510 |
|
|---|
| 511 | ===============================================================================
|
|---|
| 512 | Version 1 Changes {{{
|
|---|
| 513 | ===============================================================================
|
|---|
| 514 | --Version 1.0--
|
|---|
| 515 |
|
|---|
| 516 | Initial release.
|
|---|
| 517 |
|
|---|
| 518 |
|
|---|
| 519 | --Version 1.1--
|
|---|
| 520 |
|
|---|
| 521 | Addition of router detail page.
|
|---|
| 522 |
|
|---|
| 523 | Addition of real-time-calculated router uptime to router detail page.
|
|---|
| 524 |
|
|---|
| 525 | Addition of bandwidth graphs to router detail page. This functionality makes
|
|---|
| 526 | use of the free 'JPGraph' PHP libraries.
|
|---|
| 527 |
|
|---|
| 528 | Addition of country code data to main and router detail pages. This
|
|---|
| 529 | functionality makes use of the free 'GeoIP' PHP API and country database.
|
|---|
| 530 |
|
|---|
| 531 | Separation of database refresh operation from main page render operation. The
|
|---|
| 532 | database refresh operation has been moved out of the web root into it's own
|
|---|
| 533 | script, 'tns_update.php'. This greatly increases page render speed in
|
|---|
| 534 | situations where the local-cache is expired.
|
|---|
| 535 |
|
|---|
| 536 | Addition of 'tns_agent.php' script to handle background scheduled database
|
|---|
| 537 | refresh operations.
|
|---|
| 538 |
|
|---|
| 539 | Movement of the SQL database creation script out of the web root.
|
|---|
| 540 |
|
|---|
| 541 | Addition of ability to click on a column header on main page to sort. Multiple
|
|---|
| 542 | clicks alternate sort direction.
|
|---|
| 543 |
|
|---|
| 544 | Addition of code to handle situations where a user attempts to load a page
|
|---|
| 545 | while a background database refresh is in progress. In these situations, the
|
|---|
| 546 | user will be notified of the database refresh being in progress, and the page
|
|---|
| 547 | will automatically reload in 10 seconds, retaining any sort or search criteria
|
|---|
| 548 | that was initially passed by the user.
|
|---|
| 549 |
|
|---|
| 550 | Various performance improvements during main page render, some major. Code
|
|---|
| 551 | cleanups. Implementation of CSS / HTML restructuring to greatly reduce the
|
|---|
| 552 | size of page.
|
|---|
| 553 |
|
|---|
| 554 |
|
|---|
| 555 | --Version 1.2--
|
|---|
| 556 |
|
|---|
| 557 | Application-wide security fixes.
|
|---|
| 558 |
|
|---|
| 559 | Multiple XSS vulnerabilities fixed.
|
|---|
| 560 |
|
|---|
| 561 | Possible SQL injection vulnerability fixed.
|
|---|
| 562 |
|
|---|
| 563 | Code cleanups, further performance enhancements.
|
|---|
| 564 |
|
|---|
| 565 |
|
|---|
| 566 | --Version 1.3--
|
|---|
| 567 |
|
|---|
| 568 | Major changes to the way the application gets it's network status information
|
|---|
| 569 | and router descriptors.
|
|---|
| 570 |
|
|---|
| 571 | Previously, for network status information, the application would cycle
|
|---|
| 572 | through the local Tor server's "cached-status" documents of Authority servers
|
|---|
| 573 | you explicitly allowed in the application config file, using a different one
|
|---|
| 574 | for each local-cache refresh. This had two problems. First, it meant that you
|
|---|
| 575 | would get a different number of routers listed, and oftentimes different
|
|---|
| 576 | properties listed for a specific router depending on which Authority server's
|
|---|
| 577 | cached-status doc had been used. Second, and this is the bigger of the two
|
|---|
| 578 | problems, is that this is not the way the Tor network works. The Tor network
|
|---|
| 579 | leaves it up to each client/server to calculate what it believes to be the
|
|---|
| 580 | correct view of the network based on the multiple sources of network status
|
|---|
| 581 | information it has available. This is important for security reasons, and
|
|---|
| 582 | plays a significant role in making it harder for someone to play some bad
|
|---|
| 583 | tricks on network users. So, now network status information is obtained by
|
|---|
| 584 | asking the local Tor server's control port to list all routers it has an
|
|---|
| 585 | opinion about. This ensures the data being presented has been through the
|
|---|
| 586 | proper "voting" process done by the Tor software, and is what the local Tor
|
|---|
| 587 | server believes to be correct.
|
|---|
| 588 |
|
|---|
| 589 | Previously, for individual router descriptors, the application would do one
|
|---|
| 590 | of two things. One, the default, was to directly ask whichever Authority
|
|---|
| 591 | server was used for the last local-cache refresh. This was bad, as it
|
|---|
| 592 | basically meant that for the duration of the current cache life, every
|
|---|
| 593 | visitor going to the "router_detail" page was causing a request for a
|
|---|
| 594 | descriptor to be sent to that Authority server. Not what we want for the
|
|---|
| 595 | Authority servers, I'm sure. Two, a user could specify that they always wanted
|
|---|
| 596 | to use a certain Tor server for descriptor requests. This fixed the issue with
|
|---|
| 597 | hammering the Authority servers, but only if people used the option. Now,
|
|---|
| 598 | router descriptors are also obtained through the local Tor server's control
|
|---|
| 599 | port. Also, router descriptors are no longer written to files on the hard
|
|---|
| 600 | drive. This was unnecessary and slow.
|
|---|
| 601 |
|
|---|
| 602 | These changes allowed a lot of clean-up to be done in the config file. There
|
|---|
| 603 | are a lot less variables in there now.
|
|---|
| 604 |
|
|---|
| 605 |
|
|---|
| 606 | --Version 1.4--
|
|---|
| 607 |
|
|---|
| 608 | Addition of an option to export the IP Addresses of all current Tor routers to
|
|---|
| 609 | a CSV (Comma Separated Value) file. This may be of some use for people looking
|
|---|
| 610 | to get a quick, current list of Tor router IP's, whether to formulate block
|
|---|
| 611 | lists, or to assist with other Tor network status apps / pages.
|
|---|
| 612 |
|
|---|
| 613 | Addition of "Bandwidth" and "Uptime" columns to main page. The bandwidth
|
|---|
| 614 | reading is obtained from the "Bandwidth Observed" parameter of the router
|
|---|
| 615 | descriptor and is displayed in KB/s. The uptime reading is obtained from the
|
|---|
| 616 | "Uptime" parameter of the router descriptor and is displayed in days. Both of
|
|---|
| 617 | these columns are sortable.
|
|---|
| 618 |
|
|---|
| 619 | Back end changes to make the addition of the "Bandwidth" and "Uptime" columns
|
|---|
| 620 | to the main page, described above, possible. These changes consisted of making
|
|---|
| 621 | the scheduled background update process request and parse the descriptors of
|
|---|
| 622 | every router that the local Tor server has an opinion about, as identified by
|
|---|
| 623 | it's network status request response, so that the bandwidth and uptime
|
|---|
| 624 | information (and everything else in the descriptor) could be inserted into the
|
|---|
| 625 | database at this stage to be available for use on the main page. Previously,
|
|---|
| 626 | descriptors were only requested and parsed on an as-needed basis when a user
|
|---|
| 627 | loaded the "router_detail.php" page, and the data parsed from them was not
|
|---|
| 628 | stored. Now, it's all inserted into the database during the main update
|
|---|
| 629 | process which opens up the possibilities for all kinds on new stuff. The
|
|---|
| 630 | downside to doing it this way is that the main update process CAN take
|
|---|
| 631 | considerably longer (especially when the local Tor server is very busy), which
|
|---|
| 632 | led to the second major back end change: Using two router (local-cache) tables
|
|---|
| 633 | instead of one. Basically, only one table is marked as active at any given
|
|---|
| 634 | time, and all page loads use the active table. When the update process runs,
|
|---|
| 635 | it runs on the non-active table, and marks it as the active table upon
|
|---|
| 636 | successful completion. This prevents users from seeing the "Database refresh in
|
|---|
| 637 | progress" error message, as they will instead just be seeing the old data
|
|---|
| 638 | until the new data is ready. I was quite serious about not causing a
|
|---|
| 639 | performance hit to page load times due to the new functionality, and this was
|
|---|
| 640 | the solution implemented to avoid that.
|
|---|
| 641 |
|
|---|
| 642 |
|
|---|
| 643 | --Version 1.5--
|
|---|
| 644 |
|
|---|
| 645 | Major performance enhancements to both the background update process and the
|
|---|
| 646 | main page load process.
|
|---|
| 647 |
|
|---|
| 648 | First, for the update process, we are now obtaining the full network status
|
|---|
| 649 | opinion document and the full recent descriptor document from the control port
|
|---|
| 650 | of the Tor server. Previously, we were obtaining the full network status
|
|---|
| 651 | opinion document, and then, as we parsed out this file, we requested server
|
|---|
| 652 | descriptors of the Tor server's control port individually. This tended to
|
|---|
| 653 | sometimes cause somewhat of a load on the Tor server and cause the descriptors
|
|---|
| 654 | to be fed back very slowly, sometimes taking up to a half hour for a full
|
|---|
| 655 | refresh. Now, since we grab both full documents all at once, it only takes the
|
|---|
| 656 | Tor server a few seconds to provide them. Second, we are now writing the
|
|---|
| 657 | parsed network status information and the parsed descriptor information into
|
|---|
| 658 | two separate database tables (NetworkStatus & Descriptor). This makes for
|
|---|
| 659 | cleaner design and tables with less columns. And, in keeping with the spirit
|
|---|
| 660 | of the updates made in Version 1.4, there is two of each of these tables
|
|---|
| 661 | (NetworkStatus & Descriptor) so that one set can be updated while the other
|
|---|
| 662 | set can continue to be used by folks loading the page and running queries,
|
|---|
| 663 | etc., until the new set is ready.
|
|---|
| 664 |
|
|---|
| 665 | Performance improvements to the load time of the main page were obtained by
|
|---|
| 666 | switching to the MySQL MyISAM storage engine, instead of the InnoDB engine we
|
|---|
| 667 | had been using previously. MyISAM is significantly faster than InnoDB, and,
|
|---|
| 668 | since we currently don't make use of transactions, there is no reason not to
|
|---|
| 669 | use it. Also, indexes were added to the NetworkStatus and Descriptor tables
|
|---|
| 670 | on the "Fingerprint" column, since this is what is used for the join of these
|
|---|
| 671 | two tables during page load. This further increased the query speed.
|
|---|
| 672 |
|
|---|
| 673 | Some other small performance improvements were implemented, especially on the
|
|---|
| 674 | "router_detail.php" page.
|
|---|
| 675 |
|
|---|
| 676 | The update process now has more robust error handling.
|
|---|
| 677 |
|
|---|
| 678 | Addition of "Count" column to main page.
|
|---|
| 679 |
|
|---|
| 680 | Addition of green check marks and red x's to indicate whether a flag is "Yes"
|
|---|
| 681 | or "No". Previously, it would just print "Yes" or "No".
|
|---|
| 682 |
|
|---|
| 683 | Modifications of font selections and background images to hopefully achieve
|
|---|
| 684 | two things: Fit more in a smaller space, and make the page easier to read.
|
|---|
| 685 |
|
|---|
| 686 |
|
|---|
| 687 | --Version 1.6--
|
|---|
| 688 |
|
|---|
| 689 | The application now performs reverse-DNS lookups during the update process and
|
|---|
| 690 | stores this information in the database. This enables a user to choose whether
|
|---|
| 691 | they would like addresses displayed as IP or Hostname. Of course, whichever
|
|---|
| 692 | display they choose, it is sortable.
|
|---|
| 693 |
|
|---|
| 694 | Added Hostname information to the router detail page as well.
|
|---|
| 695 |
|
|---|
| 696 | Added "Last Update Elapsed Time" field to main page. Good way to see if your
|
|---|
| 697 | system is experiencing problems during the background updates.
|
|---|
| 698 |
|
|---|
| 699 | Added "Current Descriptor Signature" field to the main page for the Network
|
|---|
| 700 | Status Source router information section.
|
|---|
| 701 |
|
|---|
| 702 | Minor CSS changes to improve layout and formatting in certain situations.
|
|---|
| 703 |
|
|---|
| 704 |
|
|---|
| 705 | --Version 1.7--
|
|---|
| 706 |
|
|---|
| 707 | Changes to the way variable handling is done. I moved all state maintaining
|
|---|
| 708 | variables into PHP session, such as all of the "Flags" variables and the
|
|---|
| 709 | Address Display Mode, SortRequest, and SortOrder variables. Also, wherever
|
|---|
| 710 | possible because of addition to session, variables were removed from the URL's
|
|---|
| 711 | in the anchor tags of the generated page. The only ones that were left in
|
|---|
| 712 | URL's were variables that need to be manipulated by clicking on a link, namely
|
|---|
| 713 | the SortRequest and SortOrder variables. This makes the URL's in the anchor
|
|---|
| 714 | tags of the generated page much shorter and cleaner, since a whole lot less is
|
|---|
| 715 | being passed around via GET. This in turn reduces the generated page size,
|
|---|
| 716 | sometimes considerably depending on the custom query options in effect.
|
|---|
| 717 | Another nice benefit to doing things this way is that if a user has custom
|
|---|
| 718 | options set, completely browses away from the site, and later comes back
|
|---|
| 719 | within their same browser session, all of their options will be configured as
|
|---|
| 720 | they were when they left.
|
|---|
| 721 |
|
|---|
| 722 | Also, variables that needed to remain in URL's have shorter names to further
|
|---|
| 723 | reduce the amount of data being passed around via GET, and hence the length
|
|---|
| 724 | of the URL's in the generated page.
|
|---|
| 725 |
|
|---|
| 726 | Further cleanups to HTML formatting and CSS on both the main page and the
|
|---|
| 727 | router detail page.
|
|---|
| 728 |
|
|---|
| 729 | Addition of timer to bottom of main page to indicate how long page generation
|
|---|
| 730 | took on the server.
|
|---|
| 731 |
|
|---|
| 732 |
|
|---|
| 733 | --Version 1.8--
|
|---|
| 734 |
|
|---|
| 735 | Changes / cleanup to CSS. All CSS information is now defined in one external
|
|---|
| 736 | style sheet which resides in the "web/css" directory, and the different parts
|
|---|
| 737 | of the code that need the style sheet simply reference it rather than defining
|
|---|
| 738 | everything at the top of every HTML page output to the browser.
|
|---|
| 739 |
|
|---|
| 740 | Addition of row highlighting for Mozilla Firefox / Opera. This makes it easier
|
|---|
| 741 | to visually track which row you are currently moused over. This feature does
|
|---|
| 742 | not currently work in Internet Explorer since that would require JavaScript,
|
|---|
| 743 | and I'm trying to keep this app JavaScript free for those who browse with it
|
|---|
| 744 | disabled.
|
|---|
| 745 |
|
|---|
| 746 | When sorting by IP Addresses, they are now sorted naturally, rather than as
|
|---|
| 747 | strings. This should make the IP Address search quite a bit more meaningful.
|
|---|
| 748 | This change also applies to the CSV (Comma Separated Value) file list of IP's.
|
|---|
| 749 |
|
|---|
| 750 |
|
|---|
| 751 | --Version 1.9--
|
|---|
| 752 |
|
|---|
| 753 | Added proper escaping of problem characters to all strings that get populated
|
|---|
| 754 | from data parsed from router descriptors and network status documents before
|
|---|
| 755 | database inserts are performed. This should prevent the update process from
|
|---|
| 756 | dying when these characters are encountered, which would sometimes happen.
|
|---|
| 757 |
|
|---|
| 758 | Now using the standard "gethostbyaddr" PHP function to do hostname lookups.
|
|---|
| 759 | Previously, I was doing some custom parsing on the output of the Unix "host"
|
|---|
| 760 | command, as I thought it would be faster, but, after comparing the two, I see
|
|---|
| 761 | no speed degradation with using "gethostbyaddr". The advantage of using
|
|---|
| 762 | "gethostbyaddr" over "host" is that we are not using a platform-specific
|
|---|
| 763 | command which limits where the application can run without modification.
|
|---|
| 764 |
|
|---|
| 765 | Addition of Advanced Search functionality, which lets you perform free-text
|
|---|
| 766 | searches on the following data: Fingerprint, Router Name, Country Code,
|
|---|
| 767 | Bandwidth, Uptime, Last Descriptor Published, IP Address, Hostname, Onion
|
|---|
| 768 | Router Port, Directory Server Port, Platform, & Contact. You can apply the
|
|---|
| 769 | following modifiers when searching the above data: Equals, Contains, Is Less
|
|---|
| 770 | Than, or Is Greater Than. The Advanced Search works in conjunction with the
|
|---|
| 771 | other Custom Query options (Sort By, Sort Order, Address Display Mode, and
|
|---|
| 772 | Require Flags), allowing a great deal of flexibility to customize the result
|
|---|
| 773 | set as desired.
|
|---|
| 774 |
|
|---|
| 775 | Addition of indexes where necessary in the database to better facilitate
|
|---|
| 776 | speedy free-text searches.
|
|---|
| 777 |
|
|---|
| 778 | Addition of "Hostname" field to "Tor Server Providing Network Status Opinion"
|
|---|
| 779 | section.
|
|---|
| 780 |
|
|---|
| 781 | Addition of feature to tell user if they are accessing the page through the
|
|---|
| 782 | Tor network or not, color coded.
|
|---|
| 783 |
|
|---|
| 784 | Additional escaping of potentially troublesome HTML characters before
|
|---|
| 785 | displaying on page for "Contact" field on main page and router detail page.
|
|---|
| 786 | ===============================================================================
|
|---|
| 787 | }}}
|
|---|
| 788 | ===============================================================================
|
|---|
| 789 |
|
|---|
| 790 | NOTE: This product includes GeoLite data created by MaxMind, available from
|
|---|
| 791 | http://www.maxmind.com/.
|
|---|
| 792 |
|
|---|