plow icon indicating copy to clipboard operation
plow copied to clipboard

localhost IPv6 resolution

Open Shaokun-X opened this issue 7 months ago • 2 comments

Hi there, thanks for your amazing work! I recently found that plow doesn't seem to be able to resolve localhost to IPv6 address if IPv4 failed.

What I have observed

I have an endpoint that only allows IPv6 access:

$ curl -v http://localhost:8080/api/endpoint

*   Trying 127.0.0.1:8080...
* connect to 127.0.0.1 port 8080 failed: Connection refused
*   Trying [::1]:8080...
* Connected to localhost (::1) port 8080 (#0)
> GET /api/endpoint
> Host: localhost:8080
> User-Agent: curl/8.1.2
> Accept: */*
>
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< content-type: application/json
< content-length: 10
< connection: close
< date: Tue, 07 Nov 2023 12:00:00 GMT
< cache-control: no-store
< vary: Cookie
<
{"data": 1}

If I use plow, it drops the requests when it doesn't manage to connect to the IPv4 address 127.0.0.1:

$ plow -n 10 http://localhost:8080/api/endpoint
Benchmarking http://localhost:8080/api/endpoint with 10 request(s) using 1 connection(s).
@ Real-time charts is listening on http://[::]:18888

Summary:
  Elapsed         0s
  Count           10
  RPS       1542.933
  Reads    0.000MB/s
  Writes   0.000MB/s

Error:
  10  "dial tcp4 127.0.0.1:8080: connect: connection refused"

What I expect

plow can try to connect to IPv6 address when the IPv4 is refused while using localhost, like curl does

My setup

plow: 1.3.1
OS: macOS 13.6.1 22G313 x86_64
Shell: zsh 5.9
CPU: Intel i5-1038NG7 (8) @ 2.00GHz

Shaokun-X avatar Nov 07 '23 10:11 Shaokun-X

Also it is not possible to pass the IPv6 address directly:

$  plow -n 10  "http://[::1]:8080/api/endpoint"

Error:
  10  "couldn't find DNS entries for the given domain. Try using DialDualStack"

Shaokun-X avatar Nov 07 '23 10:11 Shaokun-X

Thank you for your feedback. Integrating IPv6 with the proxy functionality in fasthttp might be somewhat challenging and could require substantial modifications. I will think about how to implement this in a more refined manner.

six-ddc avatar Feb 29 '24 01:02 six-ddc