博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中国地理区域IP库整理
阅读量:6868 次
发布时间:2019-06-26

本文共 6731 字,大约阅读时间需要 22 分钟。

一、前言
    此文应朋友需求进行整理,内容为中国行政地理区域IP库整理第一步:根据apnic分配给中国的IPv4地址,进行whois信息筛选划分出ISP、及地域IP库,以及生成脚本。网上之前也有类似处理IP库的脚本,思路差不多,本文较深入根据IP划分成行政区域、运营商IP库及生成bind view 所需的acl ip库文件,第一步实现基础IP库还不算很准确,大家可以根据需求在修改定制。
  第二步:使用whois3根据mnt-by关键字反向查询运营商IP段及运营商路由表,将第一步与第二步的IP库进行对比将差异的IP段加入完善IP库
  第三步:利用生产中的DNS查询日志获取IP及view定义,使用第三方IP库查询校验结果与分配的view进行对比,如果匹配不做调整,如果不匹配,再进行人工使用多个第三方IP库查询核对,如果的确不匹配调整对应acl ip库文件。
   一点整理思路,如此IP库相对比较完整、精确。有兴趣的同学可以一起进行研究,完善,交流,今天将第一步实现的脚本及简要说明。

二、ISP英文简称说明
1、cnc   联通
2、ctc   电信
3、cmn   移动
4、ctt   铁通
5、cer   教育网
6、other 其他ISP

三、脚本修改完善说明
1、对ISP及涉及文件按照规范命名
2、增加中国地理区域划分脚本,并自动生成view所需acl ip库文件
2、对whois出的netname进行筛选并找出主要ISP的名称,详见netname_isp文件
3、根据中国地理区域划分,将ISP划分成不同的区域
   区域划分参考:
4、202.97.128.0/18这个IP段是划分给中国后的掩码,whois时得到的adress是“address:        6 Cordelia Street”,划区域时取关键字Cordelia,这个网段大部分在山西太原联通,所以划入华北联通
5、因为whois信息筛选的address一般有三段,大多数分配给地方的IP,第一段地址都含有Beijing,所以进行区域IP筛选时,先筛选地方,最后在筛选含有北京的华北地区。

四、文件说明
1、ip_apnic:为Apanic提供的亚太地区IPv4,IPv6,AS号分配的信息表
2、cn.net:apnic分配给中国的IPv4 IP段
3、ISP IP库文件为ISP名称,例如“ctc”即为为联通的IP库文件
4、ISP IP库及所属地址描述文件,例如“cnc.address ”
5、筛选后的ISP区域IP库文件,例如“cnc_zhb”即运营商_地理区域
6、acl IP库文件,  acl_cnc_zdb格式为acl_运营商_区域命名(网通_中国_东北地区)

五、脚本说明
1、whois_ip.sh 为获取中国IPv4地址段及筛选ISP脚本,这个网上有,我根据需求稍微修改了一下,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/bin/sh
FILE=.
/ip_apnic
rm 
-f $FILE
#rm -f  cn.net UNICOM  CHINANET CMNET CRTC CERNET OTHER
for 
ipfile 
in 
cn.net cnc   ctt  cmn ctt cer other
do
mv 
$ipfile  $ipfile-$(
date 
"+%F-%H:%M"
)
done
wget http:
//ftp
.apnic.net
/apnic/stats/apnic/delegated-apnic-latest 
-O $FILE
grep 
'apnic|CN|ipv4|' 
$FILE | 
cut 
-f 4,5 -d
'|'
|
sed 
-e 
's/|/ /g' 
while 
read 
ip cnt
do
echo 
$ip:$cnt
mask=$(
cat 
<< EOF | 
bc 
tail 
-1
pow=32;
define log2(x) {
if 
(x<=1) 
return 
(pow);
pow--;
return
(log2(x
/2
));
}
log2($cnt)
EOF)
echo 
$ip/$mask>> cn.net
#zone=`whois $ip@whois.apnic.net | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*:\(.*\)/\1/g'`
NETNAME=`whois $ip@whois.apnic.net | 
sed 
-e 
'/./{H;$!d;}' 
-e 
'x;/netnum/!d' 
|
grep 
^netname | 
sed 
-e 
's/.*:      \(.*\)/\1/g'
sed 
-e 
's/-.*//g'
|
sed 
's: ::g'
`
echo 
"$NETNAME" 
>> netname
case 
$NETNAME 
in
CNC|CNCGROUP|UNICOM|Chinaunicom)
echo 
"$ip/$mask " 
>> cnc
#echo "$ip/$mask $zone" >> cnc-zone
;;
CHINANET|CHINATELECOM)
echo 
"$ip/$mask" 
>>  ctc
#echo "$ip/$mask $zone" >> ctc-zone
;;
CMNET)
echo 
"$ip/$mask " 
>> cmn
#echo "$ip/$mask $zone" >> cmn-zone
;;
CRTC)
echo 
"$ip/$mask " 
>> ctt
#echo "$ip/$mask $zone" >> ctt-zone
;;
*CERNET*)
echo 
"$ip/$mask " 
>> cer
#echo "$ip/$mask $zone" >> cer-zone
;;
*)
echo 
"$ip/$mask" 
>> other
#echo "$ip/$mask $zone" >> other-zone
;;
esac
done

