一种基于IP地址的运营商识别方法及系统与流程

文档序号:30067332发布日期:2022-05-18 01:15阅读:334来源:国知局
一种基于IP地址的运营商识别方法及系统与流程
一种基于ip地址的运营商识别方法及系统
技术领域
1.本发明属于互联网技术领域,尤其涉及一种基于ip地址的运营商识别方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
3.通常,不同运营商之间的网络通讯速度远小于相同运营商之间的网速。因此在很多时候,就需要根据用户的ip,判断他们所属的运营商,尽量将其调度到相同的运营商群组中去,从而便于这些用户设备之间更有效率的进行通讯。比如在用户进行传统文件下载时,如果服务器并不是bgp自适应的线路,最好根据用户的来源ip,自动将该用户请求分配到相同运营商网络的服务器上去,这样下载速度可以更快。
4.p2p系统更急需运营商的快速识别技术,我们在多年的p2p系统的开发过程中发现,如果p2p中有大量终端在下载同一个资源,在某一个新的节点加入时,系统如果将当前可能超过几十万的节点全返回给它,让它挨个去连接是不现实的,这样需要浪费很多资源,而且大量无效连接还会造成网络堵塞或者flood现象。一般这种情况下,就需要p2p系统中的tracker等调度服务器,使用优秀的方法,快速从10万个节点信息中,找出最适合这个节点的几百个ip,供它去连接。一般最适合的选择策略会优先选择同一个内网的,然后再使用相同运营商作为条件。这些应用中,如何快速定位某ip所属的运营商,就是一个极为重要的关键技术。
5.当前,基于ip查询所属运营商的方法,有的是基于http/https查询接口,这种方式每次查询需要建立http链接,速度比较慢,只适合少量查询。在海量用户大并发的场景下,无法使用。有的是基于对某些ip数据库的查询,这类查询大都基于二分查找或者b-tree等方法,需要多次寻址、多次定位才能找到最终结果。并且,ip数据库很多是基于多年网友上报累积形成,目前缺少可靠权威的ip数据库的生成方法。


技术实现要素:

6.为克服上述现有技术的不足,本发明提供了一种基于ip地址的运营商识别方法及系统。通过构建运营商识别库,实现基于ip地址的快速运营商查询。
7.为实现上述目的,本发明的一个或多个实施例提供了如下技术方案:
8.一种基于ip地址的运营商识别方法,包括以下步骤:
9.获取ip地址列表,及所有ip分段的详情信息;
10.根据所述ip分段的详情信息,解析得到运营商类别,得到包含运营商的ip地址列表;
11.以ip地址二进制形式前24位作为标识信息,确定24位ip地址与运营商的对应关系,用于对待识别ip地址进行运营商识别。
12.进一步地,所述24位ip地址与运营商的对应关系确定方法为:
13.对于取值为0到16777215的正整数,进行逐一遍历,对于每个正整数,将其二进制取值左移8位,并按照每8位进行切分,得到点分十进ip地址,从包含运营商的ip地址列表中进行查找,得到该正整数相应的运营商,根据正整数顺序,将相应运营商进行依次存储,得到运营商识别库。
14.进一步地,对待识别ip地址进行运营商识别包括:
15.获取待查询ip地址,提取前24位并转换为正整数,根据所述正整数所在0到16777215之间的位置,确定相应运营商。
16.进一步地,将取值为0到16777215的正整数的相应运营商依次存储至8*1024*1024个字节的内存区域中,每个字节包括2个ip地址对应的2个所属运营商信息。
17.进一步地,对待识别ip地址进行运营商识别包括:获取待查询ip地址,提取前24位并转换为正整数,所述正整数除以2取整得到相应字节,若所述正整数为偶数,则该字节前4位为相应运营商,反之,后4位为相应运营商。
18.进一步地,所述24位ip地址与运营商的对应关系确定方法为:
19.对于包含运营商的ip地址列表,对每个ip分段中的ip地址均提取二进制形式前24位,得到标准化ip地址,将标准化ip地址与相应运营商进行关联存储,得到运营商识别库。
20.进一步地,获取待查询ip地址,提取二进制形式前24位,得到标准化ip地址,根据所述运营商识别库,得到相应运营商。
21.进一步地,所述24位ip地址与运营商的对应关系确定方法为:
22.对于取值为0到16777215的正整数,进行逐一遍历,对于每个正整数,将其二进制取值左移8位,并按照每8位进行切分,得到点分十进ip地址,从包含运营商的ip地址列表中进行查找,得到该正整数相应的运营商,将该正整数和相应运营商进行关联存储,得到运营商识别库。
23.进一步地,获取待查询ip地址,提取二进制形式前24位并转换为正整数,根据所述运营商识别库,得到相应运营商。
24.一个或多个实施例提供了一种基于ip地址的运营商识别系统,包括:
25.运营商识别库,用于存储ip地址和运营商的对应关系,其中,所述ip地址为24位ip地址或相应正整数形式;或,存储根据ip地址正整数顺序排序的相应运营商数据;
26.运营商识别模块,用于获取待查询ip地址,提取二进制形式前24位;
27.若基于存储根据ip地址正整数顺序排序的相应运营商数据的运营商识别库,将前24位转换为正整数,根据所述正整数所在0到16777215之间的位置,确定相应运营商;
28.若基于存储ip地址和运营商的对应关系的运营商识别库,得到标准化ip地址或相应正整数,基于所述运营商识别库查找相应运营商。
29.以上一个或多个技术方案存在以下有益效果:
30.提出了一种通过构建运营商识别库关联ip地址和运营商,从而实现通过ip地址进行运营商查询的方法,查询效率高。
31.提出了一种仅包括运营商信息的识别库构建方法,按照ip地址正整数顺序获取相应运营商并依次存储,大大节省了数据存储空间(实施例中仅占用8m空间);并且可以加载到内存,能实现内存中一次寻址就完成查找,识别效率较高。
附图说明
32.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
33.图1为本发明实施例一中基于ip地址的运营商识别方法整体流程图;
34.图2为本发明实施例一中的一种运营商识别库建立流程图。
具体实施方式
35.应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
36.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
37.在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
38.实施例一
39.本实施例公开了一种基于ip地址的运营商识别方法,如图1所示,包括以下步骤:
40.步骤1:获取ip地址列表,及所有ip分段的详情信息。
41.步骤2:根据所述ip分段的详情信息,解析得到运营商类别,得到包含运营商的ip地址列表。
42.本实施例中以中国为例,获取中国相应的ip地址列表。ip地址列表从全球五大区域性因特网注册管理机构之一的亚太互联网络信息中心(apnic)获取,亚太互联网络信息中心负责亚太地区ip地址、asn(自治域系统号)的分配,数据具有权威性。
43.数据获取地址:http://ftp.apnic.net/stats/apnic/delegated-apnic-latest。
44.获取的ip地址列表中,每一行为一段已分配出去的ip,ip以整数形式标记,如下所示:
45.apnic|au|asn|4806|2|19961025|allocated
46.apnic|cn|asn|4808|1|19960109|allocated
47.apnic|cn|asn|4809|2|19960109|allocated
48.从所述ip地址列表中,根据所述指定国家标识信息,筛选相应ip地址列表,本实施例中,筛选所有|cn|标记的ip列表,归类为中国运营商,其余的统一归类为其他国家运营商。
49.获取所述ip地址列表中所有ip分段的详情信息,解析得到运营商类别,得到包含运营商的ip地址列表;
50.本实施例中,对中国ip列表中的所有ip分段逐一进行详情获取基于以下链接:http://wq.apnic.net/apnic-bin/whois.pl。以下为详情信息示例:
[0051][0052][0053]
基于详情信息中netname(网络名称)和descr(描述信息)的信息,可获取该ip分段对应的运营商。通过分析列表中所有ip分段的详情信息,可得到所有运营商,本实施例中,基于ip分段详情信息解析得到:"cnc","chinatelecom","cern","chinamobile","unicom","citic"、“other”共7类中国运营商,加上不在列表中的其他国家运营商,共8类,形成一个有8种不同运营商标记的ip列表。
[0054]
本实施例针对c类ip地址为例进行说明,下文涉及的ip地址,均为c类ip地址。
[0055]
步骤3:以ip地址二进制形式前24位作为标识信息,确定24位ip地址与运营商的对应关系,用于对待识别ip地址进行运营商识别。
[0056]
ip地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是按照4个字节进行分割)。ip地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例如:点分十进ip地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
[0057]
本实施例中选择前24位作为运营商的标识信息。这是因为运营商所申请到的ip,都是一段连续的ip,最后的8位不同,并不影响他们属于同一家运营商,因此最后8位可以省略的。
[0058]
作为一种具体的实现方式,如图2所示,所述步骤3具体包括:
[0059]
步骤3.1:对于取值为0到16777215的正整数,进行逐一遍历,对于每个正整数,将其二进制取值左移8位,并按照每8位进行切分,得到点分十进ip地址,从包含运营商的ip地址列表中进行查找,得到该正整数相应的运营商,根据正整数顺序,将相应运营商进行依次存储,得到运营商识别库。
[0060]
对于8种不同的运营商,分别用0x0-0x7的数值,共4位来标记这8类不同的运营商。这样,整数n所对应的ip,就能唯一确定其所属的运营商标记(0x0
‑‑
0x07)。
[0061]
整数n因为取值范围是24位,也就是一共有16*1024*1024,共16m个不同的取值。其中每个n所对应的运营商的标记是需要用4位,也就是半个字节来进行标记的。因此,一个字节,其实可以标记2个运营商。
[0062]
因此可以形成一个8*1024*1024字节的内存区域,来存储运营商识别库。具体地,
每个字节用来记录2个运营商,因此共需要8*1024*1024个字节的内存区域。
[0063]
步骤3.2:获取待查询ip地址,提取前24位并转换为正整数,根据所述正整数所在0到16777215之间的位置,确定相应运营商。
[0064]
当采用8m内存存储运营商信息时,获取待查询ip地址,提取前24位并转换为正整数,所述正整数除以2取整得到相应字节,若所述正整数为偶数,则该字节前4位为相应运营商,反之,后4位为相应运营商。
[0065]
作为第二种具体的实现方式,所述步骤3具体包括:
[0066]
步骤3.1:对每个ip分段中的ip地址均提取二进制形式前24位,得到标准化ip地址,将标准化ip地址与相应运营商进行关联存储,得到运营商识别库;
[0067]
将标准化ip地址与相应运营商进行关联存储时,还进行去重处理,去除重复记录。
[0068]
步骤3.2:获取待查询ip地址,提取二进制形式前24位,根据所述运营商识别库,得到相应运营商。
[0069]
作为第三种具体实现方式,所述步骤3具体包括:
[0070]
步骤3.1:对于取值为0到16777215的正整数,进行逐一遍历,对于每个正整数,将其二进制取值左移8位,并按照每8位进行切分,得到点分十进ip地址,从包含运营商的ip地址列表中进行查找,得到该正整数相应的运营商,将该正整数和相应运营商进行关联存储,得到运营商识别库。
[0071]
ip地址前24位转换为n的取值为从0到16777215(2的24次方减1)。对于每个正整数,为获取其32位ip地址,首先将其二进制取值左移8位,并按照每8位进行切分,得到点分十进ip地址,比如1920103026这个整数完整的16进制为0x72727272,按每8位切分一段,则形成一个0x72 0x72 0x72 0x72这种四段,0x72的10进制是114,所以其ip型表示是:114.114.114.114。由于n取值只有24位,其实质所对应的ip地址为x.x.x.0这种类型的ip地址,最后一段会固定为0。
[0072]
对于从包含运营商的ip地址列表中查找不到的运营商,视为其他国家运营商。
[0073]
所述运营商识别库中正整数的形式可以为二进制、十进制或十六进制,在此不做限定。
[0074]
步骤3.2:获取待查询ip地址,提取二进制形式前24位,根据所述运营商识别库,得到相应运营商。
[0075]
根据运营商识别库中ip地址的存储形式,将待查询ip地址的前24位转化为二进制、十进制或十六进制表示,再进行查找。
[0076]
每隔一段时间重复执行步骤1-3,即可得到最新的运营商识别库。
[0077]
实施例二
[0078]
在实施例一的基础上,本实施例提供了一种基于ip地址的运营商识别系统,包括:
[0079]
运营商识别库,用于存储ip地址和运营商的对应关系,或,存储根据ip地址正整数顺序排序的相应运营商数据;
[0080]
所述运营商识别库可以为数据库,也可以加载到内存区域。
[0081]
对于存储ip地址和运营商的对应关系的运营商识别库,所述ip地址的形式可以为二进制、十进制或十六进制等,在此不做限定。
[0082]
运营商识别模块,用于获取待查询ip地址,提取前24位;
[0083]
若基于存储ip地址和运营商的对应关系的运营商识别库,根据二进制形式前24位查找得到相应运营商;
[0084]
若基于存储根据ip地址正整数顺序排序的相应运营商数据的运营商识别库,将前24位转换为正整数,根据所述正整数所在0到16777215之间的位置,确定相应运营商。
[0085]
其中,所述运营商识别库的构建方法如实施例一中相应部分所述,在此不再赘述。
[0086]
以上一个或多个实施例提供了一种获得可靠、权威的国内ip所属运营商数据的方法,并且该方法可以通过定期执行拿到较新的数据,相比现有的各类收费等数据库,更为简单有效、可控。并且,基于很小的内存占用,实现了一次内存寻址即可找到所属运营商。相比b-tree、二分查找、数据库查询等其他方式的查找方法,一次内存寻址是最高效、最快的方法,在实际使用中可以满足海量并发查询的需求。
[0087]
本领域技术人员应该明白,上述本发明的各模块或各步骤可以用通用的计算机装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。本发明不限制于任何特定的硬件和软件的结合。
[0088]
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1