All Projects → sim642 → Whatpulse

sim642 / Whatpulse

Licence: mit
WhatPulse reverse engineered

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Whatpulse

Ruffles
Lightweight and fully managed reliable UDP library.
Stars: ✭ 131 (+336.67%)
Mutual labels:  library, network, protocol
Mud
Multipath UDP library
Stars: ✭ 100 (+233.33%)
Mutual labels:  hacktoberfest, network, protocol
Librenms
Community-based GPL-licensed network monitoring system
Stars: ✭ 2,567 (+8456.67%)
Mutual labels:  hacktoberfest, network, monitoring
Xtoolkit.whitelabel
Modular MVVM framework for fast creating powerful cross-platform applications with Xamarin.
Stars: ✭ 22 (-26.67%)
Mutual labels:  hacktoberfest, library
Vflow
Enterprise Network Flow Collector (IPFIX, sFlow, Netflow) from Verizon Media
Stars: ✭ 776 (+2486.67%)
Mutual labels:  network, monitoring
Bmon
bandwidth monitor and rate estimator
Stars: ✭ 787 (+2523.33%)
Mutual labels:  network, monitoring
Node Minecraft Protocol
Parse and serialize minecraft packets, plus authentication and encryption.
Stars: ✭ 697 (+2223.33%)
Mutual labels:  network, protocol
Apos.input
Polling input library for MonoGame.
Stars: ✭ 25 (-16.67%)
Mutual labels:  library, input
Kuberhealthy
A Kubernetes operator for running synthetic checks as pods. Works great with Prometheus!
Stars: ✭ 920 (+2966.67%)
Mutual labels:  hacktoberfest, monitoring
Librg
🚀 Making multi-player gamedev simpler since 2017
Stars: ✭ 813 (+2610%)
Mutual labels:  library, network
Awareness
The new architecture of co-computation for data processing and machine learning.
Stars: ✭ 11 (-63.33%)
Mutual labels:  library, protocol
Mtasa Blue
Multi Theft Auto is a game engine that incorporates an extendable network play element into a proprietary commercial single-player game.
Stars: ✭ 739 (+2363.33%)
Mutual labels:  hacktoberfest, reverse-engineering
Selks
A Suricata based IDS/IPS distro
Stars: ✭ 707 (+2256.67%)
Mutual labels:  network, monitoring
Senseme
Python Library for Haiku SenseMe app controlled fans/lights
Stars: ✭ 19 (-36.67%)
Mutual labels:  hacktoberfest, protocol
Tech Refrigerator
🍰 기술 냉장고입니다. 🛒 기술 면접 , 전공 시험 , 지식 함양 등 분명 도움될 거예요! 🤟
Stars: ✭ 699 (+2230%)
Mutual labels:  hacktoberfest, network
Logmonitor
Monitoring log files on windows systems.
Stars: ✭ 23 (-23.33%)
Mutual labels:  daemon, monitoring
Auto Cpufreq
Automatic CPU speed & power optimizer for Linux
Stars: ✭ 843 (+2710%)
Mutual labels:  daemon, monitoring
Python Opcua
LGPL Pure Python OPC-UA Client and Server
Stars: ✭ 863 (+2776.67%)
Mutual labels:  library, protocol
Sentry
Sentry is cross-platform application monitoring, with a focus on error reporting.
Stars: ✭ 29,700 (+98900%)
Mutual labels:  hacktoberfest, monitoring
Lambdacd
a library to define a continuous delivery pipeline in code
Stars: ✭ 655 (+2083.33%)
Mutual labels:  hacktoberfest, library

whatpulse

WhatPulse reverse engineered

This project consists of three parts:

  1. Reverse engineering WhatPulse Client API protocol.

    The reverse engineering has been done using mitmproxy. The captures can be found in caps directory. All results have been thoroughly documented in API.md.

  2. Implementing the protocol as a Python library.

    The implementation of the protocol in Python 3 can be found in whatpulse directory.

  3. Making a replacement client for WhatPulse using the library.

    The replacement client is called whatpulsed. An additional tool whatpulse_computerinfo comes with it. Both are described below in more detail.

Disclaimer

WhatPulse officially forbids the use of any unofficial clients, including the Python library and the replacement client provided here. Use them at your own risk, being fully aware that your WhatPulse account may be suspended for doing so.

There are known cases of WhatPulse accounts being suspended for using the client software provided here. Given library attempts to imitate the official client as closely as possible to be undetectable but no such guarantee is given. Beware that mentioning your use of software provided here (e.g. in the issues of this repository) may also lead to suspension.

Sources

WhatPulse Terms of Service:

As a condition for use of the Website and Services, you agree not to use the Website or Services for the following 7. To fake statistics with the intention of achieving higher ranks or other rewards.

WhatPulse Knowledge Base - Are there any rules?:

You are also not allowed to use any external programs to generate fake statistics. Detection of this will get your account (and statistics) removed. Only the official WhatPulse clients are allowed for statistics generation.

Setup

Dependencies

Dependencies will be installed by pip automatically. Manual installation is only required in case of problems.

  • python-daemon - used for running in the background
  • python-evdev - used for parsing input from /dev/input/event*
  • lxml - used for communicating with the XML API
  • requests - used for communicating with the API

Installation

Install from project directory (where "setup.py" is) with

sudo pip3 install .

whatpulsed

