zoukankan      html  css  js  c++  java
  • 正则表达式通用匹配ip地址及主机检测

    在使用正则表达式匹配ip地址时如果不限定ip正确格式,一些场景下可能会产生不一样的结果,比如ip数值超范围,ip段超范围等,在使用正则表达式匹配ip地址时要注意几点:

            1,字符界定:使用  <匹配 字符 > 或   匹配字符  ;这个作用是限定ip的长度或位数

            2. 数值范围匹配  :[0-9] ,使用分组的方式,匹配字段

            3. ip段的划分 :按照匹配规则一个正确的ip地址可以划分为如下几个段:

                0-9段,10-99段,100-199段,200-254段;

                正则表达式匹配如下:

    grep -o -E "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])"
    [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]).){3}
    #这是匹配ip的第一段数值,包括 . ,这个匹配中可以匹配任意一个254以内开头的地址段,并且重复匹配三次

         脚本中测试

    #!/bin/bash
    
    echo "$1" |  grep -o -E "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]).){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])"
    [ $? -ne 0  ] && { echo "$1 addr error"; exit 1; }
    ping -c 1 -w 1 $1 &> /dev/null && echo "$1 host is up !" ||  echo  "$1 host is down !"
    #正确测试
    [root@yufu home]# ./hostping.sh 192.168.214.2
    192.168.214.2
    192.168.214.2 host is up !
    
    #错误测试
    [root@yufu home]# ./hostping.sh 192.442.214.666
    192.442.214.666 addr error

    这个匹配方式在centos6和centos7中通用,还有一种简单粗暴的方法匹配ip,但不是非常精确,可能会匹配到其他内容:

    [root@yufu home]# ifconfig | egrep -o "[0-9.]{7,}"
    192.168.214.187
    192.168.214.255
    255.255.255.0
    1052672      #匹配后的ip地址默认都在第一行,可以head指令截取
    127.0.0.1
    255.0.0.0

        因此可以在此基础上再写一个可以实现自定检测ipd端和检查输入的正确性的主机检测脚本;

    #!/bin/bash                                                                                                                                                                                    
    
    trap "exit" 2
    
    read -p "Input addr eg: 192.168.214 : " IP
    
     echo "$IP" |  grep -o -E "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]).){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])"
     [ $? -eq 0  ] || { echo "$IP addr error" ; exit 1; }
    
    Ipaddr=$IP
    
    for Host in $(seq 1 254)
    do
            ping -c 1 -w 1 $IP.$Host &>/dev/null
            if [ $? -eq 0  ];then
            echo -e "33[32;1m$IP.$Host is up! 33[0m"
            else
            echo -e "33[;31m$IP.$Host is down!33[0m"
            fi
    done

    检测测试

    [root@yufu home]# ./hostping.sh 
    Input addr eg: 192.168.214 : 172.16.0
    172.16.0
    172.16.0.1 is up! 
    172.16.0.2 is down!
    172.16.0.3 is down!
    172.16.0.4 is down!
    172.16.0.5 is down!
    172.16.0.6 is down!
    172.16.0.7 is down!
    172.16.0.8 is down!
    172.16.0.9 is down!
    172.16.0.10 is down!
    172.16.0.11 is down!
    172.16.0.12 is down!
    172.16.0.13 is down!
    172.16.0.14 is down!
    172.16.0.15 is down!
    172.16.0.16 is down!
    172.16.0.17 is down!
    172.16.0.18 is down!
    172.16.0.19 is down!
    172.16.0.20 is down!
    172.16.0.21 is down!
  • 相关阅读:
    nopcommerce商城系统--源代码结构和架构
    Unity3d Material(材质) 无缝拼接
    unity3d中的http通信 二
    unity3d中的http通信
    Unity3d webplayer获取url参数
    Unity3d 读取网络xml
    unity3d web.config设置
    Unity3d Web3d资源的动态加载
    Unity3d webplayer发布的问题和100%自适应浏览器
    Unity3d 与IOS 相互调用
  • 原文地址:https://www.cnblogs.com/anay/p/8779815.html
Copyright © 2011-2022 走看看