Giter Club home page Giter Club logo

ngrok's People

Contributors

cespare avatar cnelson avatar davej avatar demetrodon avatar fcarriedo avatar frankstratton avatar inconshreveable avatar is avatar jkeesh avatar kyleconroy avatar laike9m avatar marcuscreo avatar mattn avatar nickpresta avatar ojongerius avatar pborreli avatar philips avatar rjocoleman avatar skastel avatar thurloat avatar vincentbernat avatar vroy 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  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

ngrok's Issues

Allow ngrok to work behind an HTTP Proxy

I have just downloaded ngrok and try to run it behind a corporate proxy. The console log does not show any url that is forwarded to the local service. Could anyone please confirm if this works behind a proxy?

Console output :

ngrok                                                                                                                                 

Tunnel Status                 connecting                                                                                                              
Version                       0.14/                                                                                                                   
Protocol                      http                                                                                                                    
Forwarding                     -> 127.0.0.1:80                                                                                                        
Web Interface                 http://localhost:4040                                                                                                   
# Conn                        0                                                                                                                       
Avg Conn Time                 0.00ms      

Packaging

Are they any plans to package ngrok?

Installing it seems to be the only hurdle to adoption right now - downloading a file, unzipping and installing it seems so.. 90s.

Would love it if I could install this through Apt or Homebrew!

Ngrok client doesn't allow for certificate pinning, relying solely on CA chain

Hi,

to support self-hosted ngrok deployments it would be nice to support alternative way of server validation in client. Currently client is capable only of verification through the usual CA cert chain; it would be nice to allow verification by specifying server's cert thumbprint as alternative to that (this would allow usage of self-signed certificates without need to add local CA cert into client's chain).

reconnecting, how "stable is a connection"?

Hi there, I don't know if this is a bug or not.

I can't seem to get a continuos connection, even after ^C and start ngrok again I get "reconnecting" in red.

I want to have a private SSH-git repo, but with this seem unfeasible because I need to check almost each time if the tunnel is connected or not.

The change of "port" one time or another could be no issue... but the "stability" of the connection seems like no working more than some hours... or perhaps minutes... :S.

So this is a NO, NO.

Is there anyone having this connection problems?

/////////////////////////////////////////////

Extra info

Accessing my page I get Tunnel xyz.xyz.com not found and on the client I see Tunnel status reconnecting. For me it looks like it is 90% of the time, my site doesn't get continuos connections perhaps one after some ours (or days) via HTTP and other time via SSH-git.

/////////////////////////////////////////////
Even one time I started the client I did get

captura de pantalla 2013-12-10 a la s 15 32 14
/////////////////////////////////////////////

Also the server is running all day on a VM at home.

ngrok needs a documented API for third party clients

Hi. I would like to create a tunnel on OpenBSD on some platforms unsupported by golang. I understand that you like golang but it doesn't run everywhere. A simple public and documented API would help a lot to users like me and probably would attract to devs of third party clients.

Request introspection and replayed requests don't always match original

The Go libraries ngrok uses to parse and dump http requests does some normalization of the requests it handles which causes the dumped requests to not always match the originals.

Example:
All HTTP/1.0 requests become HTTP/1.1 requests
Requests without a host header are dumped with a host header

Fix ngrok to always dump requests that are exactly the same as the originals.

Virtual hosts

Is it possible to use ngrok with virtualhosts that I set up with MAMP?

For example to get achieve this:
Forwarding https://*******.ngrok.com -> project1.dev:80

Thanks!

Headless mode

Would be nice to have a headless mode so I can run my proxies in foreman.

easier mac installs

install via a pkg, or homebrew, or explain how to cd places, etc.

sorry i know this is basic stuff, just running into this with people who are fairly new to the terminal :)

Response summary doesn't update

The summary of the response body doesn't update when I select different responses. All the other fields (i.e., response size, headers, raw, binary) all do update.

Here's a screenshot to show what I mean. Note that although a good request is selected, the response body summary that's shown is for the 404 response that had been previously selected.

ngrok1

Problem displaying pssh content in Firefox

Hello,

