首页 > 其他分享 >IP地址解析DNS

IP地址解析DNS

时间:2023-06-11 22:22:56浏览次数:34  
标签:baidu RESOLVE IP echo RESULT DNS IP地址 解析 com

IP地址解析DNS

背景

指定IP解析域名,查看解析的域名,常用作CDN地址解析查询是否生效。本文章给出几个解决方案的shell脚本

#!/bin/bash
#
#****************************************************************************************
#Author:               wei
#***************************************************************************************

circulate_check () {
    RED=`echo -e '\e[1;31m'`
    GGREEN=`echo -e '\e[1;32m'`
    BLUE=`echo -e '\e[1;36m'`
    END=`echo -e '\e[0m'`
    while true ;do
        read -p "${BLUE}请输入ip地址:${END}"  IP_LIST
        if [[ "${IP_LIST}" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]];then
            echo "${GGREEN}输入的IP为IPV4${END}"
                RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:${IP_LIST} 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
                if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
                    echo "${GGREEN}IP为杭${END}"
                elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
                    echo "${GGREEN}IP为自${END}"
                fi
        elif [[ "${IP_LIST}"  =~ ([0-9a-Z]{0,4}\:){5}[0-9a-Z]{0,4}$ ]];then
            echo '输入的IP为IPV6'
            # RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443 "https://[${IP_LIST}]" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' |awk '{print $NF}')
            RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443:[${IP_LIST}] "https://www.baidu.com" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' | awk '{print $NF}')
            if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
                echo "${GGREEN}IP为杭${END}"
            elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
                echo "${GGREEN}IP为自${END}"
            fi
        elif [[ "${IP_LIST}"  == exit ]];then
            echo "${GGREEN}exit...${END}" && exit
        else
            echo "${RED}输入的IP错误,请重新输入!${END}"
        fi
    done
}

ip_check () {
    #传入IP地址的变量和值
    read -p "请输入ip地址:"  IP_LIST
    #判断变量是否为IPV4
    if [[ "${IP_LIST}" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]];then
        echo '输入的IP为IPV4'
        #获取IPv4地址解析的结果,并自定义变量
        RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:${IP_LIST} 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
        #判断变量是哪家的
        if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
            echo 'IPV4为杭'
        elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
            echo 'IPV4为自'
        #都不满足条件则打印错误结果和IP,方便排查问题
        else
            echo "IPV4解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${IP_LIST}"
        fi
    #如果上面匹配失败,接下来判断变量是否为IPV6
    elif [[ "${IP_LIST}"  =~ ([0-9a-Z]{0,4}\:){5}[0-9a-Z]{0,4}$ ]];then
        echo '输入的IP为IPV6'
        RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443:[${IP_LIST}] "https://www.baidu.com" -vv -o /dev/null  -k -g 2>&1 | egrep 'commonname' | awk '{print $NF}')
        # RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443 "https://[${IP_LIST}]" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' | awk'{print $NF}')
        if [[ "$RESOLVE_RESULT}" == *.weirui.cn ]];then
            echo 'IPV6为杭'
        elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
            echo 'IPV6为自'
        else
            echo "IPV6解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${IP_LIST}"
        fi
    #如果上面条件匹配都不满足,则打印信息退出
    else
        echo '输入的IP错误,请重新输入!'
    fi
}

ip_auto_check () {
    if [[ $1 =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]];then
        echo '输入的IP为IPV4'
        RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:$1 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
        if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
            echo 'IPV4为杭'
        elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
            echo 'IPV4为自'
        else
            echo "IPV4解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${IP_LIST}"
        fi
    elif [[ $1  =~ ([0-9a-Z]{0,4}\:){5}[0-9a-Z]{0,4}$ ]];then
        echo '输入的IP为IPV6'
        RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443:[$1] "https://www.baidu.com" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' |awk '{print $NF}')
        # RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443 "https://[$1]" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' | awk '{print$NF}')
        if [[ "$RESOLVE_RESULT}" == *.weirui.cn ]];then
            echo 'IPV6为杭'
        elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
            echo 'IPV6为自'
        else
            echo "IPV6解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:$1"
        fi
    else
        echo '输入的IP错误,请重新输入!'
    fi
}

