InetAddress API extension

Sergey Chernyshev serge.chernyshev at bell-sw.com
Fri Mar 29 02:53:26 UTC 2024


Hi David,
Thank you for your comments.

Am 28.03.24 um 21:09 schrieb David Lloyd:
>
>     I would like to propose a PR to extend the InetAddress API in JDK
>     23, namely to provide interface to constructing InetAddress
>     objects from literal addresses in POSIX/BSD form (please see the
>     discussion [1]), to the Apps that need to mimic the behavior of
>     POSIX network APIs (|inet_addr|) used by standard network
>     utilities such as netcat/curl/wget and the majority of web
>     browsers. At present time, there's no way to construct
>     |InetAddress| object from such literal addresses because the new
>     API |InetAddress.ofLiteral()| and |Inet4Address.ofLiteral()| will
>     consume an octal address and successfully parse it as decimal,
>     ignoring the octal prefix. Hence, the resulting object will point
>     to a different IP address than it is expected to point to. There's
>     also no direct way to create an InetAddress from a literal address
>     with hexadecimal segments, although this can be the case in
>     certain systems.
>
> Would this proposal be unique to IPv4 addresses, or is there an 
> equivalent for IPv6? (I would suspect that there isn't, given that the 
> parsing rules for IPv6 are a bit more well-defined...)

Yes this is IPv4 specific.

>     It is suggested to add a new factory method such as
>     |.ofPosixLiteral()| to |Inet4Address| class to fill this gap. This
>     won't introduce ambiguity into the API and won't break the long
>     standing behavior. As a new method, it will not affect Java
>     utilities such as HttpClient, nor the existing Java applications.
>     At the same time, the new method will help dealing with confusion
>     between BSD and Java standards.
>
>
> I would suggest normatively calling this behavior "POSIX standard" 
> parsing (not BSD or POSIX/BSD), since it (at least nominally) comes 
> from a standards body [1]. Bear in mind that `inet_pton` follows 
> different rules though [2]. RFC 6943 [3] has a bit more to say about 
> so called "loose" vs "strict" IP address parsing rules.

Thanks, I will put a note on it in the PR and update the motivation text 
accordingly.

>     There could be a slight discrepancy in terms of how different
>     standard tools are working under different OS. For example in
>     MacOS wget & nc disregard octal prefix (0) while allowing
>     hexadecimal prefix (0x), at the same time curl & ping process both
>     prefixes. In Ubuntu Server 22.04 both prefixes are processed, but
>     they are not allowed in /etc/hosts file, while in MacOS it's legal
>     to use 0x. Despite the deviations in how and where the BSD
>     standard is implemented, there are two distinct approaches. I
>     don't see why Java should't provide two different indepentent
>     APIs. It would give the future apps flexibility to decide which
>     standard to rely on, ability to see the full picture.
>
>     Please share your thoughts on whether such a change might be
>     desirable in JDK 23. Thank you for your help!
>
> I guess it could be useful when the need arises to interoperate with 
> tooling that supports this kind of syntax, and if it was done, I would 
> agree that a separate method would be the way to go. But, I don't have 
> any comment as to whether the potential use cases are sufficient to 
> justify the API surface and additional implementation complexity 
> (whatever that may be).

This is the primary use case of the proposed API. Implementaions that 
rely on inet_addr() syntax are still too widespread to ignore them.

>
> As another random data point: the projects I've been working on have 
> relegated such extra-JDK IP address handling tasks to a utility 
> library [4]. We don't have a parser for this particular syntax though.

I think Guava and Apache Commons both have similar utility classes. 
Neither of them have that syntax. But I also see libraries that do have 
that syntax - an example is IPAddress library 
(https://github.com/seancfoley/IPAddress).

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/net-dev/attachments/20240329/7f8b2995/attachment-0001.htm>


More information about the net-dev mailing list