精华内容
下载资源
问答
  • 如何获取子网掩码
    千次阅读
    2015-06-03 21:49:57
    import java.util.*;
    import java.net.*;
    
    public class SubnetMask {
        public static void main(String[] args) {
            InetAddress ip = null;
            NetworkInterface ni = null;
            try {
                ip = InetAddress.getLocalHost();
                ni = NetworkInterface.getByInetAddress(ip);// 搜索绑定了指定IP地址的网络接口
            } catch (Exception e) {
                e.printStackTrace();
            }
            List<InterfaceAddress> list = ni.getInterfaceAddresses();// 获取此网络接口的全部或部分
                                                                        // InterfaceAddresses
                                                                        // 所组成的列表
            if (list.size() > 0) {
                int mask = list.get(0).getNetworkPrefixLength(); // 子网掩码的二进制1的个数
                StringBuilder maskStr = new StringBuilder();
                int[] maskIp = new int[4];
                for (int i = 0; i < maskIp.length; i++) {
                    maskIp[i] = (mask >= 8) ? 255 : (mask > 0 ? (mask & 0xff) : 0);
                    mask -= 8;
                    maskStr.append(maskIp[i]);
                    if (i < maskIp.length - 1) {
                        maskStr.append(".");
                    }
                }
                System.out.println("SubnetMask:" + maskStr);
            }
        }
    }
    更多相关内容
  • 百度大法搜的获取网络配置(包括子网掩码)的方法基本都是拿wifimanager的dhcpinfo获取网络信息,这个方法获取到的其他信息都没问题,唯独子网掩码获取到的要么就是错的,要么就是0.0.0.0 参考 ...

    百度大法搜的获取网络配置(包括子网掩码)的方法基本都是拿wifimanager的dhcpinfo获取网络信息。

    这个方法获取到的其他信息都没问题,唯独子网掩码获取到的要么就是错的,要么就是0.0.0.0

    有问题的获取方式如下:

        public static String getNetMask(Context context){
            DhcpInfo dhcpInfo = ((WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE)).getDhcpInfo();
            return formatIpAddress(dhcpInfo.netmask);
        }
        private static String formatIpAddress(int ipAdress) {
    
            return (ipAdress & 0xFF ) + "." +
                    ((ipAdress >> 8 ) & 0xFF) + "." +
                    ((ipAdress >> 16 ) & 0xFF) + "." +
                    ( ipAdress >> 24 & 0xFF) ;
        }

    我使用此方式获取的子网掩码大多数是0.0.0.0,偶尔是255.0.0.0,但真实的子网掩码是255.255.252.0

    参考终于取到了Android的子网掩码 - 简书 (jianshu.com)的方法

    使用ifconfig并解析的方式获取子网掩码,但是参考链接里没有做出网卡区分,在此对这个方法做一定的修改

    针对的默认ifconfig的打印如下:

    wlan0     Link encap:Ethernet  HWaddr 44:01:bb:4e:0d:8a  Driver rtl8723du
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:19568 errors:0 dropped:36 overruns:0 frame:0 
              TX packets:6412 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:1000 
              RX bytes:2554230 TX bytes:3465241 
    
    p2p0      Link encap:Ethernet  HWaddr 46:01:bb:4e:0d:8a  Driver rtl8723du
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:1000 
              RX bytes:0 TX bytes:0 
    
    eth0      Link encap:Ethernet  HWaddr bc:26:1d:04:4a:f9
              inet addr:192.168.50.6  Bcast:192.168.50.255  Mask:255.255.255.0 
              inet6 addr: fe80::6de2:eac1:c614:5ccb/64 Scope: Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:224 errors:0 dropped:0 overruns:0 frame:0 
              TX packets:6665 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:1000 
              RX bytes:29352 TX bytes:2200704 
              Interrupt:41 Base address:0x4000 
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0 
              inet6 addr: ::1/128 Scope: Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:255 errors:0 dropped:0 overruns:0 frame:0 
              TX packets:255 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:1 
              RX bytes:18156 TX bytes:18156

    分别作了获取默认的wlan0的子网掩码和获取eth0的子网掩码,代码如下:

    private static final String defaultIP = "0.0.0.0";
            private static final String command = "ifconfig";
            public static String getWlan0Mask() {
                String TAG = "lanky";
                String Mask = defaultIP;
                try {
                    Process process = Runtime.getRuntime().exec(new String[]{command});
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    do {
                        String line = bufferedReader.readLine();
                        if (line == null) {
                            Log.d(TAG, "test: line is null");
                            break;
                        }
                        if (line.startsWith("wlan0     ")) {
                            Mask = defaultIP;
                        }
                        Mask = getLineMask(line).equals("") ?Mask:getLineMask(line);
                        if (line.startsWith("p2p0      ")) {
                            break;
                        }
    
    
                    } while (true);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return Mask;
            }
            public static String getEth0Mask() {
                String TAG = "lanky";
                String Mask = defaultIP;
                try {
                    Process process = Runtime.getRuntime().exec(new String[]{command});
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    do {
                        String line = bufferedReader.readLine();
                        if (line == null) {
                            Log.d(TAG, "test: line is null");
                            break;
                        }
                        if (line.startsWith("eth0      ")) {
                            Mask = defaultIP;
                        }
                        Mask = getLineMask(line).equals("") ?Mask:getLineMask(line);
                        if (line.startsWith("lo        ")) {
                            break;
                        }
                    } while (true);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return Mask;
            }
    
            private static String getLineMask(String line){
                String TAG = "mask";
                String IP = "";
                if (line.trim().matches("inet addr:(\\d{1,3}\\.){3}\\d{1,3}( ){2}" +
                        "(Bcast:(\\d{1,3}\\.){3}\\d{1,3}( ){2}){0,1}" +
                        "Mask:(\\d{1,3}\\.){3}\\d{1,3}")) {
                    String[] props = line.trim().split("( ){2}");
                    for (String prop : props) {
                        if (prop.length() == 0) {
                            continue;
                        }
    
                        String[] kv = prop.split(":");
                        if (kv[0].startsWith("inet addr")) {
                            Log.d(TAG, "----ipAddr: " + kv[1]);
                        } else if (kv[0].startsWith("Bcast")) {
                            Log.d(TAG, "----Bcast: " + kv[1]);
                        } else if (kv[0].startsWith("Mask")) {
                            Log.d(TAG, "----mask: " + kv[1]);
                            IP = kv[1];
                        }
                    }
                }
                return IP;
            }

    如果有多个网卡,要想获取别的,可以参考我这个代码,根据你自己的ifconfig的打印来修改就好了

    注:需要uid.system和系统签名及权限,适合系统级应用的开发参考,比如setting、Launcher等

    展开全文
  • 本文以一个完整实例形式介绍了C++实现获取IP、子网掩码、网关、DNS等本机网络参数的方法,供大家参考,具体的完整实例如下: #pragma comment(lib,Ws2_32.lib) #include #pragma comment(lib, Iphlpapi.lib) using...
  • 一、原理 1. IP合法 关于IP地址的合法性验证很简单,方法也很多,比如字符串分解、正则表达式等。 2. 子网掩码是否合法 简单来讲,子网掩码就类似这样一串数字,前面一段是...# 根据子网掩码获取网络号 def get_netwo

    一、原理

    1. IP合法

    关于IP地址的合法性验证很简单,方法也很多,比如字符串分解、正则表达式等。

    2. 子网掩码是否合法

    简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1, 类似“111111111“,后面一段是连续的0,类似“00000”,这样合法的样子是“11111111000000000”,总共是32位。

    二.实现

    # /usr/bin/python env
    '''
    网络主机号获取和判断子网掩码的有效性
    '''
    import re
    
    
    # 根据子网掩码获取网络号
    def get_network_mask_number(address):
        number = 0
        address_array = address.split('.')
        flag = False
        for item in address_array:
            binary_item = bin(int(item)).replace('0b', '')
            for number_index in binary_item:
                if int(number_index) == 1:
                    number += 1
                if int(number_index) == 0:
                    flag = True
                    break
            if flag:
                break
        return number
    
    
    '''
      1、是合法的IP地址
      2、二进制码要相邻,即形如111...11000...0的形式
      校验子网掩码的合法性
    '''
    
    
    def check_network_address(address):
        if not address:
            return False
        # 判断是满足合法的IP格式
        pattern = "^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"
        if not re.match(pattern, address):
            return False
        address_array = address.split('.')
        byte_one = bin(int(address_array[0])).replace('0b', '')
        byte_two = bin(int(address_array[1])).replace('0b', '')
        byte_three = bin(int(address_array[2])).replace('0b', '')
        byte_fourth = bin(int(address_array[3])).replace('0b', '')
        binary_address = "{0}{1}{2}{3}".format(byte_one, byte_two, byte_three, byte_fourth)
        if binary_address.find('01') != -1:
            return False
        return True
    
    
    if __name__ == '__main__':
        mask = '255.255.0.0'
        result_flag = check_network_address(mask)
        if result_flag:
            number = get_network_mask_number(mask)
            print(number)
        else:
            print('子网掩码错误')
    

    执行结果
    在这里插入图片描述

    展开全文
  • 以下方法在Android 9.0 TV 下测试可用 步骤如下: 1. Android Manifest中添加INTERNET的权限 2. Runtime.getRuntime().exec(new String[] { "ifconfig" }),再解析结果 try { Process... 终于取到了Android的子网掩码

    以下方法相当于在命令行调用ifconfig再解析字符串,成功率较高。本人在Android 9.0 TV 下测试可用。

    步骤如下:

    1. Android Manifest中添加INTERNET的权限

    <uses-permission android:name="android.permission.INTERNET"/>

    2. Runtime.getRuntime().exec(new String[] { "ifconfig" }),再解析结果

            try {
                Process process = Runtime.getRuntime().exec(new String[] { "ifconfig" });
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                do {
                    String line = bufferedReader.readLine();
                    Log.d(TAG, "onCreate: "+line); // 按行打印结果
                    if (line == null) {
                        break;
                    }
                } while (true);
            } catch (IOException e) {
                e.printStackTrace();
            }

     

    打印结果如下,与命令行中输入ifconfig的方式一致

     

    参考链接

    1. 终于取到了Android的子网掩码

    展开全文
  • MFC 编程获取本机主机名、IP地址、子网掩码等网络信息 《南邮C++程序设计》题目 很有参考价值,写socket程序时用到了
  • 子网掩码计算器是一款能够方便快捷的计算划分子网的工具。子网掩码计算器可以随意调整掩码位,因此可用来计算不标准的子网。用户只要在该ip子网掩码计算器中输入点分十进制的
  • VB获取详细的IP地址信息,包括子网掩码等,程序内有些模块是可以共用的,大家可以复制到其它地方使用,该IP地址的接口索引:  dwMask As Long ‘IP地址的子网络、掩码  dwBCastAddr As Long ‘广播地址(典型的,...
  • C语言编写 网络编程获取子网掩码 需安装库函数
  • localhost接口的第一个地址的网络掩码:InetAddress localHost = Inet4Address.getLocalHost();NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);networkInterface....
  • ipv6子网掩码计算器

    2021-08-17 17:38:16
    目前为止最好用的: IPV6子网掩码计算器
  • 子网掩码计算器.exe

    2021-01-05 21:47:31
    计算子网掩码很方便
  • android获取wifi的IP,子网掩码,网关,dns等信息
  • java获取Centos7服务器网卡ip 子网掩码 默认网关 DNS 同时设置网卡 及 重启网卡参考
  • 对几个IP地址集合的定义:privateList_localAddressFamily = new List();//本机IP地址集合privateList_...//子网掩码集合privateList_defaultIPGateway = new List();// 默认网关集合privateList _broadcastFamily=...
  • 子网掩码计算器 利用子网数来计算。 1.首先,将子网数目从十进制数转化为二进制数; 2.接着,统计得到的二进制数的位数,设为N; 3.最后,先求出此IP地址对应的地址类别的子网掩码。再将求出的子网掩码的主机地址部分...
  • 出现的问题:之前是通过WiFi管理器拿到DhcpInfo对象,获取netmask转换成对应子网掩码。有部分手机会出现获取子网掩码为0.0.0.0,其中魅族手机 系统adnroid 9和vivo 系统android 11会出现掩码为0的问题。 分析问题...
  • VB获取详细的IP地址信息,包括子网掩码
  • 本文详细介绍了子网掩码及其作用,希望对你的学习有所帮助。
  • 本文实例讲述了Python实现根据IP地址和子网掩码算出网段的方法。分享给大家供大家参考。具体如下: 该代码在Linux环境2.6.6python版本测试通过! #!/usr/bin/env python #_*_encoding:utf-8_*_ #Input your ip ...
  • 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 ...
  • 子网掩码又叫网络掩码,能将IP地址划分为网络地址和主机地址。它是指明一个IP地址位标识的主机所在的子网,以及哪些位标识的是主机的位掩码。那么如何找出子网掩码呢?需要的朋友可以参考下
  • 子网数、主机数与子网掩码的关系

    千次阅读 2021-05-25 01:14:53
    前几天有位网友问我一些问题,最多能划分多少个子网,最多能容纳多少台主机,子网掩码怎么算等等。我不假思索的告诉了他结果,可是他又问我结果是怎么来的,详细的计算步骤,这还着实为难了我一下。我干这一行已经有...
  • 转自:http://dingxianye.me/2019/04/03/终于取到了Android的子网掩码/最近工作上有个需求是拿到Android手机的子网掩码(Subnet Mask、Netmask、Mask),但是我发现这事儿并不简单,因为无论是baidu还是google,给出来...
  • windows系统下的桌面程序,可用于计算划分子网掩码、通配符掩码检测、十进制IP与点分十进制IP转换等。 使用说明,如计算划分子网掩码: 用户输入一个ip地址,和需要划分的子网个数。程序自动计算出合适的ip地址与...
  • 判断子网掩码是否合法 以下哪个子网掩码是合法的 A 192.168.255.0 B 192.168.248.0 C 255.255.248.0 D 255.255.1.0 解析:判断子网掩码是否合法,将子网掩码转化位二进制,如果转换后前半部分全部是 1,后半部分...
  • 目前为止最好用的: IPV4子网掩码计算器, IPV4子网划分计算器
  • 易语言源码本机IP地址、子网掩码、DNS服务器地址设置.rar 易语言源码本机IP地址、子网掩码、DNS服务器地址设置.rar 易语言源码本机IP地址、子网掩码、DNS服务器地址设置.rar 易语言源码本机IP地址、子网掩码、DNS...
  • IP/掩码位来表示一段IP范围,那么怎么通过掩码位计算出对应的子网掩码呢?基本概念:掩码位即网络地址的位数。例如192.168.11.130/31表示网络地址有31位,主机地址有1位,那么31对应的子网掩码就是255.255.255.254...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,349
精华内容 58,139
关键字:

如何获取子网掩码