This program is a replacement for WhatPulse client: it counts keys, clicks; measures download, upload, uptime and pulses that information manually or automatically. The idea is to provide pulsing features similar to the official client in a lightweight form, without the GUI and fancy visual statistics. Since whatpulsed is coded in Python 3 it can be run on platforms unsupported by the official client, e.g. headless systems and other architectures (e.g. ARM on Raspberry Pi). Currently it only works on Linux.

Usage

First run

  1. Create "whatpulsed.conf":
  2. Run with whatpulsed in the same directory as "whatpulsed.conf"
  3. Wait for "whatpulsed.json" to be created
  4. (optional) Remove plaintext login details from "whatpulsed.conf" by deleting login section

Future runs

  1. Run with whatpulsed in the same directory as "whatpulsed.json"
  2. Manually pulse by sending the process a SIGUSR1, e.g. pkill -USR1 whatpulsed
  3. Gracefully stop whatpulsed by sending the process a SIGTERM, e.g. pkill whatpulsed

Files

whatpulsed.conf

This is the configuration file for whatpulsed. It is in INI format and has the following sections:

  • login - WhatPulse login details (optional, only required when no state file "whatpulsed.json" exists)
    • email - WhatPulse login email
    • password - WhatPulse login password
    • computer - computer name to log into
  • state - state options (optional, but recommended)
    • interval (time) - state saving interval
  • interfaces - network interfaces
    • list of interfaces to measure (no INI values), e.g. eth0
  • inputs - evdev inputs
    • list of input devices to count (no INI values), e.g. /dev/input/event2
  • pulse - automatic pulsing conditions (any satisfied condition pulses)
    • keys (general) - key count to pulse on
    • clicks (general) - click count to pulse on
    • download (size) - download amount to pulse on
    • upload (size) - upload amount to pulse on
    • uptime (time) - uptime to pulse on

converter

Some values can be in converted format, allowing more human-readable values:

  • (general) - generic magnitude units

    unit meaning value
    k kilo 1000
    m mega 1000k
    g giga 1000m
    t tera 1000g
    e.g. 1m500k means "1.5 million"
  • (size) - base 2 magnitude units

    unit meaning value
    k kibi 1024
    m mebi 1024k
    g gibi 1024m
    t tebi 1024g
    e.g. 1g500m means "1.5 gigabytes"
  • (time) - time magnitude units

    unit meaning value
    s second 1
    m minute 60s
    h hour 60m
    d day 24h
    w week 7d
    y year 52w
    e.g. 3d7h10m means "3 days, 7 hours and 10 minutes"

whatpulsed.json

This is the state file for whatpulsed and is not meant to be directly manipulated. It is in JSON format and is structured as follows:

  • login - logged in state
    • userid
    • computerid
    • hash
    • token
  • stats - unpulsed stats
    • keys
    • clicks
    • download
    • upload
    • upime

whatpulse_computerinfo

This program allows uploading computer information (specs) to WhatPulse website for others to see without needing to install the official client. It allows manually specifying all supported information and uploading it via this simple script.

Usage

  1. Provide WhatPulse login details:
    1. Have "whatpulsed.json" as the result of running whatpulsed
      or
    2. Create "whatpulsed.conf" as described above (only login section is required)
  2. Create "computerinfo.json":
  3. Run with whatpulse_computerinfo in the same directory as "whatpulsed.json"/"whatpulsed.conf" and "computerinfo.json"

Files

computerinfo.json

This is the computer info file for upload_computerinfo. It is in JSON format and is structured similarly to the JSON object used for upload_computerinfo request in the API:

{
    "VideoInfo": "NVIDIA GeForce GT 440",
    "TrackpadInfo": {},
    "NetworkInfo":
    {
        "isNetworkMonitorSupported":
        {
            "isNetworkMonitorSupported": true
        }
    },
    "CPUInfo": "Intel Core i5-2310",
    "ComputerModel": "",
    "ComputerOS": "Arch Linux",
    "ComputerPlatform": "x86_64",
    "KeyboardInfo": {},
    "MemoryInfo": 5955,
    "MonitorInfo":
    {
        "0":
        {
            "id": 0,
            "width": 1920,
            "height": 1080,
        },
        "1":
        {
            "id": 1,
            "width": 1280,
            "height": 1024,
        }
    },
    "MouseInfo": {}
}

where the values are:

  • VideoInfo - GPU name

  • TrackpadInfo - JSON object in unknown format, usually {}

  • NetworkInfo - JSON object in the following format:

    {
        "isNetworkMonitorSupported":
        {
            "isNetworkMonitorSupported": true
        },
    
        "Intel 82540EM Gigabit":
        {
            "is_wifi": false,
            "description": "Intel 82540EM Gigabit"
        },
        ...
    }
    

    where network cards as keys have values:

    • is_wifi - network card Wi-Fi ability
    • description - network card name, same as key
  • CPUInfo - CPU name

  • ComputerModel - computer model name, usually empty

  • ComputerOS - operating system name

  • ComputerPlatform - computer platform identifier, usually i686 or x86_64

  • KeyboardInfo - JSON object in unknown format, usually {}

  • MemoryInfo - RAM amount in megabytes

  • MonitorInfo - JSON object in the following format:

    {
        "0":
        {
            "id": 0,
            "width": 1920,
            "height": 1080,
        },
        ...
    }
    

    where monitor IDs as keys have values:

    • id - monitor ID, same as key
    • width - monitor width
    • height - monitor height
  • MouseInfo - JSON object in unknown format, usually {}

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].