Get Your Localhost Online - Ngrok Alternative

Related tags

Networkingjprq
Overview

JPRQ - Ngrok Alternative

IMPORTANT: JPRQ is temporarily disabled due to usage for phishing.

Get Your Localhost Online and HTTPS

jprq demo

How JPRQ is different from Ngrok?

  • JPRQ is a free and open-source Ngrok alternative to expose local servers online easily.
  • It allows developers to serve unlimited requests to the local server compared to Ngrok's 40 requests/minute limit.
  • It can expose multiple ports at the same time compared to Ngrok with 1 port limit.

How to install

$ pip install jprq

How to use

Replace 8000 with the port you want to expose

$ jprq 8000

Press Ctrl+C to stop it

[NEW] Custom Subdomain

Replace subdomain with a subdomain you want

$ jprq 8000 -s=subdomain

How to uninstall

$ pip uninstall jprq

How JPRQ Works


JPRQ's Server-side implementation in Golang:

https://github.com/azimjohn/jprq.io

Limitations

  • Cannot expose WebSocket
  • Doesn't work with HTTP Polling

Troubleshooting

  • With serving React, Vue or any other modern web apps, make sure you run production server or build the app and serve static files as JPRQ is not capable of exposing Websocket.
Comments
  • How to Install on Windows?

    How to Install on Windows?

    Hey, yesterday I found this project and I wanted to install this on my computer which is Windows 10, but can't and was getting build errors, even when I install Visual C++ tools? Can anyone tell me how to install this on Windows? This is what I got as an error->

      ERROR: Command errored out with exit status 1:
       command: 'e:\python_important\python.exe' 'e:\python_important\lib\site-packages\pip\_vendor\pep517\_in_process.py' build_wheel 'C:\Users\HP\AppData\Local\Temp\tmpodhipo3z'
           cwd: C:\Users\HP\AppData\Local\Temp\pip-install-l7lksmk7\multidict_419d5fdeacfd40ab9f1244168d03a4b2
      Complete output (40 lines):
      **********************
      * Accellerated build *
      **********************
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-3.9
      creating build\lib.win-amd64-3.9\multidict
      copying multidict\_abc.py -> build\lib.win-amd64-3.9\multidict
      copying multidict\_compat.py -> build\lib.win-amd64-3.9\multidict
      copying multidict\_multidict_base.py -> build\lib.win-amd64-3.9\multidict
      copying multidict\_multidict_py.py -> build\lib.win-amd64-3.9\multidict
      copying multidict\__init__.py -> build\lib.win-amd64-3.9\multidict
      running egg_info
      writing multidict.egg-info\PKG-INFO
      writing dependency_links to multidict.egg-info\dependency_links.txt
      writing top-level names to multidict.egg-info\top_level.txt
      reading manifest file 'multidict.egg-info\SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files found matching 'multidict\_multidict.html'
      warning: no previously-included files found matching 'multidict\*.so'
      warning: no previously-included files found matching 'multidict\*.pyd'
      warning: no previously-included files found matching 'multidict\*.pyd'
      no previously-included directories found matching 'docs\_build'
      writing manifest file 'multidict.egg-info\SOURCES.txt'
      copying multidict\__init__.pyi -> build\lib.win-amd64-3.9\multidict
      copying multidict\_multidict.c -> build\lib.win-amd64-3.9\multidict
      copying multidict\py.typed -> build\lib.win-amd64-3.9\multidict
      creating build\lib.win-amd64-3.9\multidict\_multilib
      copying multidict\_multilib\defs.h -> build\lib.win-amd64-3.9\multidict\_multilib
      copying multidict\_multilib\dict.h -> build\lib.win-amd64-3.9\multidict\_multilib
      copying multidict\_multilib\istr.h -> build\lib.win-amd64-3.9\multidict\_multilib
      copying multidict\_multilib\iter.h -> build\lib.win-amd64-3.9\multidict\_multilib
      copying multidict\_multilib\pair_list.h -> build\lib.win-amd64-3.9\multidict\_multilib
      copying multidict\_multilib\views.h -> build\lib.win-amd64-3.9\multidict\_multilib
      running build_ext
      building 'multidict._multidict' extension
      error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      ----------------------------------------
      ERROR: Failed building wheel for multidict
    Failed to build multidict
    ERROR: Could not build wheels for multidict which use PEP 517 and cannot be installed directly
    
    opened by Krrishdhaneja 10
  • Error showing when trying to connect to jprq!

    Error showing when trying to connect to jprq!

    When I try to run jprq http tunnel command following error is generated:

    raise InvalidStatusCode(status_code) websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 403

    Seems like certificate is expired can you please check this?

    Thanks, Paras

    opened by parasarora15 8
  • Self host server

    Self host server

    Hi there,

    I'm currently having a look at your solution. Seems to be a great alternative to localtunnel or ngrok.

    I'm missing any info/steps how to actually deploy self hosted service?

    I do have a devops skills, I'd like to run it later on as a docker container (can share files with you), but first I need to understand how to deploy and use it as self hosted solution.

    Thank you!

    opened by rsurgiewicz 5
  • Binaries don’t support subdomain

    Binaries don’t support subdomain

    How tu use subdomain with binaries ?

    I tried this:

    [email protected]:~ $ ./jprq-linux-arm Usage: jprq Supported Protocols: [tcp, http] Optional Argument: -subdomain Client Version: 1.0.0

    [email protected]:~ $ ./jprq-linux-arm http 4736 -subdomain toto Tunnel Status: Online Forwarded: pi.jprq.io → 127.0.0.1:4736

    [email protected]:~ $ ./jprq-linux-arm http 4736 -subdomain=toto Tunnel Status: Online Forwarded: pi.jprq.io → 127.0.0.1:4736

    Thank you and Happy New Year

    opened by YannBouyeron 4
  • Throwing 504 Gateway Time-out when hosted from cloud provider (gcp)

    Throwing 504 Gateway Time-out when hosted from cloud provider (gcp)

    I tried locally. It works like a charm. Thanks for this. But if i deploy on cloud instance it throws error 504 Gateway Time-out and on console below error:

    [email protected]:~$ jprq 3333
    Online at https://user-1.jprq.live/
    Error Processing Request At: /
    Error Processing Request At: /
    

    I understand jprq is to get localhost online but just trying to understand why this error when hosted from gcp instance. I have 80 tcp port whitelisted and running as root as well. Can you please help ?

    opened by VinayKadalagi 4
  • Deceptive Site

    Deceptive Site

    Google has identified jprq.io as a deceptive site and it doesn't open in major browsers.

    And DNS stopped working for jprq.io too, so it won't be able to accept webhook requests either. I have submitted it for a review in the google search console, it will take a few days to get back online.

    I am trying to find ways how others to cope with this issue, found about Public Suffix Domains list. I will submit jprq.io to it as soon as DNS block gets lifted.

    Screen Shot 2021-03-31 at 17 57 26
    opened by azimjohn 4
  • Not an issue more like discussion!

    Not an issue more like discussion!

    How are you hosting jprq.io? What I mean to say is details of jprq.io hosting provider.

    P.S. I know it's the question to put in jprq.io but I don't understand golang fully so asking here.

    opened by 0x44454c 4
  • SSL certificate expired error while trying to start TCP tunnelling.

    SSL certificate expired error while trying to start TCP tunnelling.

    I was trying start TCP tunnel that work totally fine yesterday but today I tried again and I got this error. Please help me. Sorry for my bad English.

    opened by StrOrx12 3
  • Error Connecting to jprq

    Error Connecting to jprq

    Hello,

    The certificate seems to be expired so jprq is giving error when trying to connect to it. websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 502 Can you please look into it.

    Appreciate your help.

    opened by parasarora15 3
  • Error in connecting to jprq

    Error in connecting to jprq

    getting this error when trying to run JPRQ can you please look into it: websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 502

    opened by parasarora15 3
  • error

    error

    nohup: ignoring input Online at https://conpedrinha.jprq.live/ POST /slack/documentos 200 POST /slack/documento_assinado 200 POST /slack/documento_assinado 200 POST /slack/documento_assinado 200 POST /slack/documento_assinado 200 Traceback (most recent call last): File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 827, in transfer_data message = await self.read_message() File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 895, in read_message frame = await self.read_data_frame(max_size=self.max_size) File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 971, in read_data_frame frame = await self.read_frame(max_size) File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 1047, in read_frame frame = await Frame.read( File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/framing.py", line 105, in read data = await reader(2) File "/usr/lib/python3.8/asyncio/streams.py", line 723, in readexactly await self._wait_for_data('readexactly') File "/usr/lib/python3.8/asyncio/streams.py", line 517, in _wait_for_data await self._waiter asyncio.exceptions.CancelledError

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/home/ubuntu/.local/bin/jprq", line 8, in sys.exit(main()) File "/home/ubuntu/.local/lib/python3.8/site-packages/jprq/main.py", line 29, in main loop.run_until_complete( File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete return future.result() File "/home/ubuntu/.local/lib/python3.8/site-packages/jprq/tunnel.py", line 22, in open_tunnel message = json.loads(await websocket.recv()) File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 509, in recv await self.ensure_open() File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 812, in ensure_open raise self.connection_closed_exc() websockets.exceptions.ConnectionClosedError: code = 1006 (connection closed abnormally [internal]), no reason

    Online at https://conpecone.jprq.live/ POST /slack/disponibilidade 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 POST /slack/actions 200 Traceback (most recent call last): File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 827, in transfer_data message = await self.read_message() File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 895, in read_message frame = await self.read_data_frame(max_size=self.max_size) File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 971, in read_data_frame frame = await self.read_frame(max_size) File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 1047, in read_frame frame = await Frame.read( File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/framing.py", line 105, in read data = await reader(2) File "/usr/lib/python3.8/asyncio/streams.py", line 723, in readexactly await self._wait_for_data('readexactly') File "/usr/lib/python3.8/asyncio/streams.py", line 517, in _wait_for_data await self._waiter asyncio.exceptions.CancelledError

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/home/ubuntu/.local/bin/jprq", line 8, in sys.exit(main()) File "/home/ubuntu/.local/lib/python3.8/site-packages/jprq/main.py", line 29, in main loop.run_until_complete( File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete return future.result() File "/home/ubuntu/.local/lib/python3.8/site-packages/jprq/tunnel.py", line 22, in open_tunnel message = json.loads(await websocket.recv()) File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 509, in recv await self.ensure_open() File "/home/ubuntu/.local/lib/python3.8/site-packages/websockets/protocol.py", line 812, in ensure_open raise self.connection_closed_exc() websockets.exceptions.ConnectionClosedError: code = 1006 (connection closed abnormally [internal]), no reason

    opened by JonasCardoso 3
  • when will JPRQ be up again

    when will JPRQ be up again

    thank you for the phenomenal effort in releasing this amazing library - right now, jprq http 8000 gives the error:

    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
    socket.gaierror: [Errno 8] nodename nor servname provided, or not known
    

    when do you think JPRQ will be operational again?

    thank you

    opened by 99snowleopards 3
  • TCP tunnel is created but connection is not establishing.

    TCP tunnel is created but connection is not establishing.

    Error is like while making connection

    TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

    My tcp config for nginx is like

    server { server_name tcp.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /_ws/ { include proxy_params; proxy_pass http://localhost:4500; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
    

    } location / { include proxy_params; proxy_pass http://localhost:4500; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; }

    server { server_name tcp.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /_ws/ { include proxy_params; proxy_pass http://localhost:4500; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
    

    } location / { include proxy_params; proxy_pass http://localhost:4500; } listen 80; }

    opened by nilpatel9099sn 0
  • SSL certificate verify failed: certificate has expired

    SSL certificate verify failed: certificate has expired

    File "jprq\tunnel_tcp.py", line 22, in open_tcp_tunnel File "websockets\legacy\client.py", line 633, in aenter File "websockets\legacy\client.py", line 650, in await_impl_timeout File "asyncio\tasks.py", line 483, in wait_for File "websockets\legacy\client.py", line 654, in await_impl File "asyncio\base_events.py", line 1050, in create_connection File "asyncio\base_events.py", line 1080, in _create_connection_transport File "asyncio\sslproto.py", line 529, in data_received File "asyncio\sslproto.py", line 189, in feed_ssldata File "ssl.py", line 944, in do_handshake ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)

    opened by DaryeDev 6
  • InvalidStatusCode(status_code) websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 502

    InvalidStatusCode(status_code) websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 502

    I used this lib a while ago, simply perfect, went to use today and started having this problem. What happened?

    jprq.version '2.1.0'

    Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\ProgramData\Anaconda3\lib\runpy.py", line 87, in run_code exec(code, run_globals) File "C:\ProgramData\Anaconda3\lib\site-packages\jprq_main.py", line 5, in main() File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1128, in call return self.main(*args, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1053, in main rv = self.invoke(ctx) File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1659, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1395, in invoke return ctx.invoke(self.callback, **ctx.params) File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 754, in invoke return __callback(*args, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\jprq\main.py", line 42, in http loop.run_until_complete( File "C:\ProgramData\Anaconda3\lib\asyncio\base_events.py", line 642, in run_until_complete return future.result() File "C:\ProgramData\Anaconda3\lib\site-packages\jprq\tunnel_http.py", line 16, in open_http_tunnel async with websockets.connect(ws_uri, ssl=ssl_context) as websocket: File "C:\Users\bueno\AppData\Roaming\Python\Python39\site-packages\websockets\legacy\client.py", line 604, in aenter return await self File "C:\Users\bueno\AppData\Roaming\Python\Python39\site-packages\websockets\legacy\client.py", line 629, in await_impl await protocol.handshake( File "C:\Users\bueno\AppData\Roaming\Python\Python39\site-packages\websockets\legacy\client.py", line 388, in handshake raise InvalidStatusCode(status_code) websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 502

    opened by buenohernandez 5
  • Icecast stream loads indefinitely with HTTP

    Icecast stream loads indefinitely with HTTP

    When exposing Icecast through jprq, the stream loads indefinitely unless TCP is used instead of HTTP. Example: https://example.jprq.io/radio.mp3 loads indefinitely http://tcp.jprq.io:65535/radio.mp3 works as expected

    opened by jschenke488 1
Releases(1.1.0)
Owner
Azimjon Pulatov
Azimjon Pulatov
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

gRPC - An RPC library and framework gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC

grpc 36.6k Dec 30, 2022
sshuttle: where transparent proxy meets VPN meets ssh

Transparent proxy server that works as a poor man's VPN. Forwards over ssh. Doesn't require admin. Works with Linux and MacOS. Supports DNS tunneling.

9.4k Jan 09, 2023
A simple, 2-person chat program that runs on a single computer. No Internet, just you

localChat A simple, 2-person chat program that runs on a single computer. No Internet, just you. Simple and Local This was created with ease of use in

Owls 2 Aug 19, 2022
TLD records archive. Revisiting the original TLDR project by mandatoryprogrammer, on the hunt for more root nameserver changes.

tldr A(nother) continuously updated historical TLD records archive. This repository is updated approximately every three hours with the results from D

Chris Partridge 11 Dec 14, 2022
Tripwire monitors ports and icmp to send the admin a message if somebody is scanning a machine that shouldn't be touched

Tripwire monitors ports and icmp to send the admin a message if somebody is scanning a machine that shouldn't be touched

3 Apr 05, 2022
Very simple FTP client, sync folder to FTP server, use python, opensource

ftp-sync-python Opensource, A way to safe your data, avoid lost data by Virus, Randsomware Some functions: Upload a folder automatically to FTP server

4 Sep 13, 2022
A simple tool to utilize the basic functionality of the Private API From Virus Total

Welcome To VT-SCAN (viurs total api) Information This is a simple tool to utilize the basic functionality of the Private API From Virus Total. with th

0X0ŽĒR∅⁰ 1 Sep 21, 2022
A tool to generate valid ip addresses of 55 countries. These ip's can be used for OpenBullet.

IP-Grabber A tool to generate valid ip addresses of 55 countries. These ip's can be used for OpenBullet. ive added the feature to set the generated ip

Saad 9 Dec 17, 2022
Send files to your friends over network! (100mb max)

PyServed v2.0.1 Made by Shaurya Pratap Singh Installation Using pip(for stable releases.) - $ pip install pyserved Using Git (for latest updates) -

Sblip.dev 4 Mar 22, 2022
Roadster - Distance to Closest Road Feature Server

Roadster: Distance to Closest Road Feature Server Milliarium Aerum, the zero of

Textualization Software Ltd. 4 May 23, 2022
InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state.

🧞 InfraGenie InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state. T

Digger 53 Nov 23, 2022
A python socket.io client for Roboteur

Roboteur Client Example TODO Basic setup Install the requirements: $ pip install -r requirements.txt Run the application: $ python -m roboteur_client

Barry Buck 1 Oct 13, 2021
Initial code of an A3C network

A3C-network Initial code of an A3C network Open the python file named as "APL452 Project Report2" The following libraries and packages have been insta

Ayush Tanwar 0 Jun 11, 2022
Desktop application for checking sites connection in a background mode

Site connectivity checker Desktop application for checking site connection in a background mode by sending ICMP messages. Problem and solution Usually

Karina Singatullina 26 Dec 19, 2022
Tiny JSON RPC via HTTP library.

jrpc Simplest ever possible Asynchronous JSON RPC via HTTP library for Python, backed by httpx. Installation pip install async-jrpc Usage Import JRPC

Onigiri Team 2 Jan 31, 2022
TsuserverMoS - A Python-based server for Attorney Online,

tsuserverMoS A Python-based server for Attorney Online, forked from RealKaiser/tsuserverCC Requires Python 3.7+ and PyYAML. Changes/additions from tsu

1 Dec 30, 2021
a safe proxy over tls

TlsProxys 基于TLS协议的http流量代理 安装 ※ 需要python3.7+ linux: python3.9 -m pip install TlsProxys windows: pip install TlsProxys 基本用法 服务器端: $ tpserver [command]

56 Nov 30, 2022
PySocks lets you send traffic through SOCKS proxy servers.

PySocks lets you send traffic through SOCKS proxy servers. It is a modern fork of SocksiPy with bug fixes and extra features. Acts as a drop-i

1.1k Dec 07, 2022
(A)sync client for sms.ru with pydantic responses

🚧 aioSMSru Send SMS Check SMS status Get SMS cost Get balance Get limit Get free limit Get my senders Check login/password Add to stoplist Remove fro

Eugene Mayer 4 Jul 03, 2022
A simple GitHub Action that physically puts your senses on alert when your build/release fails

GH Release Paniker A simple GitHub Action that physically puts your senses on alert when your build/release fails Usage Requirements: Raspberry Pi, LE

Hemanth Krishna 5 Dec 20, 2021