Page MenuHomePhabricator

Verify that no votes were cast via proxy in 2020 fawiki elections
Closed, ResolvedPublic

Description

In the days after the completion of the voting period (specifically, between Nov 6 and Nov 10) the election scrutineers, @Urbanecm and @Sotiale will be reviewing the votes to ensure no votes were cast by a sock or using an open proxy. To facilitate that last part, i.e. the open proxy check, I have prepared a script that the scrutineers can use to pass every IP address through three proxy checker web services. Scrutineers can also use other tools (e.g. https://ipcheck.toolforge.org/index.php) but the advantage of this script is it can loop through a list of IPs in an automated fashion.

Preparing the tool
These steps are best to be done before Nov 6:

  • Save the proxycheck.py script on a machine with python3
  • Use pip3 to install the required modules, namely ipwhois, iptools, and cidr_trie
  • Create a file named config.py in the same directory as the tool, and with the format shown below
  • Select an email address you want to use with https://getipintel.net/ and store that email address in the config file
    • Note: GetIPIntel does not need you to register an account; the email address is required so that they can notify you of issues (e.g. going about your daily quota)
  • Create a free account with IPQualityScore, then store your API key in the config file
  • Create a free account with proxycheck.oi then store your API key in the config file
config.py
findproxy = {
    'IPQSkey': 'I1A2B3J4ETCETCETC',
    'PCkey': '123456-abcedf-zyxwvu-987654',
    'GIIemail': 'email@domain.com'
}

Of these three services, IPQualityCheck currently has the smallest daily quota (you can only check 200 addresses a day). If the distinct list of IP addresses to check is more than 200, you may need to break it to smaller lists and run the checks on different days. Frankly, I don't think the distinct count of IP addresses for fawiki elections this year would be greater than 200 though.

Using the tool
These steps can only be done on or after Nov 6 and are best to be done by Nov 8:

  • Scrape the list of voter IP addresses from the votewiki
  • Reduce it to a unique set
    • While the script uses a cache and this step may feel unnecessary, it is helpful in that you will know if you would surpass the daily quota of IPQualityScore or not
  • Store the list in a plain text file, where each row contains one IP address and nothing else
  • Run the tool with a command like python3 procycheck.py --path="path/to/list.txt"

The output is a wikitable that you can save on a private wiki (e.g. CheckUser wiki) or even visually browse to see if nay IPs were flagged by 2 or all 3 services. (PS: If you don't like saving the list, you can preview it on some private wiki without saving; this way, you will see the wikitext output which is a clean, sortable table)

Event Timeline

@Urbanecm please strike the vote by پخش مطلب because they voted while being blocked on fawiki, which is against our election policy.

@Urbanecm please strike the vote by پخش مطلب because they voted while being blocked on fawiki, which is against our election policy.

@Huji (strike: I just did it on interface) Please let me know if it required Martin's other action to do it.

Urbanecm claimed this task.

I struck several votes casted from an open proxy. Closing as resolved.