2、gen_china_area.sh 根据中国地理区域划分生成的区域IP库,并生成view所需的acl ip库文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh
#update date:20130307
#QQ:335623998
#generate china area ip
gen_cnc(){
FILE=$PWD
/cnc
#rm -f  $FILE.address
while 
read 
LINE;
do
echo 
"$LINE"
echo 
-n 
"$LINE @ " 
>> $FILE.address
whois  $LINE @whois.apnic.net |
egrep 
"address|descr"
|
xargs  
echo 
>> $FILE.address
echo  
"-----------------"  
>> $FILE.address
sleep 
1
done 
< $FILE
egrep 
-i 
"Hunan|Changsha|Hubei|Wuhan|Henan|Zhenzhou|Jiangxi|Nanchang" 
$FILE.address > cnc_zhz
egrep 
-i -
v 
"Hunan|Changsha|Hubei|Wuhan|Henan|Zhenzhou|Jiangxi|Nanchang" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
egrep 
-i 
"Sichuan|Chengdu|Yunnan|Kunming|Guizhou|Guiyang|Xizang|Lasa|Chongqing" 
$FILE.address > cnc_zxn
egrep 
-i -
v 
"Sichuan|Chengdu|Yunnan|Kunming|Guizhou|Guiyang|Xizang|Lasa|Chongqing" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
egrep 
-i 
"Shandong|Jinan|Jiangsu|Suzhou|Nanjing|Anhui|hefei|Zhejiang|Ningbo|Hangzhou|Fujian|Futian|Pudong|Shanghai" 
$FILE.address > cnc_zhd
egrep 
-i -
v 
"Shandong|Jinan|Jiangsu|Suzhou|Nanjing|Anhui|hefei|Zhejiang|Ningbo|Hangzhou|Fujian|Futian|Pudong|Shanghai" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
egrep 
-i 
"Guangxi|Nanning|Guangzhou|Guangdong|Shenzhen|Hainan|Haikou" 
$FILE.address > cnc_zhn
egrep 
-i -
v 
"Guangxi|Nanning|Guangzhou|Guangdong|Shenzhen|Hainan|Haikou" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
egrep 
-i 
"Heilongjiang|Harbin|Jilin|ChangChun|Liaoning|Shenyang" 
$FILE.address > cnc_zdb
egrep 
-i -
v 
"Heilongjiang|Harbin|Jilin|ChangChun|Liaoning|Shenyang" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
egrep 
-i 
"Ningxia|Yichuan|Xinjiang|Urumqi|Qinghai|Shaanxi|Xining|Xian|Gansu|Lanzhou" 
$FILE.address > cnc_zxb
egrep 
-i -
v 
"Ningxia|Yichuan|Xinjiang|Urumqi|Qinghai|Shaanxi|Xining|Xian|Gansu|Lanzhou" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
egrep 
-i 
"Mongolia|Cordelia|Beijing|Hebei|Shijiazhuang|Tianjin|Taiyuan|Shanxi|GuangDe" 
$FILE.address > cnc_zhb
egrep 
-i -
v 
"Mongolia|Cordelia|Beijing|Hebei|Shijiazhuang|Tianjin|Taiyuan|Shanxi|GuangDe" 
$FILE.address > addtmp
mv 
addtmp $FILE.address
sed 
-r -i 
'/-----/d' 
$FILE.address
#cat $FILE.address >>  cnc_zhb
sed 
-r -i 
's#@.*##g' 
cnc_*
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhz | 
awk 
'BEGIN{print "acl acl_cnc_zhz '
{
' "}{print $1";"}END{print "'
}
';"}' 
> acl_cnc_zhz
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4  cnc_zxn| 
awk 
'BEGIN{print "acl acl_cnc_zxn '
{
' "}{print $1";"}END{print "'
}
';"}'  
>acl_cnc_zxn
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhd | 
awk 
'BEGIN{print "acl acl_cnc_zhd '
{
' "}{print $1";"}END{print "'
}
';"}'  
>acl_cnc_zhd
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhn | 
awk 
'BEGIN{print "acl acl_cnc_zhn '
{
' "}{print $1";"}END{print "'
}
';"}'  
>acl_cnc_zhn
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zdb | 
awk 
'BEGIN{print "acl acl_cnc_zdb '
{
' "}{print $1";"}END{print "'
}
';"}'  
>acl_cnc_zdb
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zxb | 
awk 
'BEGIN{print "acl acl_cnc_zxb '
{
' "}{print $1";"}END{print "'
}
';"}'  
>acl_cnc_zxb
sort 
-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhb | 
awk 
'BEGIN{print "acl acl_cnc_zhb '
{
' "}{print $1";"}END{print "'
}
';"}'  
>acl_cnc_zhb
}
#其他五个运营商函数定义类似,详见脚本内容,脚本请下载http://down.51cto.com/data/873530
gen_cnc
gen_cmn
gen_ctt
gen_ctc
gen_cer
gen_other

3、whois_mb.sh 获取mnt-by关键字,为第二步处理做准备

4、主要主要根据中共区域划分生成的acl ip库文件,如果你根据运营商划分直接对筛选的ISP IP库文件(cnc ctt cer……)进行处理生成acl ip库文件即可,一般小企业DNS定义三个view(cnc,ctt,other)即可。

  自动生成的acl ip文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat 
acl_cnc_zdb
acl acl_cnc_zdb {
1.56.0.0
/13
;
1.188.0.0
/14
;
42.4.0.0
/14
;
42.52.0.0
/14
;
42.56.0.0
/14
;
42.84.0.0
/14
;
42.176.0.0
/13
;
58.21.0.0
/16
;
58.244.0.0
/15
;
…略…
……
221.207.128.0
/17
;
221.208.0.0
/14
;
221.212.0.0
/16
;
222.160.0.0
/15
;
222.162.0.0
/16
;
222.163.0.0
/19
;
222.163.32.0
/19
;
222.163.64.0
/18
;
};

 

 

相关参考资料:

 中国行政区域IP库整理脚本及文件下载地址:

 此文思路基本可以满足中小企业使用,还请大家指点、沟通,一起学习。

本文转自pandazhai 51CTO博客,原文链接:http://blog.51cto.com/dreamway/1250774

转载地址:http://lxkfl.baihongyu.com/

你可能感兴趣的文章
Tomcat 警告:consider increasing the maximum size of the cache
查看>>
Linux 用户,组,权限小练习
查看>>
DNS服务在网络中的应用
查看>>
iPhone异常关机怎么解决?中国消费者协会请苹果10日内答复
查看>>
Sbo通用数据选择功能的实现
查看>>
Oracle 快照控制文件(snapshot control file)
查看>>
11家小微贷机构签约费埃哲云平台 提升P2P风险管理
查看>>
Linux系统下文件类型解析
查看>>
Nginx做tomcat代理
查看>>
.NET开发者常会忽略的几个错误
查看>>
方便适用的企业监控之---CactiEZ 0.6
查看>>
haproxy实现均衡负载(linux)
查看>>
分治思想实现求连续子数组的最大和
查看>>
TypeScript学习(三)—— 类
查看>>
高并发场景下缓存处理的一些思路
查看>>
4.9k Star 安卓面试知识点,请收下!
查看>>
学习springBoot(5)log4j2日志框架整合
查看>>
何以回首所来径
查看>>
React中的url参数——this.props.match
查看>>
再有人问你volatile是什么,就把这篇文章发给他
查看>>