I came across ngrok and I really like this tool.
I would like to be able to share my terminal with someone else using pssh (https://github.com/portly/pssh).
This exposes a service on port 8022 by default.

I tried to open an http tunnel but a browser doesn't seem to display this.
When I use tcp protocol on port 8022, I am able to display my terminal with 127.0.0.1:8022, but obviously not from anywhere else...

Am I using it wrong ? Or is my use case not supported ?

Thanks in advance.

Regards.

Calls with an Authorization header fail

I'm trying to send an OAuth call through ngrok, which already contains an Authorization header - and I can't find a way to get around the "Authorization Required" response.

I'm not specifying the httpauth argument on the command line, and I haven't filled in anything for it on the website. I also tried explicitly passing "" for it on the command line, but to no avail.

I noticed this code, which seems to attempt to account for it:

if tunnel.regMsg.HttpAuth != "" && req.Header.Get("Authorization") != tunnel.regMsg.HttpAuth {

./ngrok 8600
Tunnel Status                 online                                                                                                                       
Version                       0.15/0.8                                                                                                                     
Protocol                      http                                                                                                                         
Forwarding                    http://5fdbb3a5.ngrok.com -> 127.0.0.1:8600                                                                                  
Web Interface                 http://localhost:4040                                                                                                        
# Conn                        1                                                                                                                            
Avg Conn Time                 30.82ms                                            

curl http://5fdbb3a5.ngrok.com
debug response

url -H 'Authorization: test' http://5fdbb3a5.ngrok.com
Authorization required

Allow For Data Modification Before Replay

Hey guys!

Love this application!

The only thing which would make it even more killer is the addition of the ability to not just replay data, but to edit the data before it is replayed. That would make debugging APIs with webhooks vastly easier, as it wouldn't depend on the 3rd party service!

Thanks so much!,

Add support for throttling speed

It would be great to have a --speed switch, or similar, which throttles throughput, so that ngrok could be used to replicate slow connections.

(Currenlty I use Sloppy https://github.com/d6y/sloppy) but it'd be great to roll the behaviour into ngrok and do away with a separate Java app)

Subdomains not working on version 1.3

After your reply i starting test the version 1.3. I have created an account and auth_token and follow the steps on documentation. But none of the options, default ngrok file or an yaml file reads the auth_token. Even i tried to put the auth_token as a parameter on ngrok but i cannot have the subdomain registered. Did you tested this version 1.3 with this? The old version works perfects.

Support for ARM chips?

I tried to compile ngrok on an ARM based machine. It compiled, but at runtime gave me these errors:

panic: open assets/client/tls/ngrokroot.crt: no such file or directory

goroutine 1 [running]:
ngrok/client.init·1()
        /home/jacob/ngrok/src/ngrok/client/tls.go:19 +0x120
ngrok/client.init()
        /home/jacob/ngrok/src/ngrok/client/update_debug.go:11 +0x114
main.init()
        /home/jacob/ngrok/src/ngrok/main/ngrok/ngrok.go:9 +0x74

goroutine 3 [chan receive]:
code.google.com/p/log4go.ConsoleLogWriter.run(0x10840000, 0xb6d66180, 0x108000a0)
        /home/jacob/ngrok/src/code.google.com/p/log4go/termlog.go:27 +0x60
created by code.google.com/p/log4go.NewConsoleLogWriter
        /home/jacob/ngrok/src/code.google.com/p/log4go/termlog.go:19 +0x88

goroutine 4 [runnable]:
os/signal.loop()
        /home/jacob/go/src/pkg/os/signal/signal_unix.go:19
created by os/signal.init·1
        /home/jacob/go/src/pkg/os/signal/signal_unix.go:27 +0x48

Is there anyway I can get this to work?

ngrok reconnecting

I'm behind company firewall, and it used to work fine. But today I'm stuck on reconnecting and got this on the log

[2013/12/16 10:02:59 EST] [INFO] (ngrok/log.Info:89) Reading configuration file C:\Users\myusername/.ngrok
[2013/12/16 10:02:59 EST] [INFO] (ngrok/log.(*PrefixLogger).Info:60) [view] [web] Serving web interface on 127.0.0.1:4040
[2013/12/16 10:02:59 EST] [INFO] (ngrok/log.Info:89) Checking for update
[2013/12/16 10:02:59 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [view] [term] Waiting for update
[2013/12/16 10:02:59 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:748f6687] New connection to: 96.126.125.171:443
[2013/12/16 10:02:59 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:748f6687] Writing message: {"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.6","User":"","Password":"","OS":"windows","Arch":"386","ClientId":""}}
[2013/12/16 10:03:00 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:748f6687] Closing
[2013/12/16 10:03:00 EST] [EROR] (ngrok/log.Error:97) control recovering from failure EOF
[2013/12/16 10:03:00 EST] [INFO] (ngrok/log.Info:89) Waiting 1 seconds before reconnecting
[2013/12/16 10:03:00 EST] [INFO] (ngrok/log.Info:89) No update available
[2013/12/16 10:03:01 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [view] [term] Waiting for update
[2013/12/16 10:03:01 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:3c0484a7] New connection to: 96.126.125.171:443
[2013/12/16 10:03:01 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:3c0484a7] Writing message: {"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.6","User":"","Password":"","OS":"windows","Arch":"386","ClientId":""}}
[2013/12/16 10:03:01 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:3c0484a7] Closing
[2013/12/16 10:03:01 EST] [EROR] (ngrok/log.Error:97) control recovering from failure EOF
[2013/12/16 10:03:01 EST] [INFO] (ngrok/log.Info:89) Waiting 2 seconds before reconnecting
[2013/12/16 10:03:03 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [view] [term] Waiting for update
[2013/12/16 10:03:03 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:11aa77d4] New connection to: 96.126.125.171:443
[2013/12/16 10:03:03 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:11aa77d4] Writing message: {"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.6","User":"","Password":"","OS":"windows","Arch":"386","ClientId":""}}
[2013/12/16 10:03:03 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:11aa77d4] Closing
[2013/12/16 10:03:03 EST] [EROR] (ngrok/log.Error:97) control recovering from failure EOF
[2013/12/16 10:03:03 EST] [INFO] (ngrok/log.Info:89) Waiting 4 seconds before reconnecting
[2013/12/16 10:03:07 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [view] [term] Waiting for update
[2013/12/16 10:03:07 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:49cc7192] New connection to: 96.126.125.171:443
[2013/12/16 10:03:07 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:49cc7192] Writing message: {"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.6","User":"","Password":"","OS":"windows","Arch":"386","ClientId":""}}
[2013/12/16 10:03:07 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:49cc7192] Closing
[2013/12/16 10:03:07 EST] [EROR] (ngrok/log.Error:97) control recovering from failure EOF
[2013/12/16 10:03:07 EST] [INFO] (ngrok/log.Info:89) Waiting 8 seconds before reconnecting
[2013/12/16 10:03:15 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [view] [term] Waiting for update
[2013/12/16 10:03:15 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:34b6e835] New connection to: 96.126.125.171:443
[2013/12/16 10:03:15 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:34b6e835] Writing message: {"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.6","User":"","Password":"","OS":"windows","Arch":"386","ClientId":""}}
[2013/12/16 10:03:15 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:34b6e835] Closing
[2013/12/16 10:03:15 EST] [EROR] (ngrok/log.Error:97) control recovering from failure EOF
[2013/12/16 10:03:15 EST] [INFO] (ngrok/log.Info:89) Waiting 16 seconds before reconnecting
[2013/12/16 10:03:31 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [view] [term] Waiting for update
[2013/12/16 10:03:32 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:27e74ed9] New connection to: 96.126.125.171:443
[2013/12/16 10:03:32 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:27e74ed9] Writing message: {"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.6","User":"","Password":"","OS":"windows","Arch":"386","ClientId":""}}
[2013/12/16 10:03:32 EST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:56) [ctl:27e74ed9] Closing
[2013/12/16 10:03:32 EST] [EROR] (ngrok/log.Error:97) control recovering from failure EOF
[2013/12/16 10:03:32 EST] [INFO] (ngrok/log.Info:89) Waiting 30 seconds before reconnecting
[2013/12/16 10:03:32 EST] [INFO] (ngrok/log.(*PrefixLogger).Info:60) [view] [term] Got quit command
[2013/12/16 10:03:32 EST] [INFO] (ngrok/log.(*PrefixLogger).Info:60) [controller] Shutting down

Ngrok still works outside of the firewall, so this seems isolated. What bothers me is the weird "control recovering from failure EOF" error. Does that mean the firewall block it? Or is it something else? I can help debug using wireshark if someone tell me what to look.

(self-hosted) ngrok doesn't work with certs issued by GoDaddy

I'm using a private key and wildcard certificate issued for my domain by godaddy.

$ sudo bin/ngrokd -domain="mydomain.ru" -tlsCrt="/home/jdoe/keys/mydomain.ru.crt" -tlsKey="/home/jdoe/keys/mydomain.ru.key"

Ngrokd starts normally, though on a client I have the following error:

[EROR] control recovering from failure x509: certificate signed by unknown authority

I run the client with the following options:

$ ngrok -log=stdout start charlie

Here is the contents of my .ngrok file:

server_addr: ngrok.mydomain.ru:4443
trust_host_root_certs: true
  tunnels:
    charlie:
      proto:
        http: 5000

Add UDP Tunneling

On the features page it is said that "ngrok supports tunnelling at the TCP and UDP layer so you can expose any type of networked service to the internet".
However -proto="udp" is not supported and trying to send UDP messages to a TCP tunnel fails with "Failed to open private leg 127.0.0.1:6002: dial tcp 127.0.0.1:6002: connection refused" while having a server listening for incoming UDP packets.

Tag the latest version

I've noticed the tags are a bit behind of what the current version is can we add some tags for the missing versions?

I'll start off with the latest version.

677ea6a => 0.21

Daemon / Silent Mode

I am running ngrok in a vagrant box via puppet and it seems to error out when I start the service which I assume is because of the interface being returned. It would be great to run ngrok --daemon 80 or --silent which would only return a 0 status if successful or the error. If such an option does already exist I didnt see it on the help pages or in the code anywhere.

Enable setting the remote port for non-HTTP services

When forwarding a non-HTTP service, the remote port on ngrok.com is assigned by ngrok. It would be nice to be able to request one yourself, similar to the subdomain for HTTP services

To be more precise, currently the command ./ngrok -proto=tcp 22 forwards to tcp://ngrok.com:XXXXX, where XXXXX cannot be chosen.

New version don't run on OSX LION

You have two differents releases. On your site it is amd_64 and this don't run on osx lion, and here on github you have darwin? The release from your site runs but can connect and don't give you the forward link stay always connecting.

Thanks for your work.

Environment variables in config yml

Is is possible to insert variables (like perhaps env variables) into the config?

I'd like to do something like the following to prevent collisions and standardize a config file I could check into source control for my project:

tunnels:
  client:
    subdomain: "<%= ENV['user'] %>-myapp"
    proto:
      http: 80

Or is there a better way to accomplish this?

Ngrok Disconnecting Intermittently

I am under a HTTP Proxy. First start, ngrok works properly however the socket sometimes disconnects and displays a message about "keepalive"

src/ngrok/cache/lru.go:174: function ends without a return statement

arthur@draco:~/local/ngrok$ make
go fmt ngrok/...
go get -tags '' -d -v ngrok/...
code.google.com/p/log4go (download)
github.com/garyburd/go-websocket (download)
github.com/inconshreveable/go-metrics (download)
github.com/nsf/termbox-go (download)
go install -tags '' ngrok/main/ngrok
go install -tags '' ngrok/main/ngrokd
# ngrok/cache
src/ngrok/cache/lru.go:174: function ends without a return statement
src/ngrok/cache/lru.go:204: function ends without a return statement
make: *** [server] Error 2

on ubuntu with golang 2:1-5 . Sorry don't really know go language.

Panic when loading the web interface

Sorry for the terrible formatting, the curses view causes this. After a few requests, I tried to refresh the page.

2013/04/26 02:25:42 http: panic serving [::1]:63029: template: page.html:74:52: executing "page.html" at <dumpRequest .>: error calling dumpRequest: http: no Host in request URL
goroutine 122 [running]:
net/http.func·007()
    /usr/local/go/src/pkg/net/http/server.go:1022 +0xac
ngrok/client/views/web.func·008(0xc20010cac0, 0xc2002b6e70, 0xc200305dd0)
    /Users/kyle/projects/ngrok/src/ngrok/client/views/web/http.go:187 +0x363
net/http.HandlerFunc.ServeHTTP(0xc2000c7740, 0xc20010cac0, 0xc2002b6e70, 0xc200305dd0)
    /usr/local/go/src/pkg/net/http/server.go:1149 +0x3e
net/http.(*ServeMux).ServeHTTP(0xc2000a6570, 0xc20010cac0, 0xc2002b6e70, 0xc200305dd0)
    /usr/local/go/src/pkg/net/http/server.go:1416 +0x11d
net/http.serverHandler.ServeHTTP(0xc2000c4780, 0xc20010cac0, 0xc2002b6e70, 0xc200305dd0)
    /usr/local/go/src/pkg/net/http/server.go:1517 +0x16c
net/http.(*conn).serve(0xc200302120)
    /usr/local/go/src/pkg/net/http/server.go:1096 +0x765
created by net/http.(*Server).Serve
    /usr/local/go/src/pkg/net/http/server.go:1564 +0x266

Trouble with ngrok and XAMPP on Mac OS X

Hey guys,

ngrok is amazing! Have run into a problem though. Have googled but nothing.

I'm developing a site using XAMPP.

When I run $ ngrock 80 and check the site with my forwarding domain (https://mydomain.ngrok.com) it redirects to https://mydomain.ngrok.com/xampp and works fine.

But when I try to access my site (located in the htdocs folder under XAMPP) via https://mydomain.ngrok.com/www/ the URL resolves to 127.0.0.1/www/ which works on my local machine but when testing on my other devices it cannot connect to the server.

Any ideas?

OsX/Windows: Unable to initiate connection to 127.0.0.1:8080

I've just downloaded both OSX and Windows version to try out ngrok.

Both start as expected but when I try to access the public address, I get a
Unable to initiate connection to 127.0.0.1:8080 error on both versions.

And to confirm this telnet won't find the port open on 127.0.0.1.

Is there something more specific to do ?

As a side note, I got a weird error when running ngrok from a cygwin term. Could be a path problem. Should you be interested please let me know, I'd create a gist for you.

Server failed to allocate tunnel: You must first reserve a custom hostname as a Reversed Domain at https://ngrok.com/dashboard

Everytime I try to run ngrok 3000, it throws.
Server failed to allocate tunnel: You must first reserve a custom hostname as a Reversed Domain at https://ngrok.com/dashboard

I even paid for ngrok in the hopes of getting it to go away (no complaints, I was meaning to anyway) and it still didn't. I downloaded a fresh copy and replaced the old one, to no effect. I removed ~/.ngrok and re-authed, to no effect.

➜  Downloads  system_profiler SPSoftwareDataType
Software:

    System Software Overview:

      System Version: OS X 10.8.5 (12F37)
      Kernel Version: Darwin 12.5.0
      Boot Volume: Macintosh SSD
      Boot Mode: Normal
      Computer Name: Robert Trencheny’s MacBook Pro
      User Name: Robert Trencheny (robbiet480)
      Secure Virtual Memory: Enabled
      Time since boot: 9 days 9:19

➜  Downloads

Show all active tunnels in the web UI

It would be very nice if the web UI could show a list of all active tunnels.

Reason: I want to be able to login remotely (through ngrok) to see the ngrok.com domains and ports to which my tunnels are currently bound.

Web inspector doesn't work in IE

It should at least work on modern, standards-compliant IE versions like IE10+, maybe IE9. My hunch is that at least one issue is that those versions of IE don't support WebSocket.

ngrok crashes hard when encountering XML syntax error

My HTTP server replied to a request with Content-Type: text/xml but no HTTP body.

[07/23/13 17:18:52] [DEBG] Reading auth token from file /Users/chadrs/.ngrok
[07/23/13 17:18:52] [WARN] Failed to read ~/.ngrok for auth token: open /Users/chadrs/.ngrok: no such file or directory
[07/23/13 17:18:52] [INFO] Serving web interface on localhost:4040
[07/23/13 17:18:52] [DEBG] [ctl:4d658221] New connection to: 173.255.204.192:4443
[07/23/13 17:18:52] [DEBG] [ctl:4d658221] Writing message: {"Type":"RegMsg","Payload":{"Version":"1","MmVersion":"0.14","Protocol":"http","Hostname":"","Subdomain":"","ClientId":"ff6b661fbcff4aa8","HttpAuth":"","User":"","Password":"","OS":"darwin","Arch":""}}
[07/23/13 17:18:52] [DEBG] [ctl:4d658221] Waiting to read message
[07/23/13 17:18:52] [DEBG] [ctl:4d658221] Reading message with length: 139
[07/23/13 17:18:52] [DEBG] [ctl:4d658221] Read message {"Type":"RegAckMsg","Payload":{"Version":"1","MmVersion":"0.8","Url":"http://7b964c92.ngrok.com","ProxyAddr":"ngrok.com:48653","Error":""}}
[07/23/13 17:18:52] [INFO] [ctl:4d658221] Tunnel established at http://7b964c92.ngrok.com
[07/23/13 17:18:52] [DEBG] [ctl:4d658221] Waiting to read message
[07/23/13 17:19:06] [DEBG] [ctl:4d658221] Reading message with length: 35
[07/23/13 17:19:06] [DEBG] [ctl:4d658221] Read message {"Type":"ReqProxyMsg","Payload":{}}
[07/23/13 17:19:06] [DEBG] [ctl:4d658221] Waiting to read message
[07/23/13 17:19:07] [DEBG] [pxy:78629a0f] New connection to: 173.255.204.192:48653
[07/23/13 17:19:07] [DEBG] [pxy:78629a0f] Writing message: {"Type":"RegProxyMsg","Payload":{"Url":"http://7b964c92.ngrok.com"}}
[07/23/13 17:19:07] [DEBG] [prv:55104dc7] New connection to: 127.0.0.1:7000
[07/23/13 17:19:07] [INFO] [prv:55104dc7] Joined with connection pxy:78629a0f
panic: interface conversion: error is *errors.errorString, not *xml.SyntaxError

goroutine 41 [running]:
ngrok/client/views/web.makeBody(0x115a52a0, 0x115b5400, 0x0, 0x200, 0x43c, ...)
    /Users/aes/src/ngrok/src/ngrok/client/views/web/http.go:119 +0x390
ngrok/client/views/web.(*WebHttpView).updateHttp(0x114f5ce0)
    /Users/aes/src/ngrok/src/ngrok/client/views/web/http.go:196 +0x667
created by ngrok/client/views/web.NewWebHttpView
    /Users/aes/src/ngrok/src/ngrok/client/views/web/http.go:86 +0x11a

goroutine 1 [semacquire]:
sync.runtime_Semacquire(0x115131c0)
    /usr/local/Cellar/go/1.1.1/src/pkg/runtime/zsema_darwin_386.c:165 +0x2f
sync.(*WaitGroup).Wait(0x114f5a80)
    /usr/local/Cellar/go/1.1.1/src/pkg/sync/waitgroup.go:109 +0xd7
ngrok/client.Main()
    /Users/aes/src/ngrok/src/ngrok/client/main.go:333 +0x2a4
main.main()
    /Users/aes/src/ngrok/src/ngrok/main/ngrok/ngrok.go:8 +0x19

goroutine 2 [syscall]:

goroutine 4 [chan receive]:
code.google.com/p/log4go.ConsoleLogWriter.run(0x11499000, 0x1146e500, 0x11407098)
    /Users/aes/src/ngrok/src/code.google.com/p/log4go/termlog.go:27 +0x60
created by code.google.com/p/log4go.NewConsoleLogWriter
    /Users/aes/src/ngrok/src/code.google.com/p/log4go/termlog.go:19 +0x60

goroutine 5 [syscall]:
os/signal.loop()
    /usr/local/Cellar/go/1.1.1/src/pkg/os/signal/signal_unix.go:21 +0x1c
created by os/signal.init·1
    /usr/local/Cellar/go/1.1.1/src/pkg/os/signal/signal_unix.go:27 +0x2f

goroutine 6 [chan receive]:
code.google.com/p/log4go.ConsoleLogWriter.run(0x114992c0, 0x1146e500, 0x11407098)
    /Users/aes/src/ngrok/src/code.google.com/p/log4go/termlog.go:27 +0x60
created by code.google.com/p/log4go.NewConsoleLogWriter
    /Users/aes/src/ngrok/src/code.google.com/p/log4go/termlog.go:19 +0x60

goroutine 8 [select]:
github.com/inconshreveable/go-metrics.(*StandardMeter).arbiter(0x11493e50)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:87 +0x3a1
created by github.com/inconshreveable/go-metrics.NewMeter
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:43 +0xb5

goroutine 9 [select]:
github.com/inconshreveable/go-metrics.(*ExpDecaySample).arbiter(0x114f58a0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:119 +0xb24
created by github.com/inconshreveable/go-metrics.NewExpDecaySample
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:47 +0xcb

goroutine 10 [select]:
github.com/inconshreveable/go-metrics.(*StandardHistogram).arbiter(0x114f58c0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:156 +0x33b
created by github.com/inconshreveable/go-metrics.NewHistogram
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:50 +0xc7

goroutine 11 [select]:
github.com/inconshreveable/go-metrics.(*StandardMeter).arbiter(0x11493e60)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:87 +0x3a1
created by github.com/inconshreveable/go-metrics.NewMeter
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:43 +0xb5

goroutine 12 [select]:
github.com/inconshreveable/go-metrics.(*ExpDecaySample).arbiter(0x114f58e0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:119 +0xb24
created by github.com/inconshreveable/go-metrics.NewExpDecaySample
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:47 +0xcb

goroutine 13 [select]:
github.com/inconshreveable/go-metrics.(*StandardHistogram).arbiter(0x114f5900)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:156 +0x33b
created by github.com/inconshreveable/go-metrics.NewHistogram
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:50 +0xc7

goroutine 14 [select]:
github.com/inconshreveable/go-metrics.(*StandardMeter).arbiter(0x11493e80)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:87 +0x3a1
created by github.com/inconshreveable/go-metrics.NewMeter
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:43 +0xb5

goroutine 15 [select]:
github.com/inconshreveable/go-metrics.(*ExpDecaySample).arbiter(0x114f5920)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:119 +0xb24
created by github.com/inconshreveable/go-metrics.NewExpDecaySample
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:47 +0xcb

goroutine 16 [select]:
github.com/inconshreveable/go-metrics.(*StandardHistogram).arbiter(0x114f5940)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:156 +0x33b
created by github.com/inconshreveable/go-metrics.NewHistogram
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:50 +0xc7

goroutine 17 [select]:
github.com/inconshreveable/go-metrics.(*ExpDecaySample).arbiter(0x114f5960)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:119 +0xb24
created by github.com/inconshreveable/go-metrics.NewExpDecaySample
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:47 +0xcb

goroutine 18 [select]:
github.com/inconshreveable/go-metrics.(*StandardHistogram).arbiter(0x114f5980)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:156 +0x33b
created by github.com/inconshreveable/go-metrics.NewHistogram
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:50 +0xc7

goroutine 19 [select]:
ngrok/util.func·001()
    /Users/aes/src/ngrok/src/ngrok/util/broadcast.go:20 +0x2dc
created by ngrok/util.NewBroadcast
    /Users/aes/src/ngrok/src/ngrok/util/broadcast.go:42 +0x120

goroutine 20 [select]:
github.com/inconshreveable/go-metrics.(*StandardMeter).arbiter(0x11493ea0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:87 +0x3a1
created by github.com/inconshreveable/go-metrics.NewMeter
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:43 +0xb5

goroutine 21 [select]:
github.com/inconshreveable/go-metrics.(*ExpDecaySample).arbiter(0x114f5a00)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:119 +0xb24
created by github.com/inconshreveable/go-metrics.NewExpDecaySample
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/sample.go:47 +0xcb

goroutine 22 [select]:
github.com/inconshreveable/go-metrics.(*StandardHistogram).arbiter(0x114f5a20)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:156 +0x33b
created by github.com/inconshreveable/go-metrics.NewHistogram
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/histogram.go:50 +0xc7

goroutine 23 [select]:
github.com/inconshreveable/go-metrics.(*StandardMeter).arbiter(0x11493eb0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:87 +0x3a1
created by github.com/inconshreveable/go-metrics.NewMeter
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/meter.go:43 +0xb5

goroutine 24 [select]:
ngrok/util.func·001()
    /Users/aes/src/ngrok/src/ngrok/util/broadcast.go:20 +0x2dc
created by ngrok/util.NewBroadcast
    /Users/aes/src/ngrok/src/ngrok/util/broadcast.go:42 +0x120

goroutine 25 [select]:
ngrok/util.func·001()
    /Users/aes/src/ngrok/src/ngrok/util/broadcast.go:20 +0x2dc
created by ngrok/util.NewBroadcast
    /Users/aes/src/ngrok/src/ngrok/util/broadcast.go:42 +0x120

goroutine 26 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5ae0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 27 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5b00)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 28 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5b20)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 29 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5b40)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 30 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5b60)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 31 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5b80)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 32 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5ba0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 33 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5bc0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 34 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5be0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 35 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5c00)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 36 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5c20)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 37 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5c40)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 38 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5c60)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 39 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5c80)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 40 [select]:
github.com/inconshreveable/go-metrics.(*StandardEWMA).arbiter(0x114f5ca0)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:73 +0x148
created by github.com/inconshreveable/go-metrics.NewEWMA
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/ewma.go:33 +0xab

