netdebug

module
v0.0.0-...-2ee5390 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 11, 2024 License: MIT

README

netdebug -- a collection of network debug tooling

Subcommands:

  • dns performs a DNS query
  • echo runs an HTTP or gRPC echo server.
  • listen runs a TCP server.
  • send creates a TCP connection and sends a payload.

dns

netdebug dns -t mx github.com
netdebug dns -d 1.1.1.1:53 -t mx github.com

echo

# Run with default settings: HTTP/1, port 8080
netdebug echo

# Listen only on 127.0.0.1
netdebug echo --host=127.0.0.1

# Run HTTP/2 with self-signed certificate, port 8443
netdebug echo --tls-autogenerate --port=8443

gRPC mode has server reflection enabled, and thus you can:

# Run gRPC with self-signed certificate, port 8443
netdebug echo --tls-autogenerate --port=8443 --mode=grpc

# and then...
grpcurl -insecure localhost:8443 list

pkg.echo.v1.Echoer/Echo

# Run gRPC with self-signed certificate, port 8443
netdebug echo --tls-autogenerate --port=8443 --mode=grpc

grpcurl -insecure -d '{"query":"deadbeef"}' -rpc-header 'x-foo-id: bar-123' localhost:8443 pkg.echo.v1.Echoer.Echo

There's also a grpc and HTTP mode:

# Run gRPC and HTTP with self-signed certificate, port 8443
netdebug echo --tls-autogenerate --port=8443 --mode=grpc+http

# gRPCurl will still work:
grpcurl -insecure localhost:8443 list

# as will regular curl with HTTP/1 and HTTP/2
curl --http1.1 -k https://localhost:8443/
curl --http2 -k https://localhost:8443/

In fact, with the help of protoc, grpcto, and curl, you can hand-craft a gRPC request over HTTPS:

# Run gRPC and HTTP with self-signed certificate, port 8443
netdebug echo --tls-autogenerate --port=8443 --mode=grpc+http

echo 'query:"fizzbuzz"' \
    | protoc --encode pkg.echo.v1.EchoRequest ./pkg/echo/v1/echo.proto \
    | grpcto frame \
    | curl -X POST -k -v --data-binary @- -H "Content-Type: application/grpc" --raw https://localhost:8443/pkg.echo.v1.Echoer/Echo \
    | grpcto unframe \
    | protoc --decode_raw

or HTTP:

# Run gRPC and HTTP
netdebug echo --port=8080 --mode=grpc+http

echo 'query:"fizzbuzz"' \
    | protoc --encode pkg.echo.v1.EchoRequest ./pkg/echo/v1/echo.proto \
    | grpcto frame \
    | curl -X POST -v --data-binary @- -H "Content-Type: application/grpc" --raw --http2 --http2-prior-knowledge http://localhost:8443/pkg.echo.v1.Echoer/Echo \
    | grpcto unframe \
    | protoc --decode_raw

pkg.echo.v1.Echoer/Status

There's also a Status procedure that allows you to request that the server return arbitrary errors:

# Run gRPC
netdebug echo --port=8080 --mode=grpc

grpcurl -v -plaintext -d '{"force_grpc_status":3,"message":"oopsie!"}' localhost:8080 pkg.echo.v1.Echoer/Status

which might return something like:

Resolved method descriptor:
rpc Status ( .pkg.echo.v1.StatusRequest ) returns ( .pkg.echo.v1.StatusResponse );

Request metadata to send:
(empty)

Response headers received:
content-type: application/grpc
trailer: Grpc-Status
trailer: Grpc-Message
trailer: Grpc-Status-Details-Bin

Response trailers received:
(empty)
Sent 1 request and received 0 responses
ERROR:
  Code: InvalidArgument
  Message: oopsie!

listen and send

Start listening in one terminal:

netdebug listen --port=20202

and send stuff to it in a different terminal:

date | netdebug send --address=localhost:20202

Directories

Path Synopsis
cmd
pkg
app
dns

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL