在 bash 中使用 whois 找出提供商名称

问题描述

TL;DR

我想以自动方式从 whois输出提取提供者、范围开始、范围结束和提供者的名称,但该输出因提供者而异,因此我需要帮助提取这些任何提供商的三项信息。

详情

我有一个 IP 列表。我想在 whois 的帮助下为我的脚本检查每个 IP 的提供者,并想使用 MysqL 将其通过管道传输到数据库

我想用提供者的 ipranges 填充 MysqL 表,但前提是提供者的范围已经存在。

IP=187.187.187.187 whois $IP 然后获取 Providername 和段范围,但前提是我的表中还没有它

我有一个计划,它应该看起来像这样:

function ip2dec ...
function dec2ip ...

function awhois (){ ... 
     THEPROVIDER=$(whois $1 | grep PROVIDER) #<- i don't kNow how to grep 
     THERANGESTART=$(whois $1 | grep START) #<- i don't kNow how to grep
     THERANGEENDING=$(whois $1 | grep END) #<- i don't kNow how to grep
}

while read line; do 
    DECIP=`ip2dec $line`
    if [[ ! $(MysqL -u$THEUSER -p$PASSWORD -h$THEHOST -e "select iprangestart,iprangeend from $DATABASE.$TABLE where $DECIP BETWEEN iprangestart and iprangeend" 2>/dev/null) ]];
        then
        awhois $line
        MysqL -u$THEUSER -p$PASSWORD -h$THEHOST -e 
           "INSERT INTO $DATABASE.$TABLE (iprangestart,iprangeend,provider) 
                VALUES ( \"$THERANGESTART\",\"$THERANGEENDING\",\"$THEPROVIDER\")" 2>/dev/null
    fi
done < data/allips

但我真的不知道如何grep提供者和范围,因为它从提供者到提供者有不同的模式

解决方法

在 whois 的帮助下尝试了很多不同的方法来获取提供商名称后,我放弃了它。并尝试了 this

我不得不使用 wget,因为 curl 没有给我任何有用的东西。

这是最终结果:

function ip2dec(){ # Convert an IPv4 IP number to its decimal equivalent.
      declare -i a b c d;
      IFS=. read a b c d <<<"$1";
      echo "$(((a<<24)+(b<<16)+(c<<8)+d))";
}

while read ipadd; do 
    DECIP=`ip2dec $ipadd`
    if [[ $(mysql -N -u$THEUSER -p$PASSWORD -h$THEHOST -e "select providername from $DATABASE.$TABLE where $DECIP >= providerrangestart and $DECIP <= providerrangeende" 2>/dev/null| wc -l) -eq 0 ]];
    then
        INET=$(whois $ipadd | egrep "inetnum")
        NETRAN=$(whois $ipadd | egrep "netrange")
        ISPP=`wget https://www.whoismyisp.org/ip/$ipadd 2>/dev/null`
        THEPROVIDER=`cat $ISPP | grep -oP -m1 '(?<=isp">).*(?=</p)' | cut -c -31`
        if [[ $(echo "$THEPROVIDER" | egrep -i 'D2VODAFONE|Arcor|Vodafone D2') ]]; then 
            THEPROVIDER="Vodafone GmbH"
        elif [[ $(echo "$THEPROVIDER" | egrep -i "Telefonica|Telefonica O2") ]]; then
            THEPROVIDER="Deutsche Telekom AG"
        elif [[ $(echo "$THEPROVIDER" | egrep -i "1&1 Versatel Deutschland GmbH|1&1 Internet SE") ]]; then
            THEPROVIDER="1&1 GmbH"
        fi

        if [[ $INET ]];then 
            echo "new dump"
            THERANGESTART=`echo $INET | awk '{print $2}'`
            DECRANGESTART=`ip2dec $RANGESTART`
            echo "Rangestart: $DECRANGESTART"
            RANGEEND=`echo $INET | awk '{print $4}'`
            DECRANGEEND=`ip2dec $RANGEEND`
            echo "Rangeend: $RANGEEND"
            echo "Provider: $THEPROVIDER"
            echo ""
            mysql -u$THEUSER -p$PASSWORD -h$THEHOST -e "INSERT INTO $DATABASE.$TABLE (providerrangestart,providerrangeende,providername) VALUES ( \"$DECRANGESTART\",\"$DECRANGEEND\",\"$THEPROVIDER\")" 2>/dev/null 

        elif [[ $NETRAN ]]; then
            echo "new dump"
            THERANGESTART=`echo $NETRAN | awk '{print $2}'`
            DECRANGESTART=`ip2dec $RANGESTART`
            echo "Rangestart: $RANGESTART"
            RANGEEND=`echo $NETRAN | awk '{print $4}'`
            DECRANGEEND=`ip2dec $RANGEEND`
            echo "Rangeend: $RANGEEND"
            echo "Provider: $THEPROVIDER"
            echo ""
            mysql -u$THEUSER -p$PASSWORD -h$THEHOST -e "INSERT INTO $DATABASE.$TABLE (providerrangestart,\"$THEPROVIDER\")" 2>/dev/null            

        else 
            echo "Failed to optain ISP and IP-Range" 
            echo -e "$ipadd \n"
        fi
        rm $ipadd
    fi
done < data/allips
rm data/allips

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...