IP地址信息早期设计时是没有地区、使用人等属性的,如今需要对属地进行防御,就只能根据第三方IP库进行识别。
比如一个公有IP,为了最大化使用,在公有IP接入的地方会设置出口防火墙,用来实现NAT映射。同时利用防火墙的防护功能,可以对IP对象组定制一些策略,比如禁止国外的IP访问内部服务器。定义好策略的方向,可以做到单向通。可以做到不让国外网站主动访问内部服务器,但允许内部终端访问国外网站。
如何区分国内IP和国外IP?目前网络上的IP使用的都是无类别域间路由(CIDR )。无类别域间路由(Classless Inter-Domain Routing、CIDR)区别于以前的A类、B类、C类地址,对IP不再分类,而是通过网段加掩码的形式来定义网段。目前IP段都是被各国家的公司通过购买注册的形式拥有,比如各大运营商,以及公有云厂商。公有IP可以通过在运营商购买专线的形式获得,或者在云服务厂那里购买服务器的形式获得。IP拥有者实际上是运营商和云厂商,我们获取的公有IP有可能是动态的或静态的。当IP被封时,可以向ISP(Internet service provider)申请更换IP或解封。
IP的地域信息是网络空间测绘领域研究的对象,我们如果需要对区域进行限制,就需要获取到某区域的IP段。目前省、市级的IP信息属于战略级信息,需要付费获取,并且信息更新很快,离线信息目前是以天为单位进行更新。
国内的 ipip.net 提供省市级的离线IP查询,注册 ipip.net 账号后可以获取到离线版数据库文件,无法查看数据源,只能通过接口对IP信息进行查询。

下载试用版离线库,使用 ipip-ipdb 接口进行数据查询。
C:\> pip install ipip-ipdbC:\> python>>> import ipdb>>> db = ipdb.City(r'D:\ipipfree.ipdb')>>> ip = db.find_info("61.183.231.226","CN")>>> ip.country_name'中国'>>> ip.region_name'湖北'>>> ip.city_name'武汉'
Python接口 github 项目地址:
https://github.com/ipipdotnet/ipdb-python
IPIP官网:
https://www.ipip.net/
因为只能反向通过IP去查地域信息,没法通过数据库文件确定某个区域的IP段。如果有防火墙日志,可以对日志中的IP进行解析,从而确定相应网段。也可以构造一些网段的IP来批量测试属地信息。
如果不是用来限制省、市的IP访问,只是想精确到国家级别的IP段,这个在网上有数据可供查询。
国家级的网段信息可以在以下项目获取:
https://github.com/ipverse/rir-ip
rir-ip项目提供了各个国家的网段数据,更新比较及时:

网段文件以国家代码进行区分:





