简易构建适合风控系统的IP库

[[175811]]

ip作为识别和定位用户的手段来说,对互联网企业起着至关重要的作用,特别是在精准营销、反欺诈等业务方面。本文描述如何简单的去构建自己的ip地址库。

拿来主义

实际上,对大部分用户来说,如果要求不高,完全可以拿现成的资源来使用:

  1. 老外的数据有maxmind,不过对国内有些水土不服
  2. BAT级别的公司有开放api支持,但不提供离线库
  3. 国内也有第三方的优秀提供商,比如ipip.net。他们提供免费的离线库,以及收费的服务。是国内比较专业的ip信息服务商,也有一篇高质量的ip库构建文章讲述了来龙去脉。普通使用,推荐直接使用该库

吃饱了撑着

但对我们这样的风控公司来说,现成的资源有以下不足:

1.需要离线的数据库。我们的产品是提供私有化的大数据风控平台,由于涉及的信息比较敏感,需要隔绝外网来保证数据隐私性和安全性,api的方式不合适

2.需要定期更新的数据库。ip地址经常变化,需要精准度高、更新频繁的来源,评测下来,现存的第三方提供商还是存在数据覆盖率和准确性方面的不足

3.需要规范化的数据。我们需要手机、身份证、ip等多个维度的归属地,但数据来源多样,比如:在很多场合,这种数据不一致没关系,但我们的风控引擎会拿来作比较计算,这种不一致会导致大量的计算偏差,引起误报

  • 有的显示“南京”, 有的显示“南京市”
  • 有的显示县级市,有的显示地级市
  • 有些城市改过名称,有的显示老名称,有的显示新名称
  • 有的精确到市,有的精确到区

4.有一些优秀的数据源提供精确到区的数据,但我们不需要采用。ip分配多变,而且运营商分配顶多到市一级,所以区县级的数据准确度会有很大挑战,影响风控使用,建议是先弃掉

5.对于非主动获取的第三方数据,习惯上不信任,需要去进行评估和重新验证,贸然使用会有不良后果

所以,我们做了一些工作,来构建自己的ip库,方便我们的风控系统使用。本文余下部分会描述我们的大概思路(具体实现会采用简要方法来说明)。

ip库原始数据获取

作为一个非专业公司,不可能像 ipip.net 那样花很大的力气去撒点做网络探测和分析,最省事的就是爬取网上的资源。这里举一个简单例子,拿局域网内最大的搜索引擎公司作为数据来源。

写一个一行的爬虫:

整条命令通过shell管道来实现,分别包括:

1.生成ip c段地址列表,由seq来生成相应的数字

2.将数字转为ip的字符串形式,由awk来转换

3.利用curl向度娘发起请求

  • 请求地址可以直接在度娘页面上请求后,看网络后台即可得到。这里不截图展示了
  • 该请求比较简单,只用替换一个ip作为参数,直接xargs即可
  • 度娘没有下限,可以暴力一些,所以通过xargs的多进程特性,开启多进程支持(这里设为100)
  • 转一下utf8
  • 直接把原始ip和结果输出,直接awk即可

4.等。这个简易爬虫效率上并不高,而且需要执行256*256*256=16777216次访问,所以需要超过1天来完成。直接扔服务器上让他慢慢跑吧

ip库构建

去重处理

原始数据拿来后,需要进行整理,首先需要去掉重复信息,比如原始的数据是这样的

这些c段紧靠在一起,完全没有必要,再通过一行命令去做去重

说明:

1.首先按照ip进行排序,由于之前有多进程并发操作,结果数据会有乱序情况出现,不利于去重

2.利用awk,只输出归属地相同的邻近行的第一行

3.最终得到的结果中,任意相邻的两行地址都不一样

地理位置规范化

这里涉及到我们去建地址库的初衷,由于有的数据来源地理位置不统一,比如有的显示市,有的显示区,有的县级市地级市傻傻分不清楚。所以需要对所有归属地进行规范化处理。

整个过程略复杂,我们通过算法去自动生成和校正如下的映射表,然后再利用规范化算法得到统一的地址。整个过程略复杂,而且映射表数据需要不停的自动化构建来校准,就不展示更多的细节。

山东:

名称: 山东省

城市:

济南:

名称: 济南市

章丘:

名称: 济南市

青岛:

名称: 青岛市

即墨:

名称: 青岛市

平度:

名称: 青岛市

胶南:

名称: 青岛市

莱西:

名称: 青岛市

淄博:

名称: 淄博市

枣庄:

名称: 枣庄市

滕州:

名称: 枣庄市

东营:

名称: 东营市

烟台:

名称: 烟台市

龙口:

名称: 烟台市

莱阳:

名称: 烟台市

莱州:

名称: 烟台市

蓬莱:

名称: 烟台市

ip库生成

得到最终数据后,需要做最后打包。

一种最简单的方式是直接将上述数据作为最终数据,然后使用的时候读入,塞进一个 treemap 即可。但这种方式效率比较低,生成的包也比较大,从而影响到使用地理库的应用。

我们采用了另一种方法,逆向了ipip.net的数据格式,用该格式打出自己的数据包,这里有几个好处:

1.该数据格式比较精简,能大大减少最终胜出的数据包大小

2.由于用户比较多,网上有多语言的客户端,方便借鉴(不过实际使用还需要自己重新优化,网上和官方的库效率还是较低;要用的话也尽量用官方的库,有些网友的库不正确)

3.由于我们会共享数据给一些关系好的客户,所以采用标准的格式,他们只要替换数据文件即可

生产级别的ip库构建

上文描述了构建的大概过程,但核心的部分由于篇幅限制采用了简易方法进行说明,如果要做生产级别的还需要注意一下方面:

1.更好的原始数据获取

  • 百度的数据来源并不是最好的
  • 需要更健壮复杂的爬虫系统,简单的bash脚本还是有玩具性质,进拿来做展示用
  • 大部分时间只关心国内数据,可以利用现有的asn数据来识别国家,减少数据爬取的规模。网上也有国内ip段的划分
  • c段地址有点粗,不太准确,而且爬取效率低,需要更聪明的爬取策略

2.持续的数据获取,以及自动化的校准库和ip库构建。由于ip数据变化频率高,只有不停更新才能保证更好的精度

3.统一ip、手机、身份证、wifi地址等数据做统一的地理信息库。单个维度的信息往往只能用来做展示,如果有强计算需求的话需要做统一的数据库

本文转自岂安科技微信公众号:bigsec,已取得授权

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/141952.html<

(0)
管理的头像管理
上一篇2025-03-04 15:41
下一篇 2025-03-04 15:42

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注