benchmark | ||
chart | ||
extensions/chromium | ||
pac-generator | ||
.gitignore | ||
package.json | ||
README.md |
Anti-censorship Solution for Russia on PAC-script
Censorship in Russia
Censorship in Russia plagues the Freedoms of Information and Speech, slowly building analogue of China Golden Shield.
For good or bad, it blocksm Main Kampf and critics of Putin.
Looking at how Russian government distorts TV and blocks Internet, I decided to write an Anti-censorship extension for Chomium before they strike first.
I believe the freedom of information is a virtue and important information mustn't be blocked based on political or other subjective views.
Your freedom ends when it starts to confine the freedom of others.
Technical Titbits
if (Is_subdomain_of( host, blocked_hosts ))
return 'use proxy';
You have to make Is_subdomain_of
very fast.
This check is executed on each request. You should watch memeory consumption too.
The naive solution is to keep array of blocked ips and check if the host resolves to one of the ips.
You may do it with indexOf
, binary search, etc.
The shortcoming of every ip solution is that some providers resolve blocked hosts to wrong ips, so we eventually need list of hosts.
I have tested different solutions, and depicted results in the following chart:
- IPs indexOf – Blocked IP is search by
indexOf
- IPs binary – Blocked IP is search by binary search. For some reason miss time slightly increased.
- IPs switch – Simply
switch(Blocked_IP) { case1: ... caseN: return true }
. Works even better than binary search. Magic. - Hosts switch – Radix trie built on
switch
. Comparable to IPs switch.
Antizapret
I've decided to use Antizapret proxy servers, which proxy ips from the the register only.