判断两个Ip地址是否同属一个子网-Java

2023-05-16

import java.util.*;

public class PanDuanIpTongZiWang {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String yanMa = sc.next();
            String ip1 = sc.next();
            String ip2 = sc.next();
            if (goodYanMa(yanMa) && goodIp(ip1) && goodIp(ip2)) {
                if ((change(yanMa) & change(ip1)) == (change(yanMa) & change(ip2)))
                    System.out.println("Ip1与Ip2同属一个子网");
                else
                    System.out.println("Ip1与Ip2不属一个子网");
            } else
                System.out.println("不合法的Ip或子网掩码");
        }
    }

    public static long change(String s) { //将十进制分组的Ip,转为十进制不分组的Ip,以方便后续和子网掩码进行&运算
        String[] split = s.split("\\.");
        StringBuilder builder = new StringBuilder();
        for (String s1 : split) {
            String s2 = Long.toString(Long.parseLong(s1), 2);
            while (s2.length() != 8) {
                s2 = new StringBuilder(s2).insert(0, 0).toString();
            }
            builder.append(s2);
        }
        return Long.valueOf(builder.toString(), 2);
    }

    public static boolean goodIp(String s) { //判断Ip是否合法
        String[] split = s.split("\\.");
        if (split.length!=4)
            return false;
        for (String s1 : split) {
            if (Integer.parseInt(s1) < 0 || Integer.parseInt(s1) > 255) {
                return false;
            }
        }
        return true;
    }

    public static boolean goodYanMa(String s) { //判断子网掩码是否合法
        String[] split = s.split("\\.");
        if (split.length != 4)
            return false;
        StringBuilder builder = new StringBuilder();
        for (String s1 : split) {
            if (Integer.parseInt(s1) >= 0 && Integer.parseInt(s1) <= 255) { //若不在0-255之间,则返回false
                String s2 = Long.toString(Long.parseLong(s1), 2); //每组转为二进制
                while (s2.length() != 8) { //若转为二进制之后,长度不够8位,需要在前面补全0
                    s2 = new StringBuilder(s2).insert(0, 0).toString();
                }
                builder.append(s2);
            } else {
                return false;
            }
        }
        String toString = builder.toString();
        if (toString.equals("11111111111111111111111111111111") || toString.equals("00000000000000000000000000000000")) { //全1或者全0的子网掩码也是不合法的
            return false;
        }
        for (int i = 0; i < toString.length() - 1; i++) {
            String substring = toString.substring(i, i + 2);
            if (substring.equals("01")) {//如何判断子网掩码是否合法,在最后拼接好的32位二进制字符串中查找,是否包含“01”,若包含则不合法
                return false;
            }
        }
        return true;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

判断两个Ip地址是否同属一个子网-Java 的相关文章

  • Sklearn到底是什么?

    更多详细代码关注sklearn中文官方文档 xff1a http www scikitlearn com cn http lijiancheng0614 github io scikit learn index html 1 概念 Skle
  • esp8266 error: espcomm_open failed

    gpi0 没有接地 xff0c 接上地就可以了注意和usb分出的gnd接口接的是同一个地
  • 微信小程序quickstart项目中有关userInfoReadyCallback的解释

    userInfoReadyCallback 在index js中定义 xff0c 在app js中使用 附app js代码 xff1a app js App onLaunch function 展示本地存储能力 var logs 61 wx
  • 微信小程序引入模块中wxml、wxss、js

    先描述下目录结构 xff0c 见下图 UI页面见下图 其中ok按键是引入的log模块 xff0c log模块非page页 indexButton是index页本身拥有的组件 xff0c index页直接导入Log模块中的组件 xff0c c
  • PHP解析错误 PHP Parse error: syntax error, unexpected '[' in

    之前做了一次php后台代码在不同服务器的迁移 xff0c 代码迁移到新服务器上 xff0c 代码运行不了 xff0c 返回500内部错误 500 内部错误 xff0c 就查看服务器上 var log php fpm www error lo
  • 微信小程序使用video组件时的一些坑

    xff08 1 xff09 mp4视频用video组件播放会卡顿 绿屏 尤其是在快进 拖动时间条时 在video组件上 xff0c 试试加个custom cache 61 false 属性 xff0c 可以完美解决卡顿 绿屏的现象 xff0
  • java中JFrame中函数removeAll的用法

    解答链接 用baidu搜了半天搜不出来 xff0c 用google一下就出来了 下面用自己的代码来解释下removeAll xff08 xff09 的用法 注意一定要在getContentPane xff08 xff09 中用removeA
  • ROS中的package.xml详解

    span class token prolog lt xml version 61 34 1 0 34 gt span span class token tag span class token tag span class token p
  • (一)了解Freertos

    关于Freertos FreeRTOS非常适合使用微控制器或小型微处理器的深度嵌入式实时应用程序 这种类型的应用程序通常包含硬实时需求和软实时需求 软实时需求 是那些规定了一个时间截止日期的需求 但是违反这个截止日期并不会使系统崩溃 例如
  • 如何关闭iOS系统自动更新提示?

    原文链接 xff1a https www zhihu com question 37297197 打开iPhone或者iPad的Safari浏览器 xff0c 复制以下网址并从自带浏览器打开 https oldcat me web NOOT
  • 大数据高级开发工程师——大数据相关工具之三 Maxwell

    文章目录 大数据相关工具Maxwell数据实时同步工具Maxwell 简介Maxwell工作原理MySQL Binlog 介绍1 Binlog简介2 Binlog的日志格式 Mysql 实时数据同步方案对比开启MySQL的BinlogMax
  • TF-IDF算法详解及sklearn代码实现

    目录 1 基本介绍 xff08 1 xff09 TF xff08 词频 Term Frequency xff09 xff08 2 xff09 IDF xff08 逆向文件频率 Inverse Document Frequency xff09
  • UEFI下Windows启动引导的顺序(附带linux双系统)

    这里均以64位系统 xff08 windows和linux均是 xff09 xff0c gpt分区 xff0c UEFI引导作为例子 xff0c 现在基本上不会不支持吧 windows下UEFI引导文件的载入顺序 主板启动windows的一
  • 在ROS环境下用yolov3-tiny训练自己的数据集

    由于整个过程新建 修改 设置的文件和参数较多 所以我先放张整个流程分析图在这 xff0c 方便大家结合下列步骤去更好理解 0 提前准备 xff1a 下载darknet xff08 yolov3 xff09 并编译 span class to
  • ROS下使用usb_cam驱动读取摄像头数据

    因为darknet ros会直接订阅指定的图像话题名 xff0c 然后对图像进行检测 xff0c 绘制检测框 xff0c 并发布相应的检测话题 xff0c 因此首先需要找一个能够发布图像话题的ROS包 xff0c 这里经推荐使用ROS官方提
  • python 各种加密

    背景 加密学习 对称加密 对称密钥加密 xff0c 又叫私钥加密 即信息发送的方和接受方用一个密钥去加密和揭秘数据 最大的优势是 加解密速度快 xff0c 适合对大量数据进行加密 xff0c 对称加密的缺点是密钥的管理和分配 xff0c 换
  • 参加中国移动开发者大会有感

    作为我校CSDN俱乐部的主席 xff0c 我很荣幸受到CSDN的邀请参加中国移动开发者大会 xff0c 下面写点自己的感悟 xff1a 移动互联网应用大时代已经到来 xff0c 所有的IT应用都将移动化 xff0c 所有的信息服务都将移动化
  • IntelD435摄像头将深度图与摄像头进行像素对齐(并抽帧保存)

    coding 61 utf 8 import pyrealsense2 as rs import numpy as np import cv2 import os 创建一个管道 pipeline 61 rs pipeline Create
  • python3 可视化COCO格式json文件目标检测矩形框

    import os import json import argparse from PIL import Image ImageDraw ImageFont FONT SIZE 61 13 2 IMAGE FONT 61 ImageFon
  • 对比图像清晰度(模糊度)之灰度方差算法 python代码实现

    灰度方差算法 图像最清晰 xff0c 图像中的高频分量也最多 xff0c 该算法以图像所有像素的灰度平均值为参考 xff0c 对每个像素点的灰度值求差后求平方和 xff0c 然后用像素总数标准化 xff0c 它表征了图像灰度变化的平均程度

随机推荐

  • pytorch使用 ROIalign 代码实例

    batch size 61 x shape 0 all roi align feats 61 for i in range batch size hmap1 s 61 out hmap 1 i hmap1 s 61 hmap1 s unsq
  • python resize dicom(dcm)代码

    from glob import glob import os import pydicom import numpy as np import cv2 dcm list 61 sorted os listdir 39 xxxx 39 fo
  • 基于opencv和ffmpeg的图片转换成视频的两种方法实现,可生成H264格式

    opencv转换图片为视频 xff08 生成视频格式为MJPG xff09 encoding UTF 8 import glob as gb import cv2 图片文件夹地址 img path 61 gb glob 34 G temp
  • VGG16提取图片特征

    import os import numpy as np import torch import torch nn import torchvision models as models from torch autograd import
  • 防火墙之数据包过滤iptables

    内容简介 防火墙的概述 1 iptables简介 2 iptables基础 3 iptables语法 4 iptables实例 案例详解 xff08 一 xff09 防火墙的简介 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合
  • Ubuntu apt-get 和 pip 更换源

    Ubuntu系统自带的源都是国外的网址 xff0c 国内用户在使用的时候网速比较慢 一个软件的下载是十分痛苦的 xff0c 这里讲解一下如何将国外源更换为国内源 xff0c 让你的网速Biu Biu Biu 更换apt get数据源 1 备
  • Linux如何解决动态库的版本控制

    xff08 换句话说 xff0c soname不是真实存在的文件 xff0c 只是在此库中和将来调用此库的文件中保存的一个名字 xff0c 在加载时去找这个名字 xff0c 使用时创建一个软连接来指向真实文件 xff0c 这样真实文件的版本
  • C语言中可变参数函数实现原理

    C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关 xff0c 正常情况下C的函数参数入栈规则为 stdcall 它是从右到左的 xff0c 即函数中的最右边的参数最先入栈 例如 xff0c 对于函数 xff1a void f
  • Linux串口测试应用程序

    1 Linux终端 串口 210开发板有4个串口 2440开发板有3个串口 在2440开发板中三个串口设备对应如下 串口名字 主设备号 次设备号 s3c2410 serial0 204 64 s3c2410 serial1 204 65 s
  • 开发板上syslog使用方法小结

    首先我们需要先确认我们的开发板上是否安装了syslog服务 xff0c 在开发板的文件系统下输入syslogd help命令查看如果不支持就是busybox的版本太低了 当确定安装了后我们根据help显示的默认配置文件来查看该配置文件是否存
  • Perl中文件读取操作

    一 打开 关闭文件 语法为open filevar filename xff0c 其中filevar为文件句柄 xff0c 或者说是程序中用来代表某文件的代号 xff0c filename为文件名 xff0c 其路径可为相对路径 xff0c
  • web服务器之mongoose:安装

    引言 Mongoose开源项目的主页是http code google com p mongoose Mongoose是一个web服务器 xff0c 通过提供一个web接口给它 xff0c 它可以嵌入到现有的应用程序中去 Mongoose
  • web服务器之mongoose:核心处理模块

    引言 前面我们介绍了Mongoose所有的几个主要的数据结构mg context mg connection mg request info xff0c 还有Mongoose的生命主线 有了这些基础就可以来看看Mongoose的核心处理工作
  • mtd-utils工具的使用

    在ubuntu 10 04上交叉编译编译 mtd utils 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 2020-12-29 DOS命令启动MySQL服务时,出现(系统错误5,拒绝访问)的错误提示

    在用DOS命令启动MySQL服务时 xff0c 出现 xff08 系统错误5 xff0c 拒绝访问 xff09 的错误提示 xff0c 这是由于我们操作的权限不足造成的 xff0c 需要以管理员身份启动 xff0c 解决问题方法如下 1 W
  • 柔性管理法则与柔性管理案例

    转载自 xff1a http www caecp cn News News 954 html 柔性管理是在研究人们心理和行为规律的基础上采用非强制方式 xff0c 在人们心目中产生一种潜在的说服力 xff0c 从而把组织意志变为人们自觉的行
  • linux 设备驱动开发基本概念

    任何一个计算机系统的运转都是系统中软硬件共同努力的结果 xff0c 没有硬件的软件是空中楼阁 xff0c 而没有软件的硬件则只是一堆废铁 硬件是底层基础 xff0c 是所有软件得以运行的平台 xff0c 代码最终会落实为硬件上的组合逻辑与时
  • 怎样快速判断两个ip地址是否处于同一子网(不用转二进制,不用按位与运算)

    1 使用 256 子网掩码最后一段的数字 xff0c 得到每个子网中的设备数量 xff1b 2 用设备数将0 255编号进行分段 xff0c 在同一子网中的设备会在同一网段 xff1b 例如 xff1a 主机A IP 61 61 48 16
  • stm32 寄存器操作一看就会

    1 寄存器是什么 xff1f 可以查百度 xff0c 查看详情 我 的总结 xff1a 在嵌入式里面寄存器非常非常重要重 xff0c 就是实现软硬件的接口 xff0c 几乎所有的功能操作都是通过操作寄存器来实现的 2 寄存器操作 xff0c
  • 判断两个Ip地址是否同属一个子网-Java

    span class token keyword import span java span class token punctuation span util span class token punctuation span span