#!/bin/bash 
#功能: 域名解析,ip所属运营商判断,ip所属机房判断 
#时间:2014/7/2 
#作者:张乐杰 
#定义文件 
#读取脚本参数 
if [ "$1" == "" -o "$2" == "" ] 
then 
echo "=============================================================" 
echo "Erro !!! Do it like this:" 
echo "sh ip_check.sh domain-list-file ip-list-file " 
echo "=============================================================" 
exit 
fi 
domain_input=$1 #domain_name 
IDC_input=$2 #IDC_name,起始IP,结束IP 
domain_src_file=/tmp/domain_src.txt #domain_name 
IDC_file=/tmp/IDC_ip.txt #IDC_name,起始IP,结束IP 
domain_ip=/tmp/domain_ip.txt #domain_name,domain_ip 
belong_file=/tmp/belong.txt #domain_name,domain_ip,belong 
report=/tmp/report_tmp`date +%Y%m%d`.csv #domain_name,domain_ip,belong,IDC 
report_end=/tmp/report`date +%Y%m%d`.csv #domain_name,domain_ip,belong,IDC 
#检查文件 
function file_check() 
{ 
if [ -f $1 ] 
then 
rm -f $1 
fi 
} 
file_check $belong_file 
file_check $domain_ip 
file_check $report 
file_check /tmp/IDC_ip_tmp.txt 
file_check /tmp/IDC_ip_num.txt 
function file_check1() 
{ 
if [ ! -f $1 ] 
then 
echo "$1 file is not exist"
exit 
fi 
} 
#指定域名列表文件。格式:一行一个域名 
#指定IP段文件。格式:名字,起始IP,结束IP 空格隔开 
#echo "=============================================================" 
#echo "域名列表文件格式:一行一个域名 " 
#echo "IP段文件格式: 名字,起始IP,结束IP 空格隔开 " 
#echo "Do it like this:" 
#echo "sh ip_check.sh domain-list-file ip-list-file " 
#echo "=============================================================" 
#read -p "准备好所需文件,请选择:继续y,退出n:" stat 
#case $stat in 
#y|Y|yes|Yes|YES);; 
#n|N|no|No|NO)exit;; 
#*) 
#echo "**************输入错误,请重新执行脚本!!!*****************" 
#exit;; 
#esac 

#file_check1 $domain_src_file 
#file_check1 $IDC_file 
file_check1 $domain_input 
file_check1 $IDC_input 
##准备文件 
yes|cp $domain_input $domain_src_file 
yes|cp $IDC_input $IDC_file 
#解析域名,判断所属,输出文件 
#解析域名 
function resolv() 
{ 
domain_src=$1 
while read line_name 
do 
/usr/bin/dig $line_name |egrep "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"|grep IN|awk '{print $5}' > /tmp/ip.tmp 
while read line_ip 
do 
echo "$line_name,$line_ip" >> $domain_ip 
done < /tmp/ip.tmp 
done < $domain_src 
} 
#判断所属运营商 
function belong() 
{ 
rm -f /tmp/tmp 
belong_file_tmp=$1 
while read belong_line 
do 
donmain_ip=`echo $belong_line|awk -F "," '{print $2}'` 
#belong_NET=`/usr/bin/elinks -dump "http://www.ip138.com/ips138.asp?ip=$donmain_ip&action=2"|iconv -f gb2312 -t utf8|grep "本站主数据"|awk -F ":" '{print $2}'` 
/usr/bin/elinks -dump "http://www.ip138.com/ips138.asp?ip=$donmain_ip&action=2"|iconv -f gb2312 -t utf8|grep "本站主数据"|awk -F ":" '{print $2}' >> /tmp/tmp & 
#echo $belong_line,$belong_NET >> $belong_file 
done < $belong_file_tmp 
paste -d "," $belong_file_tmp /tmp/tmp > $belong_file 
} 
#判断所属IDC 
function IDC() 
{ 
IDC_file_tmp=$1 
touch /tmp/IDC_ip_num.txt 
#生成ip to num的临时 
while read IDC_ip_line 
do 
min_tmp=`echo $IDC_ip_line|awk -F '{print $2}'` 
max_tmp=`echo $IDC_ip_line|awk -F '{print $3}'` 
ip_to_num $min_tmp 
min=$ip_num 
ip_to_num $max_tmp 
max=$ip_num 
echo "$IDC_ip_line,$min,$max" >> /tmp/IDC_ip_tmp.txt 
sort -t "," -k 4 /tmp/IDC_ip_tmp.txt > /tmp/IDC_ip_num.txt 
done < $2 
#判断ip 
echo "域名,IP,运营商,IDC,内/外" >$report 
while read IDC_line 
do 
domain_ip_tmp=`echo $IDC_line|awk -F "," '{print $2}'` 
belongs_tmp=`echo $IDC_line|awk -F "," '{print $3}'` 
ip_to_num $domain_ip_tmp 
#echo $ip_num 
IDC_name='无数据' 
belongs='无数据' 
###### 比较大小 
while read num_line 
do 
IDC_name_tmp=`echo $num_line|awk -F "," '{print $1}'` 
min_tmp=`echo $num_line|awk -F "," '{print $4}'` 
max_tmp=`echo $num_line|awk -F "," '{print $5}'` 
if [ $ip_num -ge $min_tmp ] && [ $ip_num -le $max_tmp ] 
then 
IDC_name=$IDC_name_tmp 
fi 
done < /tmp/IDC_ip_num.txt 
######判断网内/网外,以在移动网内为内,外为外 
echo $belongs_tmp|grep "移动" &> /dev/null 
if [ $? -eq 0 ] 
then 
belongs="网内" 
else 
belongs="网外" 
fi 

#输出文件 
echo $IDC_line,$IDC_name,$belongs >> $report 
#HEX_STRING=$(printf "0X%02X%02X%02X%02X\n" ${IP_ARRAY[0]} ${IP_ARRAY[1]} ${IP_ARRAY[2]} ${IP_ARRAY[3]}) 
#printf "%d\n" ${HEX_STRING} 
done < $IDC_file_tmp 
} 
#ip to num 
function ip_to_num() 
{ 
ip_addr=$1 
ip_list=${ip_addr//./ } #最后的空格很重要 
read -a IP_ARRAY <<<${ip_list} 
ip_num=$(( ${IP_ARRAY[0]}<<24 | ${IP_ARRAY[1]}<<16 | ${IP_ARRAY[2]}<<8 | ${IP_ARRAY[3]} )) 
return $ip_num 
} 
#运行 
echo "running......" 
#检查命令 
yum install elinks bind-utils -y &> /dev/null 
resolv $domain_src_file 
file_check1 $domain_ip 
belong $domain_ip 
IDC $belong_file $IDC_file 
/usr/bin/iconv -f utf8 -t gb2312 $report -o $report_end 
echo "report is $report_end"