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
A pretty quick and simple interface to paramiko SFTP

A pretty quick and simple interface to paramiko SFTP. Provides multi-threaded routines with progress notifications for reliable, asynchronous transfers. This is a Python3 optimized fork of pysftp wit

14 Dec 21, 2022
A repo with study material, exercises, examples, etc for Devnet SPAUTO

MPLS in the SDN Era -- DevNet SPAUTO All of the study notes have now been moved to use auto-generated documentation to build a static site with Githu

Hugo Tinoco 67 Nov 16, 2022
CSP-style concurrency for Python

aiochan Aiochan is a library written to bring the wonderful idiom of CSP-style concurrency to python. The implementation is based on the battle-tested

Ziyang Hu 127 Dec 23, 2022
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
An automatic web reconnaissance tool written in python3.

WebRecon is an automatic web reconnaissance tool written in python3. Provides a command line interaction similar to msfconsole. The Exasmple.py file is provided, and you can write your own scripts yo

prophet 1 Feb 06, 2022
Typhon is a macOS specific payload aimed at targetting Jamf managed devices.

Typhon is a macOS specific payload aimed at targetting Jamf managed devices. This payload can be used to manipulate macOS devices into communicating with a Mythic instance, which acts as a Jamf serve

Mythic Agents 29 Dec 23, 2022
stellar-add-guest is a small tool to generate a new guest for Stellar Wireless (Enterprise mode) in OmniVista 2500 hosted on OmniSwitch with AOS Release 8

stellar-add-guest is a small tool to generate a new guest for Stellar Wireless (Enterprise mode) in OmniVista 2500 hosted on OmniSwitch with AOS Release 8.

BennyE 3 Jan 24, 2022
Ov3 - Easy common OpenVPN3 operations

ov3 Easy common OpenVPN3 operations Install ov3 requires Python3 and OpenVPN3 to

Yunus Bora Erciyas 6 Apr 25, 2022
Solismod - A script subscribes to MQTT topics and waits for a message

SolisMod This is a first attempt to modify Solis inverter settings As SolisMon3,

9 Nov 14, 2022
A great python/java dynamic DNS service for NameSilo, with log, email reminder...

English NameSilo DDNS is a DDNS service for NameSilo domain names for home broadband , it can automatically detect IP changes in home broadband

云牧青 77 Dec 28, 2022
A Python3 discord trojan, utilizing discord webhooks for sending information.

Vape-Lite-RAT A Python3 discord trojan, utilizing discord webhooks for sending information. What you do with this code / project / idea is non of my b

NightTab 12 Oct 15, 2022
订阅转换,添加免流host

普通订阅转免流订阅 原理 将原来的订阅解析后添加免流host 使用方法 服务器域名/&&订阅链接&&免流host&&转换后服务器前缀 我这里已经在服务器上搭建好了

163 Apr 01, 2022
Search ports in multiples hosts

Search Port ✨ Multiples Searchs ✨ Create list hosts Create list targets Start Require Python 3.10.0+. python main.py Struture Function Directory load_

Tux#3634 7 Apr 29, 2022
Share clipboards between two devices in a network

Shared Clipboard I felt the need for sharing clipboard texts between virtual machines but I didn't find any reliable solutions for this (I use HyperV)

Teja Swaroop 9 Jun 10, 2022
A python tool auto change proxy or ip after dealy time set by user

Auto proxy Ghost This tool auto change proxy or ip after dealy time set by user how to run 1. Install required file ./requirements.sh 2.Enter command

Harsh Tagra 0 Feb 23, 2022
SMS Based Headless Browsing

Browse the internet without a network connection - Submission for ConUHacks VI

Zafir Khalid 2 Feb 07, 2022
A transport agnostic sync/async RPC library that focuses on exposing services with a well-defined API using popular protocols.

WARNING: This is from spyne's development branch. This version is not released yet! Latest stable release can be found in the 2_13 branch. If you like

1.1k Dec 23, 2022
Socket Based Backdoor and Listener

The Project is mainly based on Sockets , File Handling and subprocess library for Creating backdoors For Hacking into one's Computer (Any OS-Platform Service) and listening on your computer and waiti

Shivansh Mehta 3 May 31, 2021
BLE parser for passive BLE advertisements

This pypi package is parsing BLE advertisements to readable data for several sensors and can be used for device tracking, as long as the MAC address is static. The parser was originally developed as

Ernst Klamer 19 Dec 26, 2022
A simple implementation of an RPC toolkit

Simple RPC With Raw Sockets Repository for the Data network course project: Introduction In this project, you will attempt to code a simple implementa

Milad Samimifar 1 Mar 25, 2022