goroutine 42 [select]:
ngrok/client/views/web.(*WebHttpView).updateUiState(0x114f5ce0)
    /Users/aes/src/ngrok/src/ngrok/client/views/web/http.go:218 +0xd1
created by ngrok/client/views/web.NewWebHttpView
    /Users/aes/src/ngrok/src/ngrok/client/views/web/http.go:87 +0x12f

goroutine 43 [IO wait]:
net.runtime_pollWait(0x4f4f30, 0x72, 0x0)
    /usr/local/Cellar/go/1.1.1/src/pkg/runtime/znetpoll_darwin_386.c:118 +0x6f
net.(*pollDesc).WaitRead(0x114905ec, 0x23, 0x114f57a0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_poll_runtime.go:75 +0x30
net.(*netFD).accept(0x114905a0, 0x2ad098, 0x0, 0x114f57a0, 0x23, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_unix.go:385 +0x205
net.(*TCPListener).AcceptTCP(0x11513230, 0xc, 0x11536008, 0x86de0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/tcpsock_posix.go:229 +0x3f
net.(*TCPListener).Accept(0x11513230, 0x0, 0x0, 0x0, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/tcpsock_posix.go:239 +0x26
net/http.(*Server).Serve(0x11517c60, 0x114f5e20, 0x11513230, 0x0, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/http/server.go:1542 +0x6a
net/http.(*Server).ListenAndServe(0x11517c60, 0x11517c60, 0x0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/http/server.go:1532 +0x81
net/http.ListenAndServe(0x115131b0, 0x5, 0x0, 0x0, 0x1, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/http/server.go:1597 +0x58
created by ngrok/client/views/web.NewWebView
    /Users/aes/src/ngrok/src/ngrok/client/views/web/view.go:65 +0x221

goroutine 44 [IO wait]:
net.runtime_pollWait(0x4f4ec4, 0x72, 0x0)
    /usr/local/Cellar/go/1.1.1/src/pkg/runtime/znetpoll_darwin_386.c:118 +0x6f
net.(*pollDesc).WaitRead(0x1149068c, 0x23, 0x114f57a0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_poll_runtime.go:75 +0x30
net.(*netFD).Read(0x11490640, 0x11549000, 0x400, 0x400, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_unix.go:195 +0x20b
net.(*conn).Read(0x11407188, 0x11549000, 0x400, 0x400, 0x2d26e, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/net.go:123 +0xa6
crypto/tls.(*block).readFromUntil(0x11548260, 0x114f5800, 0x11407188, 0x5, 0x11407188, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/crypto/tls/conn.go:401 +0x96
crypto/tls.(*Conn).readRecord(0x114f4300, 0x17, 0x0, 0x21a3e0)
    /usr/local/Cellar/go/1.1.1/src/pkg/crypto/tls/conn.go:481 +0xbc
crypto/tls.(*Conn).Read(0x114f4300, 0x1156f388, 0x8, 0x8, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/crypto/tls/conn.go:796 +0xc5
ngrok/conn.(*tcpConn).Read(0x114f5140, 0x1156f388, 0x8, 0x8, 0x8, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:0 +0x53
io.ReadAtLeast(0x11560620, 0x114f5140, 0x1156f388, 0x8, 0x8, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:284 +0xae
io.ReadFull(0x11560620, 0x114f5140, 0x1156f388, 0x8, 0x8, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:302 +0x5a
encoding/binary.Read(0x11560620, 0x114f5140, 0x11517f00, 0x114f5140, 0x1b2580, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/encoding/binary/binary.go:136 +0xbe
ngrok/msg.readMsgShared(0x114906e0, 0x114f5140, 0x0, 0x0, 0x0, ...)
    /Users/aes/src/ngrok/src/ngrok/msg/conn.go:14 +0x11b
ngrok/msg.ReadMsg(0x114906e0, 0x114f5140, 0x0, 0x0, 0x0, ...)
    /Users/aes/src/ngrok/src/ngrok/msg/conn.go:37 +0x4e
ngrok/client.control(0x114965c0, 0x11493ed0)
    /Users/aes/src/ngrok/src/ngrok/client/main.go:246 +0x557
ngrok/client.reconnectingControl(0x114965c0, 0x11493ed0)
    /Users/aes/src/ngrok/src/ngrok/client/main.go:168 +0x5b
created by ngrok/client.Main
    /Users/aes/src/ngrok/src/ngrok/client/main.go:300 +0x201

goroutine 45 [chan receive]:
ngrok/client.versionCheck(0x114965c0, 0x11493ed0)
    /Users/aes/src/ngrok/src/ngrok/client/main.go:119 +0x75
created by ngrok/client.Main
    /Users/aes/src/ngrok/src/ngrok/client/main.go:301 +0x222

goroutine 46 [chan receive]:
ngrok/client.func·007()
    /Users/aes/src/ngrok/src/ngrok/client/main.go:309 +0x77
created by ngrok/client.Main
    /Users/aes/src/ngrok/src/ngrok/client/main.go:331 +0x291

goroutine 52 [semacquire]:
sync.runtime_Semacquire(0x11579ba8)
    /usr/local/Cellar/go/1.1.1/src/pkg/runtime/zsema_darwin_386.c:165 +0x2f
sync.(*Cond).Wait(0x114f67a4)
    /usr/local/Cellar/go/1.1.1/src/pkg/sync/cond.go:74 +0x8b
io.(*pipe).read(0x114f6780, 0x115b2000, 0x1000, 0x1000, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/pipe.go:52 +0x17b
io.(*PipeReader).Read(0x11579a30, 0x115b2000, 0x1000, 0x1000, 0x1, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/pipe.go:130 +0x50
bufio.(*Reader).fill(0x1159b120)
    /usr/local/Cellar/go/1.1.1/src/pkg/bufio/bufio.go:79 +0xe3
bufio.(*Reader).ReadSlice(0x1159b120, 0x115b200a, 0x0, 0x0, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/bufio/bufio.go:262 +0x17a
bufio.(*Reader).ReadLine(0x1159b120, 0x0, 0x0, 0x0, 0x4d2000, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/bufio/bufio.go:293 +0x58
net/textproto.(*Reader).readLineSlice(0x1157af40, 0x8, 0x1c912, 0x1159a150, 0x22e5a0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/textproto/reader.go:55 +0x4c
net/textproto.(*Reader).ReadLine(0x1157af40, 0x1159a150, 0x1, 0x1, 0x1088f7, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/textproto/reader.go:36 +0x26
net/http.ReadRequest(0x1159b120, 0x1159a150, 0x0, 0x0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/http/request.go:510 +0x66
ngrok/proto.(*Http).readRequests(0x114f5a40, 0x11572f30, 0x11572f60)
    /Users/aes/src/ngrok/src/ngrok/proto/http.go:67 +0x32
created by ngrok/proto.(*Http).WrapConn
    /Users/aes/src/ngrok/src/ngrok/proto/http.go:60 +0x7b

goroutine 51 [chan receive]:
ngrok/conn.Join(0x115922d0, 0x11572f30, 0x114906e0, 0x11560920, 0x11572f30, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:124 +0x1c7
ngrok/client.func·002()
    /Users/aes/src/ngrok/src/ngrok/client/main.go:81 +0xa7
github.com/inconshreveable/go-metrics.(*StandardTimer).Time(0x11493e70, 0x1157ae80)
    /Users/aes/src/ngrok/src/github.com/inconshreveable/go-metrics/timer.go:105 +0x48
ngrok/client.proxy(0x1155d360, 0xf, 0x114965c0, 0x11493ed0)
    /Users/aes/src/ngrok/src/ngrok/client/main.go:86 +0x68d
created by ngrok/client.control
    /Users/aes/src/ngrok/src/ngrok/client/main.go:252 +0x79e

goroutine 50 [select]:
ngrok/client.heartbeat(0x1156f188, 0x114906e0, 0x114f5140)
    /Users/aes/src/ngrok/src/ngrok/client/main.go:139 +0x65f
created by ngrok/client.control
    /Users/aes/src/ngrok/src/ngrok/client/main.go:241 +0x532

goroutine 53 [chan receive]:
ngrok/proto.(*Http).readResponses(0x114f5a40, 0x11572f30, 0x11572f60)
    /Users/aes/src/ngrok/src/ngrok/proto/http.go:94 +0x2e
created by ngrok/proto.(*Http).WrapConn
    /Users/aes/src/ngrok/src/ngrok/proto/http.go:61 +0xa0

goroutine 54 [IO wait]:
net.runtime_pollWait(0x4f4e58, 0x72, 0x0)
    /usr/local/Cellar/go/1.1.1/src/pkg/runtime/znetpoll_darwin_386.c:118 +0x6f
net.(*pollDesc).WaitRead(0x11490d6c, 0x23, 0x114f57a0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_poll_runtime.go:75 +0x30
net.(*netFD).Read(0x11490d20, 0x11575000, 0x400, 0x400, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_unix.go:195 +0x20b
net.(*conn).Read(0x1156f470, 0x11575000, 0x400, 0x400, 0x9, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/net.go:123 +0xa6
crypto/tls.(*block).readFromUntil(0x11560a80, 0x114f5800, 0x1156f470, 0x5, 0x1156f470, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/crypto/tls/conn.go:401 +0x96
crypto/tls.(*Conn).readRecord(0x114f4900, 0x17, 0x0, 0xdb5b0)
    /usr/local/Cellar/go/1.1.1/src/pkg/crypto/tls/conn.go:481 +0xbc
crypto/tls.(*Conn).Read(0x114f4900, 0x1159d000, 0x8000, 0x8000, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/crypto/tls/conn.go:796 +0xc5
ngrok/conn.(*tcpConn).Read(0x11560920, 0x1159d000, 0x8000, 0x8000, 0x282, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:0 +0x53
io.Copy(0x1157af00, 0x11578fe0, 0x11560620, 0x11560920, 0x282, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:348 +0x172
ngrok/conn.(*Tee).ReadFrom(0x11572f30, 0x11560620, 0x11560920, 0x0, 0x0, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/tee.go:70 +0x5c
io.Copy(0x1157af60, 0x11572f30, 0x11560620, 0x11560920, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:340 +0x80
ngrok/conn.func·002(0x115922d0, 0x11572f30, 0x114906e0, 0x11560920, 0x11579a50, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:110 +0x8a
created by ngrok/conn.Join
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:121 +0xd0

goroutine 55 [runnable]:
net.runtime_pollWait(0x4f4dec, 0x72, 0x0)
    /usr/local/Cellar/go/1.1.1/src/pkg/runtime/znetpoll_darwin_386.c:118 +0x6f
net.(*pollDesc).WaitRead(0x115922cc, 0x23, 0x114f57a0)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_poll_runtime.go:75 +0x30
net.(*netFD).Read(0x11592280, 0x115a6000, 0x8000, 0x8000, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/fd_unix.go:195 +0x20b
net.(*conn).Read(0x115799b8, 0x115a6000, 0x8000, 0x8000, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/net/net.go:123 +0xa6
ngrok/conn.(*tcpConn).Read(0x1157ae60, 0x115a6000, 0x8000, 0x8000, 0x0, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:0 +0x53
io.(*teeReader).Read(0x11578fc0, 0x115a6000, 0x8000, 0x8000, 0x82, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:481 +0x53
ngrok/conn.(*Tee).Read(0x11572f30, 0x115a6000, 0x8000, 0x8000, 0x82, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/tee.go:62 +0x53
io.Copy(0x115a5020, 0x114f4900, 0x1157afe0, 0x11572f30, 0x82, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:348 +0x172
ngrok/conn.(*tcpConn).ReadFrom(0x11560920, 0x1157afe0, 0x11572f30, 0x0, 0x0, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:158 +0xf6
io.Copy(0x114f5740, 0x11560920, 0x1157afe0, 0x11572f30, 0x0, ...)
    /usr/local/Cellar/go/1.1.1/src/pkg/io/io.go:340 +0x80
ngrok/conn.func·002(0x114906e0, 0x11560920, 0x115922d0, 0x11572f30, 0x11579a58, ...)
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:110 +0x8a
created by ngrok/conn.Join
    /Users/aes/src/ngrok/src/ngrok/conn/conn.go:122 +0x105

I receive error when i issue make

srinivas@ubuntu:~/workspace/go_space/ngrok$ make
go fmt ngrok/...
go get -tags '' -d -v ngrok/...
go install -tags '' ngrok/main/ngrok

ngrok/client/views/term

src/ngrok/client/views/term/http.go:49: method v.Run is not an expression, must be called
src/ngrok/client/views/term/view.go:40: method v.run is not an expression, must be called
src/ngrok/client/views/term/view.go:41: method v.input is not an expression, must be called

ngrok/client/views/web

src/ngrok/client/views/web/http.go:87: method whv.updateHttp is not an expression, must be called
make: *** [client] Error 2

Add support for project-wise config files and default tunnels

The few features I miss is the ability to have project-wise config files containing the tunnels that need to be initiated for the project.

For instance, in my project directory I have next:

# ngrok config, load using: ngrok -config ngrok.yaml start default
tunnels:
    default:
        hostname: "project.example.com"
        proto:
            http: 80

What currently stops me to do this is that:

  • You seem to be unable to load both the ~/.ngrok config file and a custom one, and allowing my personal auth_token to appear in my repo is something I'd rather not do.
  • I still always have to specify the tunnel, and there is not 'default' choice.
  • Getting the public forwarding url is difficult unless specifying, for which you again need to be able to set your auth_token, and using apache vhosts with a dynamic hostname like that is a bit difficult.
  • Wildchars in custom domain names would make this soo much easier, eg.: *.dev.example.com

My current fix:

alias ngrok="ngrok -authtoken $(cat ~/.ngrok |cut -d' ' -f2-)"
alias localtunnel="ngrok -config ngrok.yaml start default"

The only drawbacks are I need to both setup a vhost (which in my case is just a symlink, but that depends on how your development environment is setup, and add the hostname to my ngrok dashboard, which so far is the main annoyance for me.

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.