Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 166: Proxy support #480

Merged

Conversation

nmische
Copy link
Contributor

@nmische nmische commented Sep 1, 2024

This PR removes the custom dialer used by grpcurl such that the default grpc-go dialer is used. The default grpc-go dialer supports proxy configuration similar the net.http package (e.g. ProxyFromEnvironment).

I'm assuming this is a safe change as all the tests continue to pass and I can now use the HTTPS_PROXY environment variable to route grpcurl calls through a proxy. That said, it is not clear to me why a custom dialer was used in the first place, so it is possible I am missing something here. (Based on my reading of the code, the custom dialer doesn't seem to add any additional functionality above and beyond a default net.Dialer.)

I have been using grpcurl for a couple of years now, but have only recently needed to use it with a proxy, so I would appreciate any feedback on this PR. Thanks!

Addresses #166

@nmische nmische changed the title fix: 166: Remove custom dialer. feat: 166: Remove custom dialer. Sep 1, 2024
@nmische nmische changed the title feat: 166: Remove custom dialer. feat: 166: Proxy support Sep 1, 2024
// of "https" because it is unaware that TLS is actually in use.
conn, err := (&net.Dialer{}).DialContext(ctx, network, address)
if err != nil {
writeResult(err)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jhump you probably have the most context on the custom dialer... maybe there was a desire to intercept dial errors here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the quick feedback @dragonsinth! I had a similar thought, but I believe any dialer errors would be handled in a similar fashion (via writeResult()) here.

Unfortunatley the default grpc-go dialer is in an internal package, so if there is a desire to keep this error handling here I think the grpc-go dialer code would need to be ported over to grpcurl. I actually started down that path before opting for this approach. I would be happy to submit that PR as well if it would help evaluate how to address this feature request.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's see if jhump has some "context" on this :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @dragonsinth and @jhump, I went ahead and posted PR #481 which hopefully helps determine a path forward for proxy support gprcurl. Thanks!

@dragonsinth dragonsinth merged commit cdb43b0 into fullstorydev:master Oct 3, 2024
7 checks passed
@stuartcarnie
Copy link

I reverted this patch and it resolves #496

@zhyuri zhyuri mentioned this pull request Dec 19, 2024
4 tasks
bungle added a commit to Kong/kong that referenced this pull request Jan 28, 2025
### Summary

### v1.9.2

- update core Go version in go.mod to 1.21
- chore: update to Golang 1.23 (fullstorydev/grpcurl#485)
- Update README.md (fullstorydev/grpcurl#353)
- Remove custom dialer in order to use the default grpc-go dialer, which supports proxies. (fullstorydev/grpcurl#480)
- makefile updates (fullstorydev/grpcurl#484)
- feat: Add functionality to export proto files (fullstorydev/grpcurl#475)
- Bump google.golang.org/protobuf from 1.34.1 to 1.34.2 (fullstorydev/grpcurl#470)
- add 32bit arm build targets (fullstorydev/grpcurl#461)
- Bump google.golang.org/protobuf from 1.34.0 to 1.34.1 (fullstorydev/grpcurl#465)
- feat: introduce transparent client side health check (fullstorydev/grpcurl#463)
- Bump google.golang.org/protobuf (fullstorydev/grpcurl#460)
- Bump golang.org/x/net from 0.22.0 to 0.23.0 (fullstorydev/grpcurl#458)

### v1.9.1

- Update Dockerfile to use Go v1.21 (fullstorydev/grpcurl#455)
- chore: fix some typos in comments (fullstorydev/grpcurl#454)

### v1.9.0

- Use latest protoreflect to fix some bugs (fullstorydev/grpcurl#453)
- Brand name update (fullstorydev/grpcurl#452)
- Bump github.com/golang/protobuf from 1.5.3 to 1.5.4 (fullstorydev/grpcurl#448)
- goreleaser: bump version & add nfmp support fullstorydev/grpcurl#440)
- Enable xDS credentials (fullstorydev/grpcurl#424)
- Bump github.com/jhump/protoreflect from 1.15.5 to 1.15.6 (fullstorydev/grpcurl#446)
- Use localhost for default unix domain socket authority (fullstorydev/grpcurl#445)
- Bump github.com/jhump/protoreflect from 1.15.4 to 1.15.5 (fullstorydev/grpcurl#443)
- Added initial support for -t flag to show timings (fullstorydev/grpcurl#428)
- Expand the documentation of -max-time to clarify this sets the RPC timeout (fullstorydev/grpcurl#435)
- Bump github.com/jhump/protoreflect from 1.15.3 to 1.15.4 (fullstorydev/grpcurl#436)
- Bump google.golang.org/protobuf from 1.31.0 to 1.32.0 (fullstorydev/grpcurl#437)
- indent: rip out old go 1.9 support
- Bump golang.google.org/grpc to v1.57.1 (fullstorydev/grpcurl#427)
- Update Tarball URL used by Homebrew (fullstorydev/grpcurl#421)

#### v1.8.9

- Disable CGO for improved compatibility across distros (fullstorydev/grpcurl#420)
- Bump golang.org/x/net from 0.9.0 to 0.17.0 (fullstorydev/grpcurl#419)
- SIGSEGV: panic: runtime error: invalid memory address or nil pointer dereference in protoreflect (fullstorydev/grpcurl#416)
- Added alts credential option (fullstorydev/grpcurl#341)

#### v1.8.8

- Update go.mod, goreleaser for v1.8.8 (fullstorydev/grpcurl#413)
- Run tests on Go 1.21 (fullstorydev/grpcurl#408)
- Update protoreflect v1.15.2 and grpc v1.57.0 (fullstorydev/grpcurl#406)
- Use grpc.reflection.v1.ServerReflection (fullstorydev/grpcurl#407)
- Bump google.golang.org/protobuf from 1.30.0 to 1.31.0 (fullstorydev/grpcurl#401)
- Bump google.golang.org/grpc from 1.55.0 to 1.56.1 (fullstorydev/grpcurl#400)
- Fix issues with error details (fullstorydev/grpcurl#379)
- fix nil-dereference panic (fullstorydev/grpcurl#395)
- Bump google.golang.org/grpc from 1.54.0 to 1.55.0 (fullstorydev/grpcurl#390)
- Add "checkgenerate" make target to CI (fullstorydev/grpcurl#385)
- Bump google.golang.org/grpc from 1.53.0 to 1.54.0 (fullstorydev/grpcurl#383)
- Bump google.golang.org/protobuf from 1.29.1 to 1.30.0 (fullstorydev/grpcurl#378)
- Bump google.golang.org/protobuf from 1.29.0 to 1.29.1 (fullstorydev/grpcurl#376)
- Bump google.golang.org/protobuf from 1.28.1 to 1.29.0 (fullstorydev/grpcurl#375)
- Bump github.com/golang/protobuf from 1.5.2 to 1.5.3 (fullstorydev/grpcurl#374)
- Bump google.golang.org/grpc from 1.52.3 to 1.53.0 (fullstorydev/grpcurl#370)
- Install the CodeSee workflow. Learn more at https://docs.codesee.io (fullstorydev/grpcurl#368)
- Bump google.golang.org/grpc from 1.51.0 to 1.52.3 (fullstorydev/grpcurl#365)
- Bump github.com/jhump/protoreflect from 1.14.0 to 1.14.1 (fullstorydev/grpcurl#361)
- Bump google.golang.org/grpc from 1.50.1 to 1.51.0 (fullstorydev/grpcurl#348)
- fix funcname in comment (fullstorydev/grpcurl#346)
- Bump github.com/jhump/protoreflect from 1.13.0 to 1.14.0 (fullstorydev/grpcurl#343)
- Bump google.golang.org/grpc from 1.50.0 to 1.50.1 (fullstorydev/grpcurl#338)
- Bump google.golang.org/grpc from 1.49.0 to 1.50.0 (fullstorydev/grpcurl#336)
- Bump github.com/jhump/protoreflect from 1.12.0 to 1.13.0 (fullstorydev/grpcurl#335)
- Bump google.golang.org/grpc from 1.48.0 to 1.49.0 (fullstorydev/grpcurl#330)
- fixup release process (fullstorydev/grpcurl#328)

#### v1.8.7

- Unix sockets for windows
- Lots of dependency version updates
- Support for Go 1.18
- Add go 1.18 support; set Dockerfile to go 1.18 (fullstorydev/grpcurl#325)
- build alpine base image (fullstorydev/grpcurl#311)
- fix some typos (fullstorydev/grpcurl#314)
- Bump google.golang.org/grpc from 1.47.0 to 1.48.0 (fullstorydev/grpcurl#324)
- Adding power(ppc64le) arch support (fullstorydev/grpcurl#296)
- Enable support for Unix sockets for Windows by enabling -unix flag for Windows builds. (fullstorydev/grpcurl#317)
- Bump google.golang.org/grpc from 1.46.2 to 1.47.0 (fullstorydev/grpcurl#315)
- Bump github.com/jhump/protoreflect from 1.10.3 to 1.12.0 (fullstorydev/grpcurl#294)
- Bump google.golang.org/grpc from 1.44.0 to 1.46.2 (fullstorydev/grpcurl#310)
- Bump google.golang.org/protobuf from 1.27.1 to 1.28.0 (fullstorydev/grpcurl#298)
- use newer goreleaser (fullstorydev/grpcurl#293)
- Restore support for linux/s390x for the next release. (fullstorydev/grpcurl#292)
- Bump google.golang.org/protobuf from 1.26.0 to 1.27.1 (fullstorydev/grpcurl#288)

#### v1.8.6

- Some bugs have been addressed in the library used to parse proto source files.
  Previously grpcurl would accept proto source files that could not actually be compiled with protoc.
  The converse could also happen: grpcurl could reject some proto source files that could successfully
  be compiled with protoc. More details can be found in the release notes for the changes to
  the protoparse library, versions v1.10.2 and v1.10.3.
- Some implementations of the server reflection service have been observed to return multiple
  (even superfluous) file descriptors, in response to requests made by grpcurl. These extra files,
  if not returned in a particular order, would cause grpcurl to report an error that the service
  or method to be invoked could be not be resolved. The reflection client in grpcurl is now more
  robust to this condition and can handle responses with file descriptors in any order, so it should
  be interoperable with a larger variety of servers.
- When a request message includes a field of type google.protobuf.Value and a value for that field
  that was a JSON array, grpcurl would incorrectly interpret the JSON array as if it were a single
  atomic value, the last value that was in the array. This has been fixed.
- When a response message includes non-printable characters or code points outside the ASCII 7-bit
  range in the name of a field in a JSON object, it could be improperly encoded with escape characters
  that are not valid JSON. Standard tools/libraries could then fail to parse the JSON output from grpcurl.
  This has been fixed.

Signed-off-by: Aapo Talvensaari <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants