当前位置: 首页 > 面试题库 >

地址是非法长度

谢雅珺
2023-03-14
问题内容

我正在检查ipAddress是否在私有类别中。所以我在下面写了这个方法。我得到的是一个例外

java.net.UnknownHostException: addr is of illegal length
    at java.net.InetAddress.getByAddress(InetAddress.java:948)
    at java.net.InetAddress.getByAddress(InetAddress.java:1324)

ipAddress(172.18.36.81)是字符串

if(isPrivateIPAddress(ipAddress)) {

            return null;
        }


private static boolean isPrivateIPAddress(String ipAddress) {

    byte[] byteArray = null;
    InetAddress ia = null;
    try {
        byteArray = ipAddress.getBytes("UTF-16LE");
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    try {
        ia = InetAddress.getByAddress(byteArray);
    } catch (UnknownHostException e) {

        e.printStackTrace();
    }

    return ia.isSiteLocalAddress();
}

问题答案:

我认为您误解了如何将IP地址从转换Stringbyte[]。这样做的正确方法是解析Stringints 的序列,然后将每个序列转换为a
byte。但幸运的是,InetAddress已经有一种方法可以为您处理该问题,因此您可以编写:

private static boolean isPrivateIPAddress(String ipAddress)
{
    return InetAddress.getByName(ipAddress).isSiteLocalAddress();
}

(以及所需的任何有效性检查和错误处理)。

请注意,以上内容还将通过使用DNS查找来处理主机名。如果您不想这样做,则需要使用以下方法预先检查IP地址:

if(! Pattern.matches("(\\d{1,3}\\.){3}\\d{1,3}", ipAddress)
    throw new IllegalArgumentException();

如果您只支持IPv4可以。



 类似资料:
  • 后台地址是啥? 1.thinkcmf 默认后台地址是/admin 2.如果在后台开启后台地址加密码的功能,那地址就是/?g=admin&upw=系统为你生成的加密码 后台地址加密码开启了,但我没有记呀? 没办法其实 Dean 也无能为力呀! 好吧...我太好了 1.打开 data/conf/config.php文件,记得别用 windows 的记事本打开 2.找到SP_SITE_ADMIN_URL

  • 问题内容: 我想知道Android设备的IP地址是数据IP还是Wifi IP。 1)首先将设备连接到3G,然后将设备分配给网络IP。 2)之后将设备连接到WIFI,现在该设备将分配给WIFI IP。 3)任何可以让我们知道IP地址是Wifi IP地址还是网络IP的Android API? 在2.3.5中使用了下面的代码,一切都很好,但是在4.0.3中,ICS存在一些问题。 请帮助 4)当我关闭移动

  • 问题内容: 我试图了解该方法的本地实现。该方法究竟返回什么?是内存地址还是随机值? 问题答案: 本机实现取决于JVM。 例如,HotSpot有6个实现。您可以通过命令行使用运行JVM的标志来选择它,其中n: 0 – Park-Miller RNG(默认) 1 – f(地址,global_statement) 2 –常量1 3 –串行计数器 4 –对象地址 5 –线程本地Xorshift

  • 在上一篇文章中,我们已经初步实现了交易。相信你应该了解了交易中的一些天然属性,这些属性没有丝毫“个人”色彩的存在:在比特币中,没有用户账户,不需要也不会在任何地方存储个人数据(比如姓名,护照号码或者 SSN)。但是,我们总要有某种途径识别出你是交易输出的所有者(也就是说,你拥有在这些输出上锁定的币)。这就是比特币地址(address)需要完成的使命。在上一篇中,我们把一个由用户定义的任意字符串当成

  • 我正试图遵循这个指南https://aws.amazon.com/blogs/containers/using-alb-ingress-controller-with-amazon-eks-on-fargate/ 步骤如下: 集群资源调配AWS_REGION=us-east-1集群_NAME=eks fargate alb演示 eksctl创建集群--name$cluster\u name--re

  • 通过该接口可以设置用户视频播放地址的有效时间 (需开通视频播放地址有效时长的设置权限), 地址为: http://spark.bokecc.com/api/authtimeout/update 需要传递以下参数: 参数 说明 userid 用户 id,不可为空 status 是否开启 自定义播放地址有效时长 0 关闭 (默认2小时,设置timeout值无效) ,1开启 (必须设置timeout值)