GithubHelp home page GithubHelp logo

pymultitor's Introduction

PyMultiTor

PyPI version Downloads PyPI - Python Version

Python Multi Threaded Tor Proxy,
Did you ever want to be at two different places at the same time?
When I asked myself this question, I actually started developing this solution in my mind.
While performing penetration tests there are often problems caused by security devices that block the "attacking" IP.
This really annoyed me, so I wrote a script to supply a solution for this problem.
With a large number of IP addresses performing the attacks, better results are guaranteed - especially when attempting attacks to bypass Web Application Firewalls, Brute-Force type attacks and many more.

[Blackhat Asia] https://www.blackhat.com/asia-17/arsenal.html#pymultitor
[Owasp-IL Presentation] https://www.owasp.org/images/3/3d/OWASPIL-2016-02-02_PyMultiTor_TomerZait.pdf
[DigitalWhisper Article (Hebrew)] http://www.digitalwhisper.co.il/files/Zines/0x2E/DW46-3-PyMultitor.pdf

Logo

Installation

Prerequisites

  • Python 3.10+.
  • mitmproxy (https://mitmproxy.org/).
  • tor.
    • On Ubuntu / Kali, sudo apt install -y tor
    • On Centos, sudo yum install -y tor
    • On Fedora, sudo dnf install -y tor
    • On Windows,
      • download tor expert bundle: https://www.torproject.org/download/tor/
      • insert tor to your path environment: {tor-win32-*_path}\Tor
      • if you don't know how remember tor.exe path and use --tor-cmd argument on pymultitor (for example: pymultitor --tor-cmd "c:\Pentest\Web\tor-win32-0.2.9.9\Tor\tor.exe")
    • On MacOS, brew install tor

From pip

pip3 install pymultitor

From Docker

docker pull realgam3/pymultitor

From Source

git clone https://github.com/realgam3/pymultitor.git
cd pymultitor

# Install python dependencies.
# Depending on your setup, one or both of these may require sudo.
pip3 install -r requirements.txt
python3 setup.py install

# Confirm that everything works
pymultitor --help

Bug reports on installation issues are welcome!

Usage

Basic Usage

  1. Run pymultitor --on-string "Your IP Address Blocked".
  2. On your script use proxy (http://127.0.0.1:8080).
    When the string Your IP Address Blocked will present in the response content, you will exit from another IP address.

Docker Usage

  1. Run docker run --rm -p 8080:8080 realgam3/pymultitor --on-string "Your IP Address Blocked".
  2. On your script use proxy (http://127.0.0.1:8080).
    When the string Your IP Address Blocked will present in the response content, you will exit from another IP address.

Command Line Arguments

pymultitor --help
usage: pymultitor [-h] [-v] [-lh LISTEN_HOST] [-lp LISTEN_PORT] [-s] [-a AUTH] [-i] [-d] [-p PROCESSES] [-c CMD] [-e CONFIG] [-t TIMEOUT]
                  [-r TRIES] [--on-count ON_COUNT] [--on-string ON_STRING] [--on-regex ON_REGEX] [--on-rst]
                  [--on-status-code [ON_STATUS_CODE ...]]

options:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -lh LISTEN_HOST, --host LISTEN_HOST
                        proxy listen host. (default: 127.0.0.1)
  -lp LISTEN_PORT, --port LISTEN_PORT
                        proxy listen port (default: 8080)
  -s, --socks           use as socks proxy (not http proxy) (default: False)
  -a AUTH, --auth AUTH  set proxy authentication (format: 'username:pass') (default: )
  -i, --insecure        insecure ssl (default: False)
  -d, --debug           Debug Log. (default: False)
  -p PROCESSES, --tor-processes PROCESSES
                        number of tor processes in the cycle (default: 2)
  -c CMD, --tor-cmd CMD
                        tor cmd (executable path + arguments) (default: tor)
  -e CONFIG, --tor-config CONFIG
                        tor extended json configuration (default: {})
  -t TIMEOUT, --tor-timeout TIMEOUT
                        timeout in seconds for starting a tor instance; 0 disables timeout (default: 90)
  -r TRIES, --tor-tries TRIES
                        number tries to start a tor instance before it fails (default: 5)
  --on-count ON_COUNT   change ip every x requests (resources also counted) (default: 0)
  --on-string ON_STRING
                        change ip when string found in the response content (default: )
  --on-regex ON_REGEX   change ip when regex found in The response content (default: )
  --on-rst              change ip when connection closed with tcp rst (default: False)
  --on-status-code [ON_STATUS_CODE ...]
                        change ip when one of the specified status codes is returned (default: [])

pymultitor's People

Contributors

junquera avatar m417z avatar realgam3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pymultitor's Issues

Add HTTPProxy support

I mean tor command option HTTPProxy https://www.torproject.org/docs/tor-manual.html.en .
Because many country ban tor, I need connect tor network over another proxy

I tried python pymultitor -c "tor -- HTTPProxy 127.0.0.1:1920", didn't wrok.

alter code to:

        self.process = launch_tor_with_config(
            config={
                "ControlPort": str(self.control_port),
                "SOCKSPort": str(self.socks_port),
                "DataDirectory": self.data_directory,
                "HTTPProxy ": "127.0.0.1:1920",
                "AllowSingleHopCircuits": "1",
                "ExcludeSingleHopRelays": "0",
            },
            tor_cmd=self.tor_cmd,
            init_msg_handler=self.print_bootstrapped_line
        )

neither work. .

PyMultitor no attribute socks_port

How do you use pymultitor with burp suite? Can anyone give me a rundown of what I'm doing wrong? I run pymultitor in terminal with

"pymultitor -lh 127.0.0.1 -lp 8080 --socks"

and I also configured and enabled a SOCKS proxy in Burp Suite with this same 127.0.0.1 address and 8080 port. However, I continuously get "Got error: 'NoneType' object has no attribute 'socks_port.' in Burp Suite's Intruder when sending out dictionary attack password guessing. Very frustrating. Any help would be appreciated! Thanks so much.

[bug] when lh 0.0.0.0 connection killed by mitm proxy

here the output to reproduce:

pymultitor -lh 0.0.0.0 -lp 8080 -a tor:pass

07-03-20 01:27:26 INFO Executing 2 Tor Processes
Loading script /usr/local/lib/python3.7/dist-packages/pymultitor.py
Proxy server listening at http://*:8080
1.1.1.1:64051: clientconnect
Client connection from 1.1.1.1 killed by block_global
1.1.1.1:64051: Connection killed
1.1.1.1:64051: clientdisconnect

Traceback (most recent call last):

Traceback (most recent call last):
File "pymultitor/examples/on_string/b.py", line 117, in
process = execute_pymultitor()
File "pymultitor/examples/on_string/b.py", line 23, in execute_pymultitor
pymultitor_module = imp.load_source('pymultitor', pymultitor_path)
File "c:\Python27\pymultitor\pymultitor.py", line 19, in
from mitmproxy.proxy import ProxyServer, ProxyConfig
File "c:\Python27\lib\site-packages\mitmproxy\proxy_init_.py", line 4, in <
module>
from .root_context import RootContext
File "c:\Python27\lib\site-packages\mitmproxy\proxy\root_context.py", line 8,
in
from mitmproxy import controller
File "c:\Python27\lib\site-packages\mitmproxy\controller.py", line 9, in
from mitmproxy import addons
File "c:\Python27\lib\site-packages\mitmproxy\addons_init_.py", line 3, in

from mitmproxy.addons import check_alpn
File "c:\Python27\lib\site-packages\mitmproxy\addons\check_alpn.py", line 2, i
n
from mitmproxy.net import tcp
File "c:\Python27\lib\site-packages\mitmproxy\net\tcp.py", line 987
print(u'-' * 40, file=fp)
^
SyntaxError: invalid syntax

NET::ERR_CERT_AUTHORITY_INVALID

Hello there.

  1. when i set these options:
    options_dict = { 'listen_host': "127.0.0.1", 'listen_port': 7000, 'ssl_insecure': True, 'mode': "regular", 'rawtcp': False, 'auth_singleuser': auth }
    i still get NET::ERR_CERT_AUTHORITY_INVALID when i try to visit every site i want to browse. according to mitmproxy source:
    except exceptions.ProtocolException as e: ... elif isinstance(e, exceptions.InvalidServerCertificate): self.log(str(e), "warn") self.log("Invalid certificate, closing connection. Pass --insecure to disable validation.", "warn")
    by setting ssl_insecure to True, these errors must vanish.
  2. I also tried to set my tor browser to use this proxy, but it refuses to connect. for the tbb i have set mitmproxy as a socks5 proxy instead of regular, and specified this socks5 proxy both inside the browser and with these environment variables below; but it does not work:
    SKIP_TOR_LAUNCH -> 1 TOR_SOCKS_PORT -> 7000
    Thanks in advance.

Invalid Syntax: Line 88 (running pymultitor.py directly as python2.)

Hi,

I'm having quite a few problems.

If I run pymultitor as python3, I get this list of errors...

https://imgur.com/a/hSBuVUG

However, by running the python file directly as python2, I only get a syntax error on line 88. No idea why or where to get started with fixing that

https://imgur.com/a/I6fgfUI

Attempting to run as sudo, re-installing all the requirements, restarting, all the basic, beginner-friendly stuff I've already attempted. Not seeing any changes or fixes though.

Thank you!

Add an --on-error-code option

For example, allow to call the tool as following:
pymultitor --on-error-code 429

In which case the IP will be changed once the server returns a 429 Too Many Requests response.

Got Unknown Error Missing dependencies for SOCKS support

Whenever I run the program I get this error after running "pymultitor -s --tor-cmd "C:/Tor/tor.exe" --on-count 25". I have requests and pysocks installed

07-07-17 02:34:56 ERROR Got Unknown Error Missing dependencies for SOCKS support.

Kali installation fails with: Failed building wheel for cryptography

Running Kali 4.13, up to date.

Prerequisites

  • Passed: A C compiler, Python headers, etc. (are needed to compile several dependencies). On Ubuntu / Kali, sudo apt-get install -y build-essential libssl-dev python-setuptools python-pip python-wheel python-dev
  • Passed: mitmproxy dependencies. On Ubuntu / Kali, sudo apt-get install -y libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg-dev zlib1g-dev
  • Passed : Tor: up to date

Installation

  • Passed: pip install -r requirements.txt
  • Failed: python setup.py install

.....
/usr/include/openssl/x509.h:552:6: note: expected โ€˜const X509_ALGOR ** {aka const struct X509_algor_st **}โ€™ but argument is of type โ€˜X509_ALGOR ** {aka struct X509_algor_st **}โ€™
void X509_get0_signature(const ASN1_BIT_STRING **psig,
^~~~~~~~~~~~~~~~~~~
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1


Failed building wheel for cryptography
Running setup.py clean for cryptography
Failed to build cryptography
Installing collected packages: cryptography, Pillow, hpack, h2, mitmproxy, editorconfig
Found existing installation: cryptography 1.9
Not uninstalling cryptography at /usr/lib/python2.7/dist-packages, outside environment /usr
Running setup.py install for cryptography ... error
Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-oXLRdR/cryptography/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-fmkYdy-record/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/cryptography
copying src/cryptography/init.py -> build/lib.linux-x86_64-2.7/cryptography
copying src/cryptography/utils.py -> build/lib.linux-x86_64-2.7/cryptography
copying src/cryptography/about.py -> build/lib.linux-x86_64-2.7/cryptography
copying src/cryptography/exceptions.py -> build/lib.linux-x86_64-2.7/cryptography
copying src/cryptography/fernet.py -> build/lib.linux-x86_64-2.7/cryptography
creating build/lib.linux-x86_64-2.7/cryptography/x509
copying src/cryptography/x509/oid.py -> build/lib.linux-x86_64-2.7/cryptography/x509
copying src/cryptography/x509/init.py -> build/lib.linux-x86_64-2.7/cryptography/x509
copying src/cryptography/x509/general_name.py -> build/lib.linux-x86_64-2.7/cryptography/x509
copying src/cryptography/x509/extensions.py -> build/lib.linux-x86_64-2.7/cryptography/x509
copying src/cryptography/x509/base.py -> build/lib.linux-x86_64-2.7/cryptography/x509
copying src/cryptography/x509/name.py -> build/lib.linux-x86_64-2.7/cryptography/x509
creating build/lib.linux-x86_64-2.7/cryptography/hazmat
copying src/cryptography/hazmat/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/cmac.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/keywrap.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/constant_time.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/serialization.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/hashes.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/padding.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
copying src/cryptography/hazmat/primitives/hmac.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/backends
copying src/cryptography/hazmat/backends/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends
copying src/cryptography/hazmat/backends/interfaces.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends
copying src/cryptography/hazmat/backends/multibackend.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings
copying src/cryptography/hazmat/bindings/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/utils.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/ec.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/dh.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/rsa.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/dsa.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
copying src/cryptography/hazmat/primitives/asymmetric/padding.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/asymmetric
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/utils.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/hotp.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/twofactor
copying src/cryptography/hazmat/primitives/twofactor/totp.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/twofactor
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/algorithms.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/base.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/ciphers
copying src/cryptography/hazmat/primitives/ciphers/modes.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/ciphers
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/interfaces
copying src/cryptography/hazmat/primitives/interfaces/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/interfaces
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/hkdf.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/kbkdf.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/concatkdf.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/pbkdf2.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
copying src/cryptography/hazmat/primitives/kdf/x963kdf.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/primitives/kdf
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/commoncrypto
copying src/cryptography/hazmat/backends/commoncrypto/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/commoncrypto
copying src/cryptography/hazmat/backends/commoncrypto/ciphers.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/commoncrypto
copying src/cryptography/hazmat/backends/commoncrypto/hashes.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/commoncrypto
copying src/cryptography/hazmat/backends/commoncrypto/backend.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/commoncrypto
copying src/cryptography/hazmat/backends/commoncrypto/hmac.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/commoncrypto
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/x509.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/cmac.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/utils.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ec.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/decode_asn1.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/ciphers.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/hashes.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/encode_asn1.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/rsa.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/dsa.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/backend.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
copying src/cryptography/hazmat/backends/openssl/hmac.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/backends/openssl
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/commoncrypto
copying src/cryptography/hazmat/bindings/commoncrypto/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/commoncrypto
copying src/cryptography/hazmat/bindings/commoncrypto/binding.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/commoncrypto
creating build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/openssl
copying src/cryptography/hazmat/bindings/openssl/init.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/openssl
copying src/cryptography/hazmat/bindings/openssl/_conditional.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/openssl
copying src/cryptography/hazmat/bindings/openssl/binding.py -> build/lib.linux-x86_64-2.7/cryptography/hazmat/bindings/openssl
running egg_info
writing requirements to src/cryptography.egg-info/requires.txt
writing src/cryptography.egg-info/PKG-INFO
writing top-level names to src/cryptography.egg-info/top_level.txt
writing dependency_links to src/cryptography.egg-info/dependency_links.txt
writing entry points to src/cryptography.egg-info/entry_points.txt
reading manifest file 'src/cryptography.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'docs/_build'
warning: no previously-included files matching '*' found under directory 'vectors'
writing manifest file 'src/cryptography.egg-info/SOURCES.txt'
running build_ext
generating cffi module 'build/temp.linux-x86_64-2.7/_padding.c'
creating build/temp.linux-x86_64-2.7
generating cffi module 'build/temp.linux-x86_64-2.7/_constant_time.c'
generating cffi module 'build/temp.linux-x86_64-2.7/_openssl.c'
building '_openssl' extension
creating build/temp.linux-x86_64-2.7/build
creating build/temp.linux-x86_64-2.7/build/temp.linux-x86_64-2.7
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-VlMpWk/python2.7-2.7.14=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c build/temp.linux-x86_64-2.7/_openssl.c -o build/temp.linux-x86_64-2.7/build/temp.linux-x86_64-2.7/_openssl.o
build/temp.linux-x86_64-2.7/_openssl.c:708:23: error: conflicting types for โ€˜ASN1_TIME_to_generalizedtimeโ€™
ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from build/temp.linux-x86_64-2.7/_openssl.c:517:0:
/usr/include/openssl/asn1.h:628:23: note: previous declaration of โ€˜ASN1_TIME_to_generalizedtimeโ€™ was here
ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_ASN1_STRING_dataโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:13445:3: warning: โ€˜ASN1_STRING_dataโ€™ is deprecated [-Wdeprecated-declarations]
return ASN1_STRING_data(x0);
^~~~~~
In file included from /usr/include/openssl/bn.h:31:0,
from /usr/include/openssl/asn1.h:24,
from build/temp.linux-x86_64-2.7/_openssl.c:517:
/usr/include/openssl/asn1.h:553:1: note: declared here
DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_ASN1_STRING_dataโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:13468:3: warning: โ€˜ASN1_STRING_dataโ€™ is deprecated [-Wdeprecated-declarations]
{ result = ASN1_STRING_data(x0); }
^
In file included from /usr/include/openssl/bn.h:31:0,
from /usr/include/openssl/asn1.h:24,
from build/temp.linux-x86_64-2.7/_openssl.c:517:
/usr/include/openssl/asn1.h:553:1: note: declared here
DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_f_bufferโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:14808:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_f_buffer();
^~~~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_f_bufferโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:14818:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_f_buffer(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_f_nullโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:14832:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_f_null();
^~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_f_nullโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:14842:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_f_null(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_s_fdโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16261:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_s_fd();
^~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_s_fdโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16271:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_s_fd(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_s_fileโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16285:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_s_file();
^~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_s_fileโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16295:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_s_file(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_s_memโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16309:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_s_mem();
^~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_s_memโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16319:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_s_mem(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_s_nullโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16333:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_s_null();
^~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_s_nullโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16343:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_s_null(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_BIO_s_socketโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16357:10: warning: return discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
return BIO_s_socket();
^~~~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_BIO_s_socketโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:16367:12: warning: assignment discards โ€˜constโ€™ qualifier from pointer target type [-Wdiscarded-qualifiers]
{ result = BIO_s_socket(); }
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_DTLSv1_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:22839:3: warning: โ€˜DTLSv1_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
return DTLSv1_client_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1632:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD DTLSv1_client_method(void)) / DTLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_DTLSv1_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:22849:3: warning: โ€˜DTLSv1_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = DTLSv1_client_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1632:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD DTLSv1_client_method(void)) / DTLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_DTLSv1_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:22863:3: warning: โ€˜DTLSv1_methodโ€™ is deprecated [-Wdeprecated-declarations]
return DTLSv1_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1630:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD DTLSv1_method(void)) / DTLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_DTLSv1_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:22873:3: warning: โ€˜DTLSv1_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = DTLSv1_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1630:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD DTLSv1_method(void)) / DTLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_DTLSv1_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:22887:3: warning: โ€˜DTLSv1_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
return DTLSv1_server_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1631:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD DTLSv1_server_method(void)) / DTLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_DTLSv1_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:22897:3: warning: โ€˜DTLSv1_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = DTLSv1_server_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1631:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD DTLSv1_server_method(void)) / DTLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_OPENSSL_configโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:39568:3: warning: โ€˜OPENSSL_configโ€™ is deprecated [-Wdeprecated-declarations]
OPENSSL_config(x0);
^~~~~~~~~~~~~~
In file included from /usr/include/openssl/x509_vfy.h:20:0,
from /usr/include/openssl/x509.h:309,
from /usr/include/openssl/cms.h:16,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/conf.h:92:1: note: declared here
DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_OPENSSL_configโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:39590:3: warning: โ€˜OPENSSL_configโ€™ is deprecated [-Wdeprecated-declarations]
{ OPENSSL_config(x0); }
^
In file included from /usr/include/openssl/x509_vfy.h:20:0,
from /usr/include/openssl/x509.h:309,
from /usr/include/openssl/cms.h:16,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/conf.h:92:1: note: declared here
DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_1_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52764:3: warning: โ€˜TLSv1_1_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_1_client_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1620:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_1_client_method(void)) / TLSv1.1 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_1_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52774:3: warning: โ€˜TLSv1_1_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_1_client_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1620:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_1_client_method(void)) / TLSv1.1 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_1_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52788:3: warning: โ€˜TLSv1_1_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_1_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1618:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_1_method(void)) / TLSv1.1 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_1_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52798:3: warning: โ€˜TLSv1_1_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_1_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1618:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_1_method(void)) / TLSv1.1 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_1_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52812:3: warning: โ€˜TLSv1_1_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_1_server_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1619:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_1_server_method(void)) / TLSv1.1 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_1_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52822:3: warning: โ€˜TLSv1_1_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_1_server_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1619:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_1_server_method(void)) / TLSv1.1 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_2_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52836:3: warning: โ€˜TLSv1_2_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_2_client_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1626:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_2_client_method(void)) / TLSv1.2 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_2_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52846:3: warning: โ€˜TLSv1_2_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_2_client_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1626:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_2_client_method(void)) / TLSv1.2 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_2_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52860:3: warning: โ€˜TLSv1_2_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_2_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1624:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_2_method(void)) / TLSv1.2 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_2_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52870:3: warning: โ€˜TLSv1_2_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_2_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1624:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_2_method(void)) / TLSv1.2 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_2_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52884:3: warning: โ€˜TLSv1_2_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_2_server_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1625:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_2_server_method(void)) / TLSv1.2 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_2_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52894:3: warning: โ€˜TLSv1_2_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_2_server_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1625:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_2_server_method(void)) / TLSv1.2 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52908:3: warning: โ€˜TLSv1_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_client_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1614:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_client_method(void)) / TLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_client_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52918:3: warning: โ€˜TLSv1_client_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_client_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1614:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_client_method(void)) / TLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52932:3: warning: โ€˜TLSv1_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1612:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_method(void)) / TLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52942:3: warning: โ€˜TLSv1_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1612:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_method(void)) / TLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_TLSv1_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52956:3: warning: โ€˜TLSv1_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
return TLSv1_server_method();
^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1613:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_server_method(void)) / TLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_TLSv1_server_methodโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:52966:3: warning: โ€˜TLSv1_server_methodโ€™ is deprecated [-Wdeprecated-declarations]
{ result = TLSv1_server_method(); }
^
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from build/temp.linux-x86_64-2.7/_openssl.c:601:
/usr/include/openssl/ssl.h:1613:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD TLSv1_server_method(void)) / TLSv1.0 */
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_X509_CRL_get_lastUpdateโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:54001:3: warning: โ€˜X509_CRL_get_lastUpdateโ€™ is deprecated [-Wdeprecated-declarations]
return X509_CRL_get_lastUpdate(x0);
^~~~~~
In file included from /usr/include/openssl/x509_vfy.h:20:0,
from /usr/include/openssl/x509.h:309,
from /usr/include/openssl/cms.h:16,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:708:1: note: declared here
DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_X509_CRL_get_lastUpdateโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:54024:3: warning: โ€˜X509_CRL_get_lastUpdateโ€™ is deprecated [-Wdeprecated-declarations]
{ result = X509_CRL_get_lastUpdate(x0); }
^
In file included from /usr/include/openssl/x509_vfy.h:20:0,
from /usr/include/openssl/x509.h:309,
from /usr/include/openssl/cms.h:16,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:708:1: note: declared here
DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_X509_CRL_get_nextUpdateโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:54037:3: warning: โ€˜X509_CRL_get_nextUpdateโ€™ is deprecated [-Wdeprecated-declarations]
return X509_CRL_get_nextUpdate(x0);
^~~~~~
In file included from /usr/include/openssl/x509_vfy.h:20:0,
from /usr/include/openssl/x509.h:309,
from /usr/include/openssl/cms.h:16,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:709:1: note: declared here
DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_X509_CRL_get_nextUpdateโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:54060:3: warning: โ€˜X509_CRL_get_nextUpdateโ€™ is deprecated [-Wdeprecated-declarations]
{ result = X509_CRL_get_nextUpdate(x0); }
^
In file included from /usr/include/openssl/x509_vfy.h:20:0,
from /usr/include/openssl/x509.h:309,
from /usr/include/openssl/cms.h:16,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:709:1: note: declared here
DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl))
^
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_d_X509_get0_signatureโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:59497:23: warning: passing argument 1 of โ€˜X509_get0_signatureโ€™ from incompatible pointer type [-Wincompatible-pointer-types]
X509_get0_signature(x0, x1, x2);
^~
In file included from /usr/include/openssl/cms.h:16:0,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:552:6: note: expected โ€˜const ASN1_BIT_STRING ** {aka const struct asn1_string_st **}โ€™ but argument is of type โ€˜ASN1_OCTET_STRING ** {aka struct asn1_string_st **}โ€™
void X509_get0_signature(const ASN1_BIT_STRING **psig,
^~~~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c:59497:27: warning: passing argument 2 of โ€˜X509_get0_signatureโ€™ from incompatible pointer type [-Wincompatible-pointer-types]
X509_get0_signature(x0, x1, x2);
^~
In file included from /usr/include/openssl/cms.h:16:0,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:552:6: note: expected โ€˜const X509_ALGOR ** {aka const struct X509_algor_st **}โ€™ but argument is of type โ€˜X509_ALGOR ** {aka struct X509_algor_st **}โ€™
void X509_get0_signature(const ASN1_BIT_STRING **psig,
^~~~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c: In function โ€˜_cffi_f_X509_get0_signatureโ€™:
build/temp.linux-x86_64-2.7/_openssl.c:59549:25: warning: passing argument 1 of โ€˜X509_get0_signatureโ€™ from incompatible pointer type [-Wincompatible-pointer-types]
{ X509_get0_signature(x0, x1, x2); }
^~
In file included from /usr/include/openssl/cms.h:16:0,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:552:6: note: expected โ€˜const ASN1_BIT_STRING ** {aka const struct asn1_string_st **}โ€™ but argument is of type โ€˜ASN1_OCTET_STRING ** {aka struct asn1_string_st **}โ€™
void X509_get0_signature(const ASN1_BIT_STRING **psig,
^~~~~~~~~~~~~~~~~~~
build/temp.linux-x86_64-2.7/_openssl.c:59549:29: warning: passing argument 2 of โ€˜X509_get0_signatureโ€™ from incompatible pointer type [-Wincompatible-pointer-types]
{ X509_get0_signature(x0, x1, x2); }
^~
In file included from /usr/include/openssl/cms.h:16:0,
from build/temp.linux-x86_64-2.7/_openssl.c:532:
/usr/include/openssl/x509.h:552:6: note: expected โ€˜const X509_ALGOR ** {aka const struct X509_algor_st **}โ€™ but argument is of type โ€˜X509_ALGOR ** {aka struct X509_algor_st **}โ€™
void X509_get0_signature(const ASN1_BIT_STRING **psig,
^~~~~~~~~~~~~~~~~~~
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------

Can't rollback cryptography, nothing uninstalled.
Command "/usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-oXLRdR/cryptography/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-fmkYdy-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-oXLRdR/cryptography/

[bug] does not fail safe and proxies request, leaking real ip

Hello,
This may be a repeat of the previous bug that I have filed, but I have installed pymultitor on the macOS Mojave 10.14.6 using "pip3 install pymultitor", installed tor with brew and get the following error during the start of the pymultitor and traffic is not tunneling through tor (getting real ip when querying https://ipinfo.io/ip):

Installation:

python3 -V
Python 3.7.6
pip3 install pymultitor
pymultitor -v
pymultitor 3.1.0
brew install tor
==> Pouring tor-0.4.2.6.mojave.bottle.tar.gz

Burp proxy sending GET request to https://ipinfo.io/ip and reply with a real address.

Error and log that request been handled by the pymultitor:

pymultitor -p 20 --on-count 1 --on-rst -lp 8085
Loading script /usr/local/lib/python3.7/site-packages/pymultitor.py
Addon error: Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/addonmanager.py", line 42, in safecall
    yield
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/addons/script.py", line 102, in loadscript
    ctx.master.addons.register(ns)
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/addonmanager.py", line 162, in register
    self.master.options.process_deferred()
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/optmanager.py", line 326, in process_deferred
    self.update(**update)
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/optmanager.py", line 225, in update
    u = self.update_known(**kwargs)
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/optmanager.py", line 216, in update_known
    self._options[k].set(v)
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/optmanager.py", line 57, in set
    typecheck.check_option_type(self.name, value, self.typespec)
  File "/usr/local/lib/python3.7/site-packages/mitmproxy/utils/typecheck.py", line 74, in check_option_type
    raise e
TypeError: Expected <class 'bool'> for on_rst, but got <class 'NoneType'>.

Proxy server listening at http://127.0.0.1:8085
127.0.0.1:52064: clientconnect
127.0.0.1:52064: GET https://ipinfo.io/ip
              << 200 OK 15b
127.0.0.1:52064: clientdisconnect

Stuck on Executing 2 Tor Processes

pymultitor
10-06-17 20:24:15 WARNING Change IP Configuration Not Set (Acting As Regular Tor Proxy)
10-06-17 20:24:15 INFO Executing 2 Tor Processes

and sometimes stuck on
10-06-17 20:26:27 DEBUG [51521] Tor Bootstrapped Line: Jun 10 20:26:27.000 [notice] Bootstrapped 0%: Starting
10-06-17 20:26:28 DEBUG [51521] Tor Bootstrapped Line: Jun 10 20:26:28.000 [notice] Bootstrapped 5%: Connecting to directory server
10-06-17 20:26:28 DEBUG [51521] Tor Bootstrapped Line: Jun 10 20:26:28.000 [notice] Bootstrapped 10%: Finishing handshake with directory server

ImportError: cannot import name 'HTTPResponse' from 'mitmproxy.http' (C:\lib\site-packages\mitmproxy\http.py)

hi gyse, i`m have problem:
Traceback (most recent call last):
File "C:\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\lib\runpy.py", line 86, in run_code
exec(code, run_globals)
File "C:\Scripts\pymultitor.exe_main
.py", line 4, in
File "C:\lib\site-packages\pymultitor.py", line 14, in
from mitmproxy.http import HTTPResponse
ImportError: cannot import name 'HTTPResponse' from 'mitmproxy.http' (C:\lib\site-packages\mitmproxy\http.py)

Error with lxml...

`Requirement already satisfied: stem>=1.5.4 in /usr/local/lib/python2.7/dist-packages (from -r requirements.txt (line 1))
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 2))
Requirement already satisfied: requests<2.12.0,>=2.9.1 in /usr/local/lib/python2.7/dist-packages (from -r requirements.txt (line 3))
Collecting mitmproxy<3.0.0,>=0.18.3 (from -r requirements.txt (line 4))
Using cached mitmproxy-0.18.3-py2.py3-none-any.whl
Requirement already satisfied: hyperframe<5,>=4.0.1 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: h2<2.5,>=2.4.1 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: Flask<0.12,>=0.10.1 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: tornado<4.5,>=4.3 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: configargparse<0.12,>=0.10 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: pyperclip<1.6,>=1.5.22 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: certifi>=2015.11.20.1 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: Pillow<3.5,>=3.2 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: watchdog<0.9,>=0.8.3 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: urwid<1.4,>=1.3.1 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: pyasn1<0.2,>=0.1.9 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: cssutils<1.1,>=1.0.1 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: passlib<1.7,>=1.6.5 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: click<7.0,>=6.2 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: html2text<=2016.9.19,>=2016.1.8 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: cryptography<1.6,>=1.3 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: construct<2.6,>=2.5.2 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Collecting lxml<=3.6.0,>=3.5.0 (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Using cached lxml-3.6.0.tar.gz
Requirement already satisfied: brotlipy<0.7,>=0.5.1 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: pyOpenSSL<17.0,>=16.0 in /usr/local/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: pyparsing<2.2,>=2.1.3 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: six<1.11,>=1.10 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Collecting blinker<1.5,>=1.4 (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: enum34<2,>=1.0.4; python_version == "2.7" in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: backports.ssl-match-hostname<3.6,>=3.5.0.1 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: typing==3.5.2.2; python_version == "2.7" in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: ipaddress<1.1,>=1.0.15; python_version == "2.7" in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: jsbeautifier<1.7,>=1.6.3 in /usr/lib/python2.7/dist-packages (from mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: hpack<3,>=2.2 in /usr/lib/python2.7/dist-packages (from h2<2.5,>=2.4.1->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: itsdangerous>=0.21 in /usr/lib/python2.7/dist-packages (from Flask<0.12,>=0.10.1->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: Werkzeug>=0.7 in /usr/lib/python2.7/dist-packages (from Flask<0.12,>=0.10.1->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: Jinja2>=2.4 in /usr/lib/python2.7/dist-packages (from Flask<0.12,>=0.10.1->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: PyYAML>=3.10 in /usr/lib/python2.7/dist-packages (from watchdog<0.9,>=0.8.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: argh>=0.24.1 in /usr/lib/python2.7/dist-packages (from watchdog<0.9,>=0.8.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: pathtools>=0.1.1 in /usr/lib/python2.7/dist-packages (from watchdog<0.9,>=0.8.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: setuptools>=11.3 in /usr/lib/python2.7/dist-packages (from cryptography<1.6,>=1.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: idna>=2.0 in /usr/local/lib/python2.7/dist-packages (from cryptography<1.6,>=1.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: cffi>=1.4.1 in /usr/local/lib/python2.7/dist-packages (from cryptography<1.6,>=1.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Collecting editorconfig>=0.12.0 (from jsbeautifier<1.7,>=1.6.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: MarkupSafe in /usr/lib/python2.7/dist-packages (from Jinja2>=2.4->Flask<0.12,>=0.10.1->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Requirement already satisfied: pycparser in /usr/local/lib/python2.7/dist-packages (from cffi>=1.4.1->cryptography<1.6,>=1.3->mitmproxy<3.0.0,>=0.18.3->-r requirements.txt (line 4))
Building wheels for collected packages: lxml
Running setup.py bdist_wheel for lxml ... error
Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-xuSjo_/lxml/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" bdist_wheel -d /tmp/tmplM7qMPpip-wheel- --python-tag cp27:
Building lxml version 3.6.0.
Building without Cython.
ERROR: /bin/sh: 1: xslt-config: not found

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/lxml
copying src/lxml/doctestcompare.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/ElementInclude.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/_elementpath.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/pyclasslookup.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/sax.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/builder.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/init.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/usedoctest.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/cssselect.py -> build/lib.linux-x86_64-2.7/lxml
creating build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/init.py -> build/lib.linux-x86_64-2.7/lxml/includes
creating build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/formfill.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/clean.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/html5parser.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/_setmixin.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/ElementSoup.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/_diffcommand.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/soupparser.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/defs.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/builder.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/init.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/_html5builder.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/usedoctest.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/diff.py -> build/lib.linux-x86_64-2.7/lxml/html
creating build/lib.linux-x86_64-2.7/lxml/isoschematron
copying src/lxml/isoschematron/init.py -> build/lib.linux-x86_64-2.7/lxml/isoschematron
copying src/lxml/lxml.etree.h -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/lxml.etree_api.h -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/uri.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/c14n.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xslt.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xinclude.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/relaxng.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/schematron.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/config.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/tree.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xpath.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/etree_defs.h -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-2.7/lxml/includes
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/rng
copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/rng
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
running build_ext
building 'lxml.etree' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/src
creating build/temp.linux-x86_64-2.7/src/lxml
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-HVkOs2/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Isrc/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
In file included from src/lxml/lxml.etree.c:320:0:
src/lxml/includes/etree_defs.h:14:31: fatal error: libxml/xmlversion.h: Aucun fichier ou dossier de ce type
#include "libxml/xmlversion.h"
^
compilation terminated.
Compile failed: command 'x86_64-linux-gnu-gcc' failed with exit status 1
creating tmp
cc -I/usr/include/libxml2 -c /tmp/xmlXPathInit4w6Pcr.c -o tmp/xmlXPathInit4w6Pcr.o
/tmp/xmlXPathInit4w6Pcr.c:1:26: fatal error: libxml/xpath.h: Aucun fichier ou dossier de ce type
#include "libxml/xpath.h"
^
compilation terminated.


Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?


error: command 'x86_64-linux-gnu-gcc' failed with exit status 1


Failed building wheel for lxml
Running setup.py clean for lxml
Failed to build lxml
Installing collected packages: lxml, blinker, mitmproxy, editorconfig
Found existing installation: lxml 3.6.4
Uninstalling lxml-3.6.4:
Successfully uninstalled lxml-3.6.4
Running setup.py install for lxml ... error
Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-xuSjo_/lxml/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-9ycHuu-record/install-record.txt --single-version-externally-managed --compile:
Building lxml version 3.6.0.
Building without Cython.
ERROR: /bin/sh: 1: xslt-config: not found

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/lxml
copying src/lxml/doctestcompare.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/ElementInclude.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/_elementpath.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/pyclasslookup.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/sax.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/builder.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/__init__.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/usedoctest.py -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/cssselect.py -> build/lib.linux-x86_64-2.7/lxml
creating build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/__init__.py -> build/lib.linux-x86_64-2.7/lxml/includes
creating build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/formfill.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/clean.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/html5parser.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/_setmixin.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/ElementSoup.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/_diffcommand.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/soupparser.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/defs.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/builder.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/__init__.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/_html5builder.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/usedoctest.py -> build/lib.linux-x86_64-2.7/lxml/html
copying src/lxml/html/diff.py -> build/lib.linux-x86_64-2.7/lxml/html
creating build/lib.linux-x86_64-2.7/lxml/isoschematron
copying src/lxml/isoschematron/__init__.py -> build/lib.linux-x86_64-2.7/lxml/isoschematron
copying src/lxml/lxml.etree.h -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/lxml.etree_api.h -> build/lib.linux-x86_64-2.7/lxml
copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/uri.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/c14n.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xslt.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xinclude.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/relaxng.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/schematron.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/config.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/tree.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xpath.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/etree_defs.h -> build/lib.linux-x86_64-2.7/lxml/includes
copying src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-2.7/lxml/includes
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/rng
copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/rng
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl
creating build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-x86_64-2.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1
running build_ext
building 'lxml.etree' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/src
creating build/temp.linux-x86_64-2.7/src/lxml
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-HVkOs2/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Isrc/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w
In file included from src/lxml/lxml.etree.c:320:0:
src/lxml/includes/etree_defs.h:14:31: fatal error: libxml/xmlversion.h: Aucun fichier ou dossier de ce type
 #include "libxml/xmlversion.h"
                               ^
compilation terminated.
Compile failed: command 'x86_64-linux-gnu-gcc' failed with exit status 1
cc -I/usr/include/libxml2 -c /tmp/xmlXPathInit7pYdNC.c -o tmp/xmlXPathInit7pYdNC.o
/tmp/xmlXPathInit7pYdNC.c:1:26: fatal error: libxml/xpath.h: Aucun fichier ou dossier de ce type
 #include "libxml/xpath.h"
                          ^
compilation terminated.
*********************************************************************************
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
*********************************************************************************
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------

Rolling back uninstall of lxml
Command "/usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-xuSjo_/lxml/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-9ycHuu-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-xuSjo_/lxml/
`

[bug] traffic does not go through tor

Hello,
Awesome tool, but something fails and traffic does not route through tor:

  1. running the installation on kali 2020.1

kali@kali ~> pip3 install pymultitor

Requirement already satisfied: pymultitor in ./.local/lib/python3.7/site-packages (3.1.0)
Requirement already satisfied: requests[socks]>=2.22.0 in /usr/lib/python3/dist-packages (from pymultitor) (2.22.0)
Requirement already satisfied: mitmproxy>=4.0.4 in /usr/lib/python3/dist-packages (from pymultitor) (4.0.4)
Requirement already satisfied: stem>=1.7.1 in /usr/lib/python3/dist-packages (from pymultitor) (1.7.1)
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/lib/python3/dist-packages (from requests[socks]>=2.22.0->pymultitor) (1.6.8)

kali@kali ~> /home/kali/.local/bin/pymultitor -v
pymultitor 3.1.0
kali@kali ~> python3 -V
Python 3.7.6
kali@kali ~>

  1. running pymultitor server:

kali@kali ~>
kali@kali ~> /home/kali/.local/bin/pymultitor --on-count 1 --tor-processes 1 -d

06-03-20 21:09:32 DEBUG    Running With CMD Args: {"http2_priority": false, "stream_large_bodies": null, "spoof_source_address": false, "server": true, "ciphers_client": null, "setheaders": [], "rfile": null, "scripts": ["/home/kali/.local/lib/python3.7/site-packages/pymultitor.py"], "onboarding_port": 80, "add_upstream_certs_to_client_chain": false, "rawtcp": false, "ssl_insecure": false, "keep_host_header": false, "tor_cmd": "tor", "body_size_limit": null, "server_replay_kill_extra": false, "dumper_filter": null, "onboarding": true, "ssl_verify_upstream_trusted_ca": null, "upstream_auth": null, "http2": true, "dumper_default_contentview": "auto", "on_string": "", "server_replay_refresh": true, "ssl_version_server": "secure", "readfile_filter": null, "stream_websockets": false, "tor_processes": 1, "anticomp": false, "server_replay_nopop": false, "server_replay": [], "listen_port": 8080, "upstream_cert": true, "mode": "regular", "server_replay_ignore_payload_params": [], "anticache": false, "keepserving": false, "stickyauth": null, "stickycookie": null, "on_rst": false, "block_global": true, "websocket": true, "upstream_bind_address": "", "listen_host": "127.0.0.1", "termlog_verbosity": "debug", "client_replay": [], "server_replay_ignore_host": false, "onboarding_host": "mitm.it", "replacements": [], "server_replay_use_headers": [], "save_stream_filter": null, "flow_detail": 2, "certs": [], "ciphers_server": null, "ssl_version_client": "secure", "proxyauth": null, "block_private": false, "save_stream_file": null, "server_replay_ignore_params": [], "on_regex": "", "tcp_hosts": [], "confdir": "~/.mitmproxy", "server_replay_ignore_content": false, "showhost": false, "client_certs": null, "on_count": 1, "ignore_hosts": [], "ssl_verify_upstream_trusted_confdir": null}
06-03-20 21:09:32 INFO     Executing 1 Tor Processes
06-03-20 21:09:32 DEBUG    [40731] Executing Tor Process
06-03-20 21:09:32 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:32.000 [notice] Bootstrapped 0% (starting): Starting
06-03-20 21:09:33 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:33.000 [notice] Bootstrapped 5% (conn): Connecting to a relay
06-03-20 21:09:34 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:34.000 [notice] Bootstrapped 10% (conn_done): Connected to a relay
06-03-20 21:09:34 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:34.000 [notice] Bootstrapped 14% (handshake): Handshaking with a relay
06-03-20 21:09:34 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:34.000 [notice] Bootstrapped 15% (handshake_done): Handshake with a relay done
06-03-20 21:09:34 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:34.000 [notice] Bootstrapped 20% (onehop_create): Establishing an encrypted directory connection
06-03-20 21:09:34 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:34.000 [notice] Bootstrapped 25% (requesting_status): Asking for networkstatus consensus
06-03-20 21:09:35 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:35.000 [notice] Bootstrapped 30% (loading_status): Loading networkstatus consensus
06-03-20 21:09:36 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:36.000 [notice] Bootstrapped 40% (loading_keys): Loading authority key certs
06-03-20 21:09:37 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:37.000 [notice] Bootstrapped 45% (requesting_descriptors): Asking for relay descriptors
06-03-20 21:09:38 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:38.000 [notice] Bootstrapped 50% (loading_descriptors): Loading relay descriptors
06-03-20 21:09:42 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:42.000 [notice] Bootstrapped 56% (loading_descriptors): Loading relay descriptors
06-03-20 21:09:43 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:43.000 [notice] Bootstrapped 63% (loading_descriptors): Loading relay descriptors
06-03-20 21:09:43 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:43.000 [notice] Bootstrapped 68% (loading_descriptors): Loading relay descriptors
06-03-20 21:09:43 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:43.000 [notice] Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits
06-03-20 21:09:44 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:44.000 [notice] Bootstrapped 80% (ap_conn): Connecting to a relay to build circuits
06-03-20 21:09:44 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:44.000 [notice] Bootstrapped 85% (ap_conn_done): Connected to a relay to build circuits
06-03-20 21:09:44 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:44.000 [notice] Bootstrapped 89% (ap_handshake): Finishing handshake with a relay to build circuits
06-03-20 21:09:45 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:45.000 [notice] Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits
06-03-20 21:09:45 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:45.000 [notice] Bootstrapped 95% (circuit_create): Establishing a Tor circuit
06-03-20 21:09:46 DEBUG    [40731] Tor Bootstrapped Line: Mar 06 21:09:46.000 [notice] Bootstrapped 100% (done): Done
06-03-20 21:09:46 DEBUG    [40731] Tor Process Executed Successfully
06-03-20 21:09:46 DEBUG    [40731] Creating Tor Controller
06-03-20 21:09:46 INFO     All Tor Processes Executed Successfully
Loading script /home/kali/.local/lib/python3.7/site-packages/pymultitor.py
Proxy server listening at http://127.0.0.1:8080
127.0.0.1:59200: clientconnect
127.0.0.1:59200: Set new server address: ipinfo.io:443
127.0.0.1:59200: serverconnect
  -> ('ipinfo.io', 443)
127.0.0.1:59200: Establish TLS with server
127.0.0.1:59200: ALPN selected by server: h2
127.0.0.1:59200: Establish TLS with client
127.0.0.1:59200: ALPN for client: b'h2'
127.0.0.1:59200: HTTP2 Event from client
  -> <RemoteSettingsChanged changed_settings:{ChangedSetting(setting=SettingCodes.MAX_CONCURRENT_STREAMS, original_value=None, new_value=100), ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE, original_value=65535, new_value=1073741824), ChangedSetting(setting=SettingCodes.ENABLE_PUSH, original_value=1, new_value=0)}>
127.0.0.1:59200: HTTP2 Event from client
  -> <WindowUpdated stream_id:0, delta:1073676289>
06-03-20 21:09:57 DEBUG    Decoding b'\x82\x04\x03/ip\x87A\x875f\xaaS\xaec\xffz\x88%\xb6P\xc3\xab\xb8\xea\xe0S\x03*/*'
06-03-20 21:09:57 DEBUG    Decoded 2, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded (b':method', b'GET'), consumed 1
06-03-20 21:09:57 DEBUG    Decoded 4, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded 3, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded (b':path', <memory at 0x7fa896d07390>), total consumed 5 bytes, indexed False
06-03-20 21:09:57 DEBUG    Decoded 7, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded (b':scheme', b'https'), consumed 1
06-03-20 21:09:57 DEBUG    Decoded 1, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded 7, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded (b':authority', b'ipinfo.io'), total consumed 9 bytes, indexed True
06-03-20 21:09:57 DEBUG    Decoded 58, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded 8, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded (b'user-agent', b'curl/7.67.0'), total consumed 10 bytes, indexed True
06-03-20 21:09:57 DEBUG    Decoded 19, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded 3, consumed 1 bytes
06-03-20 21:09:57 DEBUG    Decoded (b'accept', <memory at 0x7fa896d07460>), total consumed 5 bytes, indexed True
127.0.0.1:59200: HTTP2 Event from client
  -> <RequestReceived stream_id:1, headers:[(b':method', b'GET'), (b':path', b'/ip'), (b':scheme', b'https'), (b':authority', b'ipinfo.io'), (b'user-agent', b'curl/7.67.0'), (b'accept', b'*/*')]>
127.0.0.1:59200: HTTP2 Event from client
  -> <StreamEnded stream_id:1>
127.0.0.1:59200: HTTP2 Event from client
  -> <SettingsAcknowledged changed_settings:{}>
127.0.0.1:59200: request
  -> Request(GET ipinfo.io:443/ip)
06-03-20 21:09:57 DEBUG    Starting new HTTPS connection (1): ipinfo.io:443
06-03-20 21:09:58 ERROR    Got Unknown Error Invalid header name b':authority'
06-03-20 21:09:58 DEBUG    Counter Raised To The Configured Number
06-03-20 21:09:58 DEBUG    [40731] Changing Tor Identity
127.0.0.1:59200: HTTP2 Event from server
  -> <RemoteSettingsChanged changed_settings:{ChangedSetting(setting=SettingCodes.MAX_CONCURRENT_STREAMS, original_value=None, new_value=100), ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE, original_value=65535, new_value=1048576), ChangedSetting(setting=SettingCodes.MAX_HEADER_LIST_SIZE, original_value=None, new_value=16384)}>
06-03-20 21:09:58 DEBUG    HPACK encoding <generator object _secure_headers at 0x7fa896ce17d0>
06-03-20 21:09:58 DEBUG    Adding (b':scheme', b'https') to the header table
06-03-20 21:09:58 DEBUG    Encoding 7 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b':method', b'GET') to the header table
06-03-20 21:09:58 DEBUG    Encoding 2 with 7 bits
127.0.0.1:59200: HTTP2 Event from server
  -> <WindowUpdated stream_id:0, delta:983041>
127.0.0.1:59200: HTTP2 Event from client
  -> <SettingsAcknowledged changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE, original_value=65535, new_value=1048576), ChangedSetting(setting=SettingCodes.MAX_CONCURRENT_STREAMS, original_value=100, new_value=100), ChangedSetting(setting=SettingCodes.MAX_HEADER_LIST_SIZE, original_value=65536, new_value=16384)}>
127.0.0.1:59200: HTTP2 Event from server
  -> <SettingsAcknowledged changed_settings:{ChangedSetting(setting=SettingCodes.ENABLE_PUSH, original_value=1, new_value=0), ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE, original_value=65535, new_value=1073741824), ChangedSetting(setting=SettingCodes.MAX_CONCURRENT_STREAMS, original_value=100, new_value=100)}>
127.0.0.1:59200: HTTP2 Event from server
  -> <SettingsAcknowledged changed_settings:{}>
06-03-20 21:09:58 DEBUG    Adding (b':path', b'/ip') to the header table
06-03-20 21:09:58 DEBUG    Encoding 4 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 3 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b':authority', b'ipinfo.io') to the header table
06-03-20 21:09:58 DEBUG    Encoding 1 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 7 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'user-agent', b'curl/7.67.0') to the header table
06-03-20 21:09:58 DEBUG    Encoding 58 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 8 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'accept', b'*/*') to the header table
06-03-20 21:09:58 DEBUG    Encoding 19 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 3 with 7 bits
06-03-20 21:09:58 DEBUG    Encoded header block to b'\x87\x82D\x83`\xd5\xffA\x875f\xaaS\xaec\xffz\x88%\xb6P\xc3\xab\xb8\xea\xe0S\x83\xf9c\xe7'
06-03-20 21:09:58 DEBUG    Decoding b"\x88\x00\x83\x90i/\x96\xdc4\xfd(\x07T\xd0;\x14\x10\x04\x05\x00+\x80~\xe3o)\x8bF\xff_\x92I|\xa5\x89\xd3M\x1fj\x12q\xd8\x82\xa6\x0bS*\xcf\x7f\\\x0214@\x8f\xf2\xb1(=\xb2,\x9b\x06B\xacC\xd4\x92\xf9O\xa5\x0c\xb2\xc8\x12\xbe\xe8^\x91\xb9c\x96X\xdd\x10Ze\xf6\x82!\xb2\x07\x89\x1b\r4\x00\xb6\xf3\x8d\xb6\xf8\x00\x17_\x08\x9c\x07T\x01*@\x8b\xf2\xb4\xb6\x0e\x92\xacz\xd2c\xd4\x8f\x04DENY@\x8c\xf2\xb7\x94!j\xec:JD\x98\xf5\x7f\x8a\x0f\xda\x94\x9eB\xc1\x1d\x07'_@\x90\xf2\xb1\x0fRKRVO\xaa\xca\xb1\xebI\x8fR?\x85\xa8\xe8\xa8\xd2\xcb@\x8b\xb0\xb2\x96\xcb\x0bb\xd5\x9e\x83\x13\xd7\x96Bl1\x12\xb1\xec4\xc6\xa9o\x13\x96\xa5\x89a\xd0\x85\x8fa\xa65_|\x87\n\xe1Rc\x9ej\x0b"
06-03-20 21:09:58 DEBUG    Decoded 8, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b':status', b'200'), consumed 1
06-03-20 21:09:58 DEBUG    Decoded 3, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 22, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'date', b'Sat, 07 Mar 2020 02:09:58 GMT'), total consumed 28 bytes, indexed False
06-03-20 21:09:58 DEBUG    Decoded 31, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 18, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'content-type', b'text/html; charset=utf-8'), total consumed 20 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 28, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 2, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'content-length', <memory at 0x7fa896d071f0>), total consumed 4 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 15, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 37, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'x-cloud-trace-context', b'1ffd1e9718d5fbffb721439412a308cb/4401586559001791260'), total consumed 55 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 20, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 1, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'access-control-allow-origin', <memory at 0x7fa896d072c0>), total consumed 3 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 11, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 4, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'x-frame-options', <memory at 0x7fa896d07530>), total consumed 18 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 12, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 10, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'x-xss-protection', b'1; mode=block'), total consumed 25 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 16, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 5, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'x-content-type-options', b'nosniff'), total consumed 24 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 11, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 22, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'referrer-policy', b'strict-origin-when-cross-origin'), total consumed 36 bytes, indexed True
06-03-20 21:09:58 DEBUG    Decoded 60, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded 7, consumed 1 bytes
06-03-20 21:09:58 DEBUG    Decoded (b'via', b'1.1 google'), total consumed 9 bytes, indexed True
127.0.0.1:59200: HTTP2 Event from server
  -> <ResponseReceived stream_id:1, headers:[(b':status', b'200'), (b'date', b'Sat, 07 Mar 2020 02:09:58 GMT'), (b'content-type', b'text/html; charset=utf-8'), (b'content-length', b'14'), (b'x-cloud-trace-context', b'1ffd1e9718d5fbffb721439412a308cb/4401586559001791260'), (b'access-control-allow-origin', b'*'), (b'x-frame-options', b'DENY'), (b'x-xss-protection', b'1; mode=block'), (b'x-content-type-options', b'nosniff'), (b'referrer-policy', b'strict-origin-when-cross-origin'), (b'via', b'1.1 google')]>
127.0.0.1:59200: HTTP2 Event from server
  -> <DataReceived stream_id:1, flow_controlled_length:14, data:3137332e3234342e34342e39380a>
127.0.0.1:59200: HTTP2 Event from server
  -> <DataReceived stream_id:1, flow_controlled_length:0, data:>
127.0.0.1:59200: HTTP2 Event from server
  -> <StreamEnded stream_id:1>
127.0.0.1:59200: HTTP2 Event from server
  -> <PingReceived ping_data:0000000000000000>
127.0.0.1:59200: response
  -> Response(200 , text/html; charset=utf-8, 14b)
127.0.0.1:59200: GET https://ipinfo.io/ip HTTP/2.0
    :authority: ipinfo.io
    user-agent: curl/7.67.0
    accept: */*
 << 200  14b
    date: Sat, 07 Mar 2020 02:09:58 GMT
    content-type: text/html; charset=utf-8
    content-length: 14
    x-cloud-trace-context: 1ffd1e9718d5fbffb721439412a308cb/4401586559001791260
    access-control-allow-origin: *
    x-frame-options: DENY
    x-xss-protection: 1; mode=block
    x-content-type-options: nosniff
    referrer-policy: strict-origin-when-cross-origin
    via: 1.1 google
06-03-20 21:09:58 DEBUG    HPACK encoding <generator object _secure_headers at 0x7fa896ce17d0>
06-03-20 21:09:58 DEBUG    Adding (b':status', b'200') to the header table
06-03-20 21:09:58 DEBUG    Encoding 8 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'date', b'Sat, 07 Mar 2020 02:09:58 GMT') to the header table
06-03-20 21:09:58 DEBUG    Encoding 33 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 22 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'content-type', b'text/html; charset=utf-8') to the header table
06-03-20 21:09:58 DEBUG    Encoding 31 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 18 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'content-length', b'14') to the header table
06-03-20 21:09:58 DEBUG    Encoding 28 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 2 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'x-cloud-trace-context', b'1ffd1e9718d5fbffb721439412a308cb/4401586559001791260') to the header table
06-03-20 21:09:58 DEBUG    Encoding 15 with 7 bits
06-03-20 21:09:58 DEBUG    Encoding 37 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'access-control-allow-origin', b'*') to the header table
06-03-20 21:09:58 DEBUG    Encoding 20 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 1 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'x-frame-options', b'DENY') to the header table
06-03-20 21:09:58 DEBUG    Encoding 11 with 7 bits
06-03-20 21:09:58 DEBUG    Encoding 4 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'x-xss-protection', b'1; mode=block') to the header table
06-03-20 21:09:58 DEBUG    Encoding 12 with 7 bits
06-03-20 21:09:58 DEBUG    Encoding 10 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'x-content-type-options', b'nosniff') to the header table
06-03-20 21:09:58 DEBUG    Encoding 16 with 7 bits
06-03-20 21:09:58 DEBUG    Encoding 5 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'referrer-policy', b'strict-origin-when-cross-origin') to the header table
06-03-20 21:09:58 DEBUG    Encoding 11 with 7 bits
06-03-20 21:09:58 DEBUG    Encoding 22 with 7 bits
06-03-20 21:09:58 DEBUG    Adding (b'via', b'1.1 google') to the header table
06-03-20 21:09:58 DEBUG    Encoding 60 with 6 bits
06-03-20 21:09:58 DEBUG    Encoding 7 with 7 bits
06-03-20 21:09:58 DEBUG    Encoded header block to b"\x88a\x96\xdc4\xfd(\x07T\xd0;\x14\x10\x04\x05\x00+\x80~\xe3o)\x8bF\xff_\x92I|\xa5\x89\xd3M\x1fj\x12q\xd8\x82\xa6\x0bS*\xcf\x7f\\\x82\x0b_@\x8f\xf2\xb1(=\xb2,\x9b\x06B\xacC\xd4\x92\xf9O\xa5\x0c\xb2\xc8\x12\xbe\xe8^\x91\xb9c\x96X\xdd\x10Ze\xf6\x82!\xb2\x07\x89\x1b\r4\x00\xb6\xf3\x8d\xb6\xf8\x00\x17_\x08\x9c\x07T\x81\xf9@\x8b\xf2\xb4\xb6\x0e\x92\xacz\xd2c\xd4\x8f\x84\xbf\x83O?@\x8c\xf2\xb7\x94!j\xec:JD\x98\xf5\x7f\x8a\x0f\xda\x94\x9eB\xc1\x1d\x07'_@\x90\xf2\xb1\x0fRKRVO\xaa\xca\xb1\xebI\x8fR?\x85\xa8\xe8\xa8\xd2\xcb@\x8b\xb0\xb2\x96\xcb\x0bb\xd5\x9e\x83\x13\xd7\x96Bl1\x12\xb1\xec4\xc6\xa9o\x13\x96\xa5\x89a\xd0\x85\x8fa\xa65_|\x87\n\xe1Rc\x9ej\x0b"
127.0.0.1:59200: serverdisconnect
  -> ('ipinfo.io', 443)
127.0.0.1:59200: clientdisconnect
^C06-03-20 21:10:03 DEBUG    [40731] Destroying Tor
kali@kali ~>  

  1. running curl to test IP, and it shows that direct curl and curl using proxychains4 is the same

kali@kali ~> curl -k https://ipinfo.io/ip
173.244.44.98
kali@kali ~> proxychains4 curl -k https://ipinfo.io/ip

[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Random chain  ...  127.0.0.1:8080  ...  ipinfo.io:443  ...  OK

173.244.44.98
kali@kali ~> curl -k https://ipinfo.io/ip

pymultitor line 347 request erro

Hello I have a problem how can I fix this error?

127.0.0.1:51182: GET http://httpbin.org/ip
<< 200 OK 33b
127.0.0.1:51182: clientdisconnect
127.0.0.1:51184: clientconnect
15-01-21 17:49:24 ERROR Got Unknown Error 'NoneType' object has no attribute 'socks_port'
Addon error: Traceback (most recent call last):
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/PyMultitor-3.2.0-py3.6.egg/pymultitor.py", line 347, in request
self.multitor.new_identity()
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/PyMultitor-3.2.0-py3.6.egg/pymultitor.py", line 179, in new_identity
self.current.newnym()
AttributeError: 'NoneType' object has no attribute 'newnym'

PyInstaller Error

Hello there!
First, i must appreciate the work you have done here, it is amazing.
Second, is it possible to produce binary from this package using pyinstaller?
I did this: pyinstaller pymultitor.py and it goes OK; but when i run the executable on my windows 7 x64 machine, the result is:
Traceback (most recent call last): File "pymultitor.py", line 33, in <module> File "c:\users\sadra\appdata\local\temp\pip-install-iuvvcz\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 396, in load_module File "site-packages\mitmproxy\flow\__init__.py", line 5, in <module> File "c:\users\sadra\appdata\local\temp\pip-install-iuvvcz\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 396, in load_module File "site-packages\mitmproxy\flow\master.py", line 15, in <module> File "c:\users\sadra\appdata\local\temp\pip-install-iuvvcz\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 396, in load_module File "site-packages\mitmproxy\onboarding\app.py", line 12, in <module> File "site-packages\netlib\utils.py", line 75, in path ValueError: dataPath: C:\Users\SADRA\AppData\Local\Temp\_MEI57~1\mitmproxy\onboarding/templates does not exist. [6124] Failed to execute script pymultitor
I went through the release section of mitm proxy and back in there i saw some hooks provided for the pyinstaller: https://github.com/mitmproxy/mitmproxy/tree/master/release/hooks
i used these hooks along with pyinstaller:
pyinstaller --additional-hooks-dir=. pymultitor.py
and the process failed with this error:
Traceback (most recent call last): File "<string>", line 2, in <module> ImportError: No module named windivert_dll Traceback (most recent call last): File "d:\anaconda2\lib\runpy.py", line 174, in _run_module_as_main "__main__", fname, loader, pkg_name) File "d:\anaconda2\lib\runpy.py", line 72, in _run_code exec code in run_globals File "D:\Anaconda2\Scripts\pyinstaller.exe\__main__.py", line 9, in <module> File "d:\anaconda2\lib\site-packages\PyInstaller\__main__.py", line 94, in run run_build(pyi_config, spec_file, **vars(args)) File "d:\anaconda2\lib\site-packages\PyInstaller\__main__.py", line 46, in run_build PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) File "d:\anaconda2\lib\site-packages\PyInstaller\building\build_main.py", line 791, in main build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build')) File "d:\anaconda2\lib\site-packages\PyInstaller\building\build_main.py", line 737, in build exec(text, spec_namespace) File "<string>", line 16, in <module> File "d:\anaconda2\lib\site-packages\PyInstaller\building\build_main.py", line 213, in __init__ self.__postinit__() File "d:\anaconda2\lib\site-packages\PyInstaller\building\datastruct.py", line 161, in __postinit__ self.assemble() File "d:\anaconda2\lib\site-packages\PyInstaller\building\build_main.py", line 472, in assemble module_hook.post_graph() File "d:\anaconda2\lib\site-packages\PyInstaller\building\imphook.py", line 410, in post_graph self._load_hook_module() File "d:\anaconda2\lib\site-packages\PyInstaller\building\imphook.py", line 377, in _load_hook_module self.hook_module_name, self.hook_filename) File "d:\anaconda2\lib\site-packages\PyInstaller\hooks\hook-pydivert.py", line 3, in <module> datas = collect_data_files('pydivert.windivert_dll') File "d:\anaconda2\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 720, in collect_data_files pkg_base, pkg_dir = get_package_paths(package) File "d:\anaconda2\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 530, in get_package_paths file_attr = get_module_file_attribute(package) File "d:\anaconda2\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 336, in get_module_file_attribute raise ImportError ImportError
Have you tried building binary out of pymultitor?
in case you did, i will appreciate sharing the experience, especially for windows machine.
Thanks in advance.

TCP RST.

If and when for whatever reason theres a TCP reset (error - Got TCP Rst, While TCP Rst Not Configured), it still proceeds to do a request instead of trying to assign a new identity. This should be changed to drop the connection before the request is made and assign a new tor ip, otherwise it exposes the ip.

async requests

Hi,

Thanks for this tool.

Curious - is it possible to implement something like asyncio to do concurrent requests at the same time, therefore increasing speed?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.