weidong-qi opened a new issue, #11483:
URL: https://github.com/apache/rocketmq/issues/11483

   ### Before Creating the Bug Report
   
   - [x] I found a bug, not just asking a question, which should be created in 
[GitHub Discussions](https://github.com/apache/rocketmq/discussions).
   - [x] I have searched the [GitHub 
Issues](https://github.com/apache/rocketmq/issues) and [GitHub 
Discussions](https://github.com/apache/rocketmq/discussions)  of this 
repository and believe that this is not a duplicate.
   - [x] I have confirmed that this bug belongs to the current repository, not 
other repositories of RocketMQ.
   
   ### Runtime platform environment
   
   Any (reproduced on macOS)
   
   ### RocketMQ version
   
   develop, git commit id: 57c2dc04f78cc7e73e6b8c9436ee0fff0d0f46c3
   
   ### JDK Version
   
   JDK 17
   
   ### Describe the Bug
   
   `NettyRemotingClient#getProxy` picks a SOCKS proxy by matching the target 
host against each CIDR key of `socksProxyConfig`. For every key other than the 
literal `0.0.0.0/0` it calls `RemotingHelper#ipInCIDR(host, cidr)`, which 
parses the host with `ipToInt` and only accepts dotted IPv4 literals.
   
   When the target address uses a hostname (e.g. `namesrv.example.com:9876`, 
common with Kubernetes service names) or an IPv6 literal, `ipToInt` throws 
`NumberFormatException`. The exception escapes `getProxy` → `fetchBootstrap` → 
`doConnect`, so the client cannot connect to that address at all, even though 
it should just not match that CIDR.
   
   ### Steps to Reproduce
   
   ```java
   NettyClientConfig config = new NettyClientConfig();
   config.setSocksProxyConfig("{\"10.0.0.0/8\":{\"addr\":\"127.0.0.1:1080\"}}");
   NettyRemotingClient client = new NettyRemotingClient(config);
   // any invoke against "namesrv.example.com:9876" reaches getProxy(...)
   ```
   
   Calling `getProxy("namesrv.example.com:9876")` (e.g. via reflection) throws:
   
   ```
   java.lang.NumberFormatException: For input string: "namesrv"
        at 
org.apache.rocketmq.remoting.common.RemotingHelper.ipToInt(RemotingHelper.java)
        at 
org.apache.rocketmq.remoting.common.RemotingHelper.ipInCIDR(RemotingHelper.java)
        at 
org.apache.rocketmq.remoting.netty.NettyRemotingClient.getProxy(NettyRemotingClient.java)
   ```
   
   ### What Did You Expect to See?
   
   A hostname or IPv6 host that cannot be compared against an IPv4 CIDR does 
not match that entry (no proxy, direct connection), and can still match the 
`0.0.0.0/0` catch-all entry.
   
   ### What Did You See Instead?
   
   `NumberFormatException` is thrown and the connection attempt fails.
   
   ### Additional Context
   
   This is separate from #11068, which fixes the `/0` mask computation inside 
`ipInCIDR`. The fix proposed here only touches `NettyRemotingClient#getProxy`, 
so the two changes do not overlap.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to