精华内容
下载资源
问答
  • 有时候弄一些网络通信,经常用到域名地址,在进行tcp初始的时候... 所以弄了个测试程序,判断获取的字符串是否是合法的IP地址,只是简单测试了下,可以正确判断,不过不保证没有错漏的。 #include #include int check

    有时候弄一些网络通信,经常用到域名地址,在进行tcp初始的时候,需要判断提供的地址是IP还是域名地址。如果传入的是正确的域名地址,则判断不是IP后进行域名解析,如果是IP地址格式的直接进行TCP初始化连接,

          所以弄了个测试程序,判断获取的字符串是否是合法的IP地址,只是简单测试了下,可以正确判断,不过不保证没有错漏的。

    #include<stdio.h>
    #include<iostream>

    int check_if_ipaddr(unsigned char *ipstr){

    int ret = -1;
    unsigned char dotnum = 0;
    unsigned short maxval = 0;


    while(*ipstr != '\0'){

        if((*ipstr >= '0') && (*ipstr <= '9')){
                maxval = maxval*10 + (*ipstr - '0');
        }else if(*ipstr == '.'){
                dotnum++;
                if(dotnum > 3){
                printf("dot num is large than 3\r\n");
                return -1;
        }
         if(maxval< 0 || maxval >255){
               printf("max value is larger than 255 value=%d\r\n",maxval);
              return -1;
          }
          maxval = 0;
    }else{
         printf("ipstring char is illegal \r\n");
         return -1;
    }
                   ipstr++;
    }
    if(maxval >=0 && maxval <=255){
    if(dotnum == 3){
                        return 1;
    }
    }
    return -1;
    }


    int main()
    {
    int result = -1;
    unsigned char ipstradd[60] ="192.168.0.103";


    if(check_if_ipaddr(ipstradd) != 1)
    {
     printf("is not ipaddr format.....\r\n");
    }else{
      printf("is  ipaddr format.....\r\n");
    }
    return 0;
    }








    展开全文
  • 1.判断输入的字符串是否是合法的IP地址 2.如果是合法的IP地址表达,请判断是v4还是v6地址,并将其展开为对应的2进制串输出 3.如果不是合法的IP地址表达,判断输入的字符串是否是合法的地址范围表达式,如"192.168....

    一、题目要求

    请创作一个小程序,实现如下功能:
    1.判断输入的字符串是否是合法的IP地址
    2.如果是合法的IP地址表达,请判断是v4还是v6地址,并将其展开为对应的2进制串输出
    3.如果不是合法的IP地址表达,判断输入的字符串是否是合法的地址范围表达式,如"192.168.0.0/24"、“::1/128”
    4.如果是合法的地址范围表达式,输出其最小和最大地址,以及地址总数
    5.如果既不是合法的IP地址也不是合法的地址范围表达式,输出“不合法”

    二、前期思路

    在这里插入图片描述

            根据题目我先做了上面的一个伪代码表示过程。接下来我要做的是思考如何区分是否是一个地址还是一个地址范围。仔细观察我们可以看到一个地址和一个范围最大的区别就是后面的子网掩码位数和斜杠,所以我这里想把斜杠作为一个标志符来区分地址和地址范围。
            关于地址的合法判断,如果是ipv4,则可以按照’.’将地址分为4个部分,检测每个部分是否大于255,不然可以视为合法地址。如果是ipv6还要考虑缩写的问题,这里思路应该是先检测地址的位数是否合理(是否是完全展开的形式),如果不是的话则要扩充到完全展开的形式,然后再进行判断。合法地址的二进制形式可以先将地址按照’.’或者’:’进行分割,然后再把每个部分从string转成int再进行转换操作。
            关于地址范围的判断,我的想法是先看看有没有斜杠,如果有的话就把地址范围分成两个部分:前面的网段和后面的子网掩码位数。题目的要求是输出最大地址和最小地址,并且输出总数,总数这里可以根据子网掩码去判断。2的32-子网掩码或者128-子网掩码次方再减去2,因为第一个最后一位是0那个地址和最后那个广播地址是不可用的,这里两个地址应当判断为不合法的地址。最小地址应该是网段那串数字加1,最大的地址应当是广播地址-1,这样子就可以得出题目所需要的东西了。

    三、代码

    import IPy
    
    def tobin(ip):
        print('二进制格式转换:', IPy.IP(ip).strBin())
    
    def jugiptype(ip):
        iptype = 0
        try:
            iptype = IPy.IP(ip).version()
        except:
            iptype = 0
        else:
            return iptype
    
    def checkipv4oripv6(ip):
        if '/' not in ip:
            iptype = jugiptype(ip)
            if iptype:
                print ('iptype:',iptype)
                tobin(ip)
            else:
                print('ileagal address')
    
    def checkipv4oripv6range(ip):
        if '/' in ip:
            try:
                ip1 = IPy.IP(ip)
            except:
                print('ileagal address')
                return
            depart = ip.split('/',1)
            jug1 = depart[1].isdigit()
            if jug1:
                Subnetmask = int(depart[1])
                iptype = jugiptype(depart[0])
                if iptype == 4 and Subnetmask <= 32:
                    try:
                        print('totle address:', IPy.IP(ip).len()-2)
                    except:
                        print ('ileagal address')
                    x = IPy.IP(ip).strNormal(3).split('-', 1)
                    y0,y1 = list(x[0]),list(x[1])
                    y0[-1] = '1'
                    minaddr = ''.join(y0)
                    if y1[-1] != '0':
                        y1[-1] = str(int(y1[-1])-1)
                    maxaddr = ''.join(y1)
                    print('minaddr:',minaddr)
                    print('maxaddr:',maxaddr)
                elif iptype == 6 and Subnetmask <= 128:
                    try:
                        print ('totle address:',IPy.IP(ip).len()-2)
                    except:
                        print ('ileagal address')
                    x = IPy.IP(ip).strNormal(3).split('-',1)
                    y0, y1 = list(x[0]), list(x[1])
                    y0[-1] = '1'
                    minaddr = ''.join(y0)
                    if y1[-1] != '0':
                        y1[-1] = str(int(y1[-1]) - 1)
                    maxaddr = ''.join(y1)
                    print('minaddr:', minaddr)
                    print('maxaddr:', maxaddr)
                else:
                    print ('ileagal address')
            else:
                print ('ileagal address')
    
    if __name__ == '__main__':
        ip = input()
        checkipv4oripv6(ip)
        checkipv4oripv6range(ip)
    

    这里我使用的是python的IPy模块,这个模块里面的一些方法很适合这个题目的算法。参考以下地址

    https://blog.csdn.net/xixihahalelehehe/article/details/105203978

            这个代码最主要的函数就是checkipv4oripv6函数和checkipv4oripv6range函数,用于区分地址范围还是地址。我这里的处理是两个函数一开始就让他判断是否有’/’,这样下面调用这两个函数的时候就只会挑一个进行了。
    checkipv4oripv6(ip)中(ip):IPy.IP(ip).version()这个方法是用于判断是ipv4地址还是ipv6地址的,但是当出错的时候他这个函数的设定不是返回-1,而是会出错,所以我这里将他用一个try函数去执行,并且设定一个flag(iptype)去判断这个函数是否执行成功,如果成功这个值会是4或者6,否则是0。当他不合法的时候直接打印“ileagal”。如果是合法的则调用IPy.IP(ip).strBin()
    函数将二进制打印出来。这部分就这样子完成了。
            checkipv4oripv6range(ip)中依旧是先判断’/’,一开始先执行一下ip1 = IPy.IP(ip)
    因为如果这个执行失败的话就说明这个东西的不合法的(网段号最后一位不是0这种情况会报错)。所以可以根据这个来判断是否一开始这个网段号就写错了。然后就是使用IPy.IP(ip).len()去判断长度。不过这个函数的思路是有点问题的,因为如果直接打印ip1 = IPy.IP(ip)这个值的话(比如192.168.0.0/24)会从192.168.0.0这个开始打印,也就是这个函数认为192.168.0.0也是合法地址。包括最后那个广播地址也会打印出来。所以IPy.IP(ip).len()的结果是256,可以看到最后代码里做了-2处理。IPy.IP(ip).strNormal(3)
            函数本来是直接确定了最大最小地址的。但是这个是从0开始255结束的。但我们要去把头加1,最后那个-1,所以我调用完这个函数之后对数据进行了改动得到正确结果

    四、测试样例

    在这里插入图片描述
    最后那个是256不合法
    在这里插入图片描述
    lh是不合法的
    在这里插入图片描述
    合法地址
    在这里插入图片描述
    合法地址
    在这里插入图片描述
    合法地址
    在这里插入图片描述
    子网掩码不合法
    在这里插入图片描述
    前面不是网段,我这里将他判定不合法
    在这里插入图片描述
    双冒号不合法的写法
    在这里插入图片描述
    这个更不合法了
    在这里插入图片描述
    合法地址

    五、总结

         其实这一次算是真正的第一次用python去实现功能。其中有很多东西都是一边百度一边写的代码。刚刚开始我还头疼,因为如果按照以前c++的思维的话全部功能我都要自己去实现一遍,这个工程量我觉得还是有点大的。结果IPy模块的函数让我欣喜。这里面的函数虽然没有全部期望的功能,但是也算是把大量工作做了七八成了,所以整体做起来还算快。也深入了解了python的代码风格。
         期间还学到了一些不一样,例如:Python中string是不可变的,要把string变成list才能更改。Python的函数很多,写代码很方便。缩进很严谨。有其他语言编程基础很容易上手这门语言。ipv4和ipv6之间的区别,虽然还有些地方没有搞得太清楚,但总体上有了一点了解。
         其实这个IPy里面的函数跟我们预期有很多不一样的,比如数量那个函数没有剔除首尾两个地址,而且那个判定ipv4的函数也是有bug的,输入1234这样的数据的时候他会自动填充前面的0如下图:
    在这里插入图片描述
    IETF规范里面的特殊一点的样例也没有太多考虑,不过要加也是可以增加上去的,就是加大点工作量而已

    六、参考文献

    1.https://www.zhihu.com/question/361759837/answer/941637125

    2.https://blog.csdn.net/gatieme/article/details/50989257utm_medium=distribute.pc_relevant_bbs_down.none-task–2allfirst_rank_v2rank_v29-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task–2allfirst_rank_v2rank_v29-2.nonecase

    3.https://www.runoob.com/python/python-exceptions.html

    4.https://blog.csdn.net/xixihahalelehehe/article/details/105203978

    5.http://www.360doc.com/content/19/0809/12/29215996_853855203.shtml

    6.计算机网络自顶向下第七版

    7.https://baike.baidu.com/item/IPv4/422599?fr=aladdin

    8.https://www.runoob.com/python3/python3-tutorial.html

    9.https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%8F%B7/2634355?fr=aladdin

    展开全文
  • 下面内容是关于C语言判断给定的字符串是否为合法的ip地址的内容。 #include <stdio.h> #include <string.h> int main(void) { char str[31],temp[31]; int a,b,c,d; while(gets(str)!=NULL) ...

    下面内容是关于C语言判断给定的字符串是否为合法的ip地址的内容。

    #include <stdio.h>  
    #include <string.h>  
    int main(void)   
    {  
        char str[31],temp[31];  
        int a,b,c,d;  
        while(gets(str)!=NULL)  
        {  
            if(sscanf(str, "%d.%d.%d.%d ",&a,&b,&c,&d)==4 &&   a>=0   &&   a<=255 &&   b>=0   &&   b<=255 &&   c>=0   &&   c<=255 &&   d>=0   &&   d<=255)  
            {  
                if(strcmp(temp,str)==0)   
                {  
                    printf("YESn");   
                }   
                else  
                {  
                    printf("NOn");   
                }  
            }  
            else   
            {  
                printf("NOn");  
            }  
        }  
        return 0;   
    }  
    
    展开全文
  • 写一个算法判断某个字符串是不是一个合法的IP地址

    题目描述:

    写一个算法判断某个字符串是不是一个合法的IP地址。

    实现如下:

    class Solution
    {
    public:
        //ip字符串输入默认采用IPV4的点分十进制法,合法地址为0.0.0.0-255.255.255.255
        bool isLegalIP(const string& ip)
        {
            int validSegSize = 0; //记录一共有多少个分段
    
            int oneSeg = 0; //记录每个分段的数值
            int segLen = 0; //记录是否分段有数值
            for (int i = 0; i < ip.length(); ++i)
            {
                //计算每个分段的数值
                if (ip[i] >= '0' && ip[i] <= '9')
                {
                    oneSeg = oneSeg * 10 + (ip[i] - '0');
                    //如果分段有数值,就置segLen为1
                    ++segLen;
                }
                else if (ip[i] == '.') //如果此字符为'.',那么就判断之前的那个分段的值是否合法且是否存在值
                {
                    if (oneSeg <= 255 && segLen > 0)
                        validSegSize++;
                    else
                        return false;
    
                    oneSeg = 0; //重置分段值
                    segLen = 0; //重置分段是否存在值
                }
                else //如果出现0-9或'.'以外的字符都判断为非法
                    return false;
            }
    
            //判断最后一个分段的合法性
            if (oneSeg <= 255 && segLen > 0)
                validSegSize++;
    
            //判断是否一共有四个分段
            if (validSegSize == 4)
                return true;
            else
                return false;
        }
    };
    
    展开全文
  • 如何判断一个字符串是否为合法的IP地址。 import java.util.Scanner; public class MyTest { public static void main(String[] args) { /* * 如何判断一个字符串是否为合法的IP地址。 */ Scanner sc=...
  • C:合法的IP地址

    万次阅读 2019-01-20 10:25:34
    IP地址是IP协议提供一种统一地址格式,它为互联网上每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址差异。 IP地址通常用“点分十进制”表示成(a.b.c.d)形式,其中,a, b, c, d都是0~255...
  • 题目描述:给定一个字符串,判断该字符串是否是合法的IP地址。 代码实现: #include&amp;amp;lt;iostream&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; using namespace std; int ...
  • 要求判断一个字符串是不是合法的ip地址。 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法。希望能分享一些交流 要求用java或者c来实现,我的java代码: 1 public class Test_ip { 2 //程序...
  • 编写正则表达式,判断给定的是否是一个合法的IP地址。 import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.Scanner; public class Matcherdemo{ public static void main...
  • 第一个是网段起始IP地址,如192.168.0.0/24,这个地址表示该网段本身。另一个地址是网段结束地址,如192.168.0.255/24,这个地址表示该网段广播地址。由此可知,第一部分的合法地址为:152.179.39.223/26,他...
  • 正则表达式验证合法的IP地址

    千次阅读 2019-06-30 12:13:43
    IPv4地址 最初设计互联网络时,为了便于寻址和层次化构造网络,每个IP地址包括两个标识码...Internet委员会定义了5种IP地址类型以适应不同容量网络,即A类~E类。 类别 IP地址范围 最大网络数 最大主机...
  • #简单匹配给定字符串是否是ip地址,下面例子它不是IPv4地址,但是它满足正则表达式 if re.match(r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$", "272.168,1,1"): print "IP vaild" else: print "IP invaild" #...
  • grep匹配合法的IP地址

    2019-09-26 15:35:24
    cat ip.txt|grep -E -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2 }|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}...
  • /*** 判断所有的IP地址* @param IP* @return*/public String validIPAddressAll(String IP) {if (!IP.contains(".") && !IP.contains(":")) {return "Neither";}//如果是IPV4if (IP.contains(".")) {if (IP....
  • 如何判断一个字符串是否为合法的IP地址。 要求: 1. 不能使用正则表达式和自带的库函数。 2. 列出全部测试用例,并给出原因。
  • C判断一字符串是否是合法的IP地址 方法1: 判断各个部分是否合法 int is_valid_ip(const char *ip_str) { unsigned int n1,n2,n3,n4; if(sscanf(ip_str, "%u.%u.%u.%u", &n1, &n2, &n3, &n4...
  • 给定一个数字字符串,要求将这个数字字符串进行分割,使得分割的结果为有效的IP地址。 样例输入: 25525511135 样例输出: 255.255.11.135, 255.255.111.35 这道题其实可以看做是字符串分段问题,再输入...
  • js正则表达式验证合法的IP地址

    千次阅读 2019-06-10 16:15:41
    function isValidIP(ip) { var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ return reg.test(i...
  • 添加 using System.Text.RegularExpressions;...:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?... if (IPAddress.TryParse("192.168.88.1", out ip) == true) { MessageBox.Show("合法"); } else { MessageBox.Show("非法"); }
  • 分析:首先我们要知道IP地址(IPV4)条件: (除去特殊主机和广播地址) 1、IP地址只有三个 ’ . ',如果不是三个点,就不是IP地址 2、例如:A.B.C.D A不能为0,且每一位都不能大于255 3、所以要用一个函数单独...
  • Shel 检测合法的IP地址

    2012-10-02 21:44:30
    IP地址的正则表达式为: (([0-9]|[1-9][0-9]|1[0-9]{2\}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' 1.利用电脑IP测试下: ifconfig | grep --color -o '\(\([0-9]\|[1-9][0-9...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,829
精华内容 1,131
关键字:

合法的ip地址