当前位置:  技术问答>linux和unix

求子网掩码的校验函数

    来源: 互联网  发布时间:2017-01-14

    本文导语:  给一个字符串,要求判断是否是合法的子网掩码。 如 char mask_ok[]="255.255.255.0" char mask_err[]="255.0.255.0" mask_ok 是合法的,mask_err是非法的。 | #include  #include  #include  #include  #include  int checkNetmask(const ...

给一个字符串,要求判断是否是合法的子网掩码。

char mask_ok[]="255.255.255.0"
char mask_err[]="255.0.255.0"

mask_ok 是合法的,mask_err是非法的。

|
#include 
#include 
#include 
#include 
#include 

int checkNetmask(const char *netmask)
{
        char bigEdianBytes[4];

        if(inet_pton(AF_INET,netmask,bigEdianBytes)> ffs(mask) == 0)
                printf("%sn", "good");
        else
                printf("%sn", "bad");

        return 0;
}

|
或者

#include 
#include 
#include 

#include 

int
main(int argc, char *argv[])
{
        unsigned int mask;
        char mask_good[] = "255.255.255.0";
        char mask_bad[]  = "255.0.255.0";

        mask = inet_addr(mask_good);
        if (((~mask + 1) & ~mask) == 0 )
                printf("%sn", "good");
        else
                printf("%sn", "bad");

        mask = inet_addr(mask_bad);
        if (((~mask + 1) & ~mask) == 0 )
                printf("%sn", "good");
        else
                printf("%sn", "bad");

        return 0;
}

|


哦哦,我懂楼主意思了。。。是要求只能出现1111111111100000000/0000000000111111这种序列。。。

先inet_addr转const char*为4字节网络序。

举例:char mask_ok[]="255.255.255.0" ,inet_addr转化后,也就是[0]字节是255,[3]字节是0.

将这4字节当做unsigned long解析,会根据本机大小端有所不同,但肯定是11111111100000(大端)或者是000000111111111(小端)之中的一种。

怎么判断呢? 从低到高遍历l的每一位,如果当前位和前一位不同,那么找到了分界。 之后判断高位一边是否有不同的bit位即可。

一会写个代码。

|
哎呀,写出来了才发现原来掩码必须是左边1,右边0,这个问题还是不要当做Long了,会引入本机字节序问题。

直接逐个判断4字节就可以了。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何获取Internet上某个网段的子网掩码?
  • 怎样分一些子网(内详),在线等....
  • 编程语言 iis7站长之家
  • 机器上的2个网卡属于一个子网的问题
  • RedHat 重启后IP地址和子网掩码要重新设置,每次都是这样,为什么呀?
  • 还有全零的子网号为什么也不能用?它又代表什么?
  • 全1的子网号为什么不能用?它表示什么?
  • 不在一个子网为何仍然可以通信
  • 请问:如何得到自己机器的ip和子网掩码???
  • linux中关于子网掩码,网关的问题
  • 请达人赐教Solaris10怎么修改子网掩码?
  • 急急!三网卡服务器,子网ping ip可以出去internet,ping (域名)却不通
  • 为什么IP地址中的子网的网络地址不能是全0或是全1 ?
  • 如何使用LINUX为不同子网的WIN98客户端不同的应用程序做代理?给分100
  • linux如何查看本机ip,子网掩码和网关,谢谢,急用!
  • 怎样获得本机的子网掩码(C语言接口)?
  • tcp/ip协议中向网络得广播 和想所有子网得广播 有区别吗?
  • 在Fedora下, 配好了IP,网关,子网掩网,DNS却不能上网
  • 怎样在saloris2.6下 修改和查看 ip地址,以及网关和子网掩码,我是新手,望指教。
  • Linux如何设置IP、子网掩码和网关


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3