正则表达式通用匹配ip地址及主机检测

时间:2021-09-02 13:30:40

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

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

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

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

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

正则表达式匹配如下:

grep -o -E "\b(([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])\b"
[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 "\b(([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])\b"
[ $? -ne ] && { echo "$1 addr error"; exit ; }
ping -c -w $ &> /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
#匹配后的ip地址默认都在第一行,可以head指令截取
127.0.0.1
255.0.0.0

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

#!/bin/bash                                                                                                                                                                                    

trap "exit" 

read -p "Input addr eg: 192.168.214 : " IP

 echo "$IP" |  grep -o -E "\b(([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])\b"
[ $? -eq ] || { echo "$IP addr error" ; exit ; } Ipaddr=$IP for Host in $(seq )
do
ping -c -w $IP.$Host &>/dev/null
if [ $? -eq ];then
echo -e "\033[32;1m$IP.$Host is up! \033[0m"
else
echo -e "\033[;31m$IP.$Host is down!\033[0m"
fi
done

检测测试

[root@yufu home]# ./hostping.sh
Input addr eg: 192.168. : 172.16.
172.16.
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!

正则表达式通用匹配ip地址及主机检测的更多相关文章

  1. python中利用正则表达式匹配ip地址

    现在有一道题目,要求利用python中re模块来匹配ip地址,我们应如何着手? 首先能想到的是ip地址是数字,正则表达式是如何匹配数字的呢? \d或[0-9] 对于这个问题,不要一下子上来就写匹配模式 ...

  2. Apache服务(基于IP地址,主机名,端口号)

    安装Apache服务程序 需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的. [root@liuxuanke-hbza ~]# yum ...

  3. Java如何从IP地址查找主机名?

    在Java编程中,如何从IP地址查询出主机名? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将指定的IP地址查到主机名称. package ...

  4. Java如何获取本地计算机的IP地址和主机名?

    在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com. ...

  5. python匹配ip地址

    ip地址是用3个'.'号作为分隔符,分割4个数字,每个数字的取值在[0,255],一般日志文件中的ip地址都是有效的ip地址,不需要我们再去验证,因此,若从日志文件中提取ip,那么可以简单写成这样: ...

  6. Java 实例 - 获取本机ip地址及主机名

    package guyu.day0824; import java.net.InetAddress; /** * @Author: Fred * @Date: 2020/8/24 09:39 */ p ...

  7. &lbrack;置顶&rsqb; 正则表达式应用:匹配IP地址

    都知道iP地址有四个数值,三个点号组成.三个数值的具体范围为0到255,为了使用正则表达式匹配就必须分析IP地址的组成 1先分析数值,2再组合数值和点号 1先分析数值 IP地址的数字范围从0到255, ...

  8. 使用正则表达式匹配IP地址

    IP地址分为4段,以点号分隔.要对IP地址进行匹配,首先要对其进行分析,分成如下部分,分别进行匹配:   第一步:地址分析,正则初判 1.0-9 \d 进行匹配 2.10-99 [1-9]\d 进行匹 ...

  9. python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

随机推荐

  1. 设计模式&lpar;七&rpar;&colon; 通过转接头来观察&quot&semi;适配器模式&quot&semi;&lpar;Adapter Pattern&rpar;

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  2. &OpenCurlyDoubleQuote;北航Clubs”功能规格说明书

    1.项目目标说明: 北航Clubs的初衷是服务社团,服务学生,满足社团与学生的信息互通的需求.社团管理运营方便的需求. 建设网站的目的是使学生可以在一个权威可信的网站上获取到社团实时的动态,社团活动的 ...

  3. codemirror和ace editor的语法高亮

    两个javascript库用做在线代码编辑器都是非常优秀的选择 我这两天对这两个类库做了简单的研究,重点是语法高亮的自定义: ace editor的主要思路是生成状态机,从一个startstate开始 ...

  4. c&plus;&plus;11 其他特性(一)

    c++11还增加了许多有用的特性,比如: 1. 委托构造函数 如果一个类含有很多构造函数,这些构造函数有一些重复的地方,比如: class A{ public: A(){}; A(int a){ a_ ...

  5. C&num;UDP(接收和发送源码)源码完整

    C#UDP(接收和发送源码)源码完整 最近做了一个UDP的服务接收和发送的东西.希望能对初学的朋友一点帮助. 源码如下: 一.逻辑--UdpServer.cs using System;using S ...

  6. 使用https时,网站一些内容不能正常显示的问题

    在网站开发过程中,使用http网站页面一切正常. 但改成https后,发现网站一些页面不能正常显示出来,比如看上去没有样式等. 原因是: 在程序中调用了比如JQuery,而引用的URL使用的是Http ...

  7. SpringCloud的EurekaClient : 客户端应用访问注册的微服务(无断路器场景)

    演示客户端应用如何访问注册在EurekaServer里的微服务 一.概念和定义 采用Ribbon或Feign方式访问注册到EurekaServer中的微服务.1.Ribbon实现了客户端负载均衡,2. ...

  8. ZooKeeper集群与Leader选举

    说说你对ZooKeeper集群与Leader选举的理解?   ZooKeeper是一个开源分布式协调服务.分布式数据一致性解决方案.可基于ZooKeeper实现命名服务.集群管理.Master选举.分 ...

  9. ionic 3 常见报错及解决办法

    用ionic 3开发也有一段时间了,现在总结下开发中遇到的报错,以及解决办法: ERROR DOMException: Failed to execute 'setAttribute' on 'Ele ...

  10. 1、python环境安装及软件介绍

    软件: python3.0 下载地址:https://www.python.org/downloads/windows/ pycharm 下载地址: https://www.jetbrains.com ...