ip_more_check () {
    echo '请将IP写入ip-list.txt文件'
    NUM=$(wc -l ip-list.txt |awk '{print $1}')
    [[ "${NUM}" == 0 ]] && echo 'ip-list.txt内容为空' || echo 'ip-list.txt内容不空'
    IP_LIST=$(cat ip-list.txt)
    for i in ${IP_LIST};do
        if [[ "${i}" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]];then
            echo '输入的IP为IPV4'
            RESOLVE_RESULT=$(curl --resolve www.baidu.com:443:${i} 'https://www.baidu.com/' -o /dev/null -vk 2>&1| egrep 'common name' |awk '{print $NF}')
            if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
                echo 'IPV4为杭'
            elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
                echo 'IPV4为自'
            else
                echo "IPV4解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${i}"
            fi
        elif [[ "${i}"  =~ ([0-9a-Z]{0,4}\:){5}[0-9a-Z]{0,4}$ ]];then
            echo '输入的IP为IPV6'
            RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443:[${i}] "https://www.baidu.com" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' | awk '{print $NF}')
            # RESOLVE_RESULT=$(curl  --resolve www.baidu.com:443 "https://[$i]" -vv -o /dev/null  -k -g 2>&1 | egrep 'common name' | awk '{print $NF}')
            if [[ "${RESOLVE_RESULT}" == *.weirui.cn ]];then
                echo 'IPV6为杭'
            elif [[ "${RESOLVE_RESULT}" == *.weiruivideo.com ]];then
                echo 'IPV6为自'
            else
                echo "IPV6解析异常,解析结果为:${RESOLVE_RESULT},请检查解析IP为:${i}"
            fi
        else
            echo '输入的IP错误,请重新输入!'
        fi
    done
}


#方法一: 交互式循环查询操作,exit退出操作,如:./check-ip.sh
#circulate_check

#方法二: 单次查询IP操作,交互式,如:./check-ip.sh
#ip_check

# 方法三: 单次指定IP查询,非交互式,如:./check-ip.sh  120.24.61.213
#ip_auto_check $1

#方法四:  批量处理IP的解析
ip_more_check
#方法五: 菜单式查询,交互式,case语句
#方法六:循环菜单式查询,交互式,while + case语句

 

操作演示

方法一

 方法二

 方法三

 方法四

 剩下两种场景可自行研究编写,有需要提供思路可联系指导

 

标签:baidu,RESOLVE,IP,echo,RESULT,DNS,IP地址,解析,com
From: https://www.cnblogs.com/weiweirui/p/17473740.html

相关文章

  • Goland 包导入正常,但是无法解析函数和成员属性,编译不报错
    这段时间Goland突然出现了一个毛病,每次goget依赖后,虽然依赖拉下来了,但是代码里使用了这个module的地方无法引用出他的成员和属性,大片的标红,都提示「Unresolvedreference'xxxxx'」,但是只要把项目关了,重新打开,再次触发module的index索引动作,就恢复正常了。本来想看看有没......
  • Python 解析配置模块之ConfigParser详解
      yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法。只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子:defaddlist(alist):foriinalist:yieldi+1取出alist的每一项,然后把i+1塞进去。然后通过......
  • 【Linux的高级应用编程】TCP/IP网络编程函数解析
    TCP/IP网络编程函数解析 Sailor_forever socket(建立一个socket通信)相关函数accept,bind,connect,listen表头文件#include<sys/types.h>#include<sys/socket.h>定义函数intsocket(intdomain,inttype,intprotocol);函数说明socket()用来建立一个新的socket,也就是向系统注......
  • React - 28 redux部分源码解析
    myRedux.jsimport_from'./assets/utils';/*实现redux的部分源码*/exportconstcreateStore=functioncreateStore(reducer){if(typeofreducer!=='function')thrownewError("Expectedtherootreducertobeafunction");......
  • DNS优化的原理和方法
    Yahoo和Google都有自己的建设高性能网站最佳实践,我不做赘述,需要了解的自行查阅资料:Yahoo的: BestPracticesforSpeedingUpYourWebSiteGoogle的: WebPerformanceBestPractices上面的最佳实践条例其实也就是我们常在YSlow和PageSpeed这两个Firefox的add-ons中看......
  • 使用 dom4j 解析 XML
    http://www.ibm.com/developerworks/cn/xml/x-dom4j.html创建文档本节讨论使用dom4jAPI创建XML文档的过程,并创建示例XML文档catalog.xml。使用import语句导入dom4jAPI类:1.importorg.dom4j.Document;2.importorg.dom4j.DocumentHelper;3.importorg.dom4j.......
  • Redis数据结构:高频面试题及解析
    概述Redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能......
  • v831开发日记-交叉编译之python-build解析
    python部分#!/usr/bin/envpython#-*-coding=utf-8-*-##@filefromhttps://github.com/Neutree/c_cpp_project_framework#@authorneucrack#@licenseApache2.0##这段代码使用Python语言,导入了sys和os模块。它定义了一个名为sdk_env_name的变量,其值为"LIBMAIX_......
  • Redis数据结构:高频面试题及解析
    概述Redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性......
  • 简单滑动窗口题目解析(c实现)
    下面的题目要使用的主要思路为滑动窗口,但是还需要使用哈希表来储存窗口中的元素个数题目一:无重复字符的最长子串题目一链接给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所......