Nov022017

关于IP whois入门介绍以及部署实践

作者: 主机迷 分类: 网络安全

这是关于IP whois一篇非常不错的文章,讲了不少IP whois原理方面的东西,解答了不少疑问。

背景

whois分两种,一种是查询域名的,一种是查询IP的。这里说的时候后者。

背景不提,你大可以认为我是闲的蛋疼,毕竟互联网上公开的whois数据库非常多,而且没有任何使用的限制。国内可能有前人摸索过,但是目前还没有在某个平台上看到有人提起,所以才斗胆来写了这篇文章。

说起IP Whois,有不少专业名词,一个个解释不过来,这里只放几个链接,做做科普就好了。

1、AS (维基百科

2、BGP (维基百科

3、RIRs (维基百科

如果你用过whois(Mac下自带的whois工具是用来查询域名的,使用brew安装的是whois3,其他平台上就只有ip的whois)工具,那么你可以留意一下,其实大部分的whois服务器,都是用的是同一套软件,只不过版本不一样而已。

另外,虽然whois使用的非常少,但是依然有相应的协议和规范(RFC3912),所以,即使在不同的平台上进行查询,命令格式、查询结果的格式也都是类似的。

whois常用命令行:

whois3: [-4|-6] [-h host | --host=host] [-p port | --port=port] -k | query

-h 指定查询的whois数据库,五大RIR都有自己的whois数据库,另外有部分第三方提供的数据库。如果未指定,就使用默认的whois.ripe.net

-p whois协议有自己的端口,如果使用自建的whois镜像,可能需要指定端口

query 查询语句有很多种,虽然使用同一套程序,但是不同的数据库,可能会支持不同的功能,如果不知道具体使用什么样的查询语句,可以直接使用下面的命令行来获取帮助信息

whois -h whois.apinc.net --help

IP whois 查询能够提供什么样的信息呢?

1.1.220.2是此前我在测试中捕捉到的一个发送垃圾邮件的IP地址,对这个IP的whois查询结果如下

dbint@whois:~$ whois -h whois.apnic.net 1.1.220.2 % [whois.apnic.net]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html
% Information related to '1.1.192.0 - 1.1.255.255' inetnum:        1.1.192.0 - 1.1.255.255 netname:        TOTNET
descr:          Dynamic IP Address for residential Broadband Customers
country:        TH
admin-c:        AG100-AP
tech-c:         AG100-AP
status:         ASSIGNED NON-PORTABLE
mnt-by:         MAINT-TH-TOT
mnt-lower:      MAINT-TH-TOT
mnt-routes:     MAINT-TH-TOT
mnt-routes:     MAINT-TH-TOT-ISP
mnt-irt:        IRT-TOT-TH
changed:        apipolg@tot.co.th 20140525 source:         APNIC
irt:            IRT-TOT-TH
address:        TOT Public Company Limited
address:        89/2 Moo 3 Chaengwattana Rd, Laksi,Bangkok 10210 THAILAND
e-mail:         apipolg@tot.co.th
abuse-mailbox:  abuse@totisp.net
admin-c:        ira3-ap
tech-c:         ira3-ap
auth:           # Filtered mnt-by:         MAINT-TH-TOT
changed:        apipolg@tot.co.th 20150703 source:         APNIC
person:         Apipol Gunabhibal
nic-hdl:        AG100-AP
e-mail:         apipolg@tot.co.th
address:        TOT Public Company Limited
address:        89/2 Moo 3 Chaengwattana Rd, Laksi, Bangkok 10210 THAILAND
phone:          +66-2574-9178 fax-no:         +66-2574-8401 country:        TH
changed:        apipolg@tot.co.th 20110215 mnt-by:         MAINT-TH-TOT
source:         APNIC
% Information related to '1.1.192.0/19AS23969' route:          1.1.192.0/19 descr:          TOT Public Company Limited
origin:         AS23969
mnt-by:         MAINT-TH-TOT
changed:        boy@totbb.net 20120220 source:         APNIC
% Information related to '1.1.192.0/19AS9737' route:          1.1.192.0/19 descr:          TOT Public Company Limited
origin:         AS9737
country:        TH
mnt-routes:     MAINT-TH-TOT
mnt-by:         MAINT-TH-TOT
changed:        apipolg@tot.co.th 20120223 source:         APNIC
% This query was served by the APNIC Whois Service version 1.69.1-APNICv1r7-SNAPSHOT (WHOIS1)

我们检索出了IP地址所属的网段,AS号,注册时间,注册组织以及注册组织所属的国家。某些情况下,注册组织可能会上报IP地址的规划情况,那么我们就可以大致的判断出这个地址段是用来做什么的了。

获取看这个链接你会得到更直观的结果:点击查看


4134是中国CN2(百度百科)网络的AS号。基本上在国内,必须要接入CN2网络,才能连接到互联网(没有具体考证,从08年前后电信泄露的文档中推断出来的)

只从上面的图中,1.92.0.0/13这个段被直接分别分配给了一个公司,相比之下,某些身份只能拿到一些零散的C段,那么这个公司一定是一个很有分量的公司。

实际上这些数据都是AS注册组织向RIR机构上报的信息,因为层层上报的原因,在加上RIR机构是完全没有办法来判断是到底有没有虚报,所以这些信息仅仅只能作为一个参考作用。

从4134所有网段的描述信息里,还是找到了几个IDC的网段。有兴趣的可以自己尝试一下。

除了这些信息,whois数据对威胁情报,也起到了不小作用。比较直观的一点就是,IP地址的分配是动态的,并不是说DHCP那个动态,而是,尽管IP地址资源有限,还是有会一些IP地址出现冗余,被回收和重新分配。

一个主要的原因是,欧美地区在推行IPv6的同时,一些IPv4的地址就不再需要了,空出来的这部分就被释放掉,交回RIR进行重新分配,然后又有其他的机构去申请使用。所有会出现,一个IP地址,可能上个月是欧洲的,这个月就变成了中国的。

另外,对于腾讯和阿里,拥有自己的AS号,是可以直接从whois数据中检索出他们所拥有的全部地址段的。

这里要介绍的,是自建whois镜像,每个人有自己关注的点,如何从whois数据库中找到你需要的信息,是因人而异的。只是看不惯很多whois查询站点数据不准,还没完没了的验证码和广告,觉得有必要分享给大家。

系统环境准备

whois server正常运行需要的内存不大,但是初次导入数据的时候需要消耗巨大的内存。官方的文档里推荐至少8G内存,8GSWAP,至少120G磁盘空间。

实践下来,CentOS下需要调整很多内核设置,而且最终运行效果也不是很理想,所以不推荐用CentOS来承载。

在CentOS下失败了多次之后,在Ubuntu上一次部署成功。所以推荐的,还是Ubuntu(我使用的是Ubuntu Server 14.04 x64)

需要JDK1.8

需要Mariadb 5.5

需要Maven

需要make(Ubuntu Server默认是没有gcc和make工具的)

需要gcc

需要jmx (jmx下载地址  Mac下jmx有BUG,无法使用,就别折腾了)

增强配置

由于在初次导入数据的时候需要对文本进行大量的解析,如果你打算把whois服务器开放的话,查询量也会很大所以需要对系统和Mariadb的配置做一些调整。

sysctl -w kern.maxfiles=1048600

sysctl -w kern.maxfilesperproc=1048576

如果使用的是Ubuntu Server这两条配置默认是满足的,可以不考虑其它的。

MariaDB虽然接近于MySQL,我没有尝试使用MySQL来做whois数据的存储。

一些配置如下:

max_allowed_packet = 20M

wait_timeout = 31536000

innodb_buffer_pool_size = 2356M

innodb_additional_mem_pool_size = 32M

编译安装

源码地址:下载地址

下载并且解压,然后在whois源码目录中运行:

mvn clean install -P release 

编译过程可能要很长时间,我自己的机器上,编译了整整一天。-_-|||

建立数据库结构

初始化数据库的脚本放在whois-commons/src/main/resource/目录下

dbint@whois:~/whois/whois-commons/src/main/resources$ ls -alh
total 100K
drwxrwxr-x 3 dbint dbint 4.0K May  2 22:50 .
drwxrwxr-x 4 dbint dbint 4.0K May  2 22:50 ..
-rw-rw-r-- 1 dbint dbint 5.3K May  2 22:50 acl_schema.sql
-rw-rw-r-- 1 dbint dbint 3.7K May  2 22:50 applicationContext-commons.xml
-rw-rw-r-- 1 dbint dbint 4.6K May  2 22:50 dnscheck_schema.sql
-rw-rw-r-- 1 dbint dbint 1.3K May  2 22:50 internals_data.sql
-rw-rw-r-- 1 dbint dbint 2.4K May  2 22:50 internals_schema.sql
-rw-rw-r-- 1 dbint dbint 2.3K May  2 22:50 mailupdates_schema.sql
drwxrwxr-x 2 dbint dbint 4.0K May  2 22:50 patch
-rw-rw-r-- 1 dbint dbint   35 May  2 22:50 version.properties
-rw-rw-r-- 1 dbint dbint 1.2K May  2 22:50 versions_schema.sql
-rw-rw-r-- 1 dbint dbint  123 May  2 22:50 whois_data.sql
-rw-rw-r-- 1 dbint dbint 4.3K May  2 22:50 whois.properties
-rw-rw-r-- 1 dbint dbint  34K May  2 22:50 whois_schema.sql

其中,xxxx_schema.sql就是用来建立数据库结构的脚本,其他的脚本不要动,实践证明,没啥卵用。

whois.properties是whois的核心配置文件,后面会给出我的配置样例。

数据库结构包括:

LOCAL—————————————-使用whois_schema.sql初始化

ACL_LOCAL——————————–使用acl_schema.sql初始化

DNSCHECK_LOCAL———————使用dnscheck_schema.sql初始化

MAILUPDATES_LOCAL—————–使用mailupdates_schema.sql初始化

INTERNALS_LOCAL———————使用internals_schema.sql初始化

这几个表是必须的,哪怕你根本不用acl和mailupdate的功能,这几个schema也必须要有。

另外,由于我们要建立的是一个完整的whois镜像,所以每一个镜像源需要有一个与之对应的schema。

我只镜像了五大RIR的数据,所以有五个镜像schema。

WHOIS_MIRROR_RIPE_GRS

WHOIS_MIRROR_APNIC_GRS

WHOIS_MIRROR_ARIN_GRS

WHOIS_MIRROR_AFRINIC_GRS

WHOIS_MIRROR_LACNIC_GRS

以上五个schema,都使用whois_schema.sql来初始化。

如果需要,可以考虑添加RADB和JIRR的数据,实际上,这两个RIR机构的数据也是包含在APNIC的数据里面的,我没有添加。

whois主程序使用空密码的dbint账户来连接数据库,可以用下面的方式来创建账户:

CREATE USER 'dbint'@'localhost' IDENTIFIED BY '';GRANT ALL PRIVILEGES ON *.* TO 'dbint'@'localhost';FLUSH PRIVILEGES;

我当然知道这有点不安全,反正数据都是别人的,你拿走也没有任何意义,就这样配置好啦。

如果你想自己指定一个账户也行,但是你必须在后面的配置文件里详细写清楚。

whois配置

1、把之前下载的jmxterm-<my version>-uber.jar复制到whois源码目录下

2、把whois-commons/src/main/resource/whois.properties文件复制到whois源码目录下,并改名为properties

3、maven编译生成的主程序文件在whois-db/target/whois-db-1.87.jar,使用不同的发行版本编译,得到的文件名会有所差异,自行区分。需要把这个包复制到whois源码目录下。

4、运行whois的一些在tools目录中,把这些文件全部拷贝到whois源码目录中。

5、修改whois.init脚本,把其中JMXTERMPATH修改为之前下载的jmx文件的文件名。

6、在whois源码目录下,创建空的var文件夹(dump文件,日志,export文件都会放在这里面)

7、修改properties文件(这里是大头,官方文档中没有完全说明,我摸索了好久才理解的,经管理解了,但是依然巨坑无数,所以,各位如果有好的办法,请务必分享一下)

# The main / default whois source (RIPE|TEST) whois.source=LOCAL
whois.additional.sources=RIPE-GRS,APNIC-GRS,LACNIC-GRS,AFRINIC-GRS,ARIN-GRS# 默认情况下,whois只对LOCAL做数据查询,但是我们的镜像数据分散在多个schema中,所以需要额外添加。注意,不需要写完整的shema名,whois会自动把source name转换成WHOIS_MIRROR_(SOURCE_NAME)的形式 # GRS是whois的自动跟新机制,每天凌晨自动同步数据,不需要深究 # Service ports #设定whois数据的监听端口 port.query=8187 #whois协议有专门的端口,我使用的是8187 port.api=8188 #ripe-ncc提供的whois server也可以使用RESTful接口 port.nrtm=0 #拒绝给其他服务器提供nrtm数据更新服务 # File system locations dir.rpsl.export=var${jvmId:}/export dir.rpsl.export.tmp=var${jvmId:}/export_tmp
dir.rpsl.export.internal=internal
dir.rpsl.export.external=dbase_new
dir.rpsl.export.external.legacy=dbase
dir.freetext.index=
dir.update.audit.log=var${jvmId:}/log/audit
dir.grs.import.download=var${jvmId:}/grs
freetext.index.update.interval.msecs=60000 # API configuration api.rest.baseurl=http://rest.db.ripe.net #使用五大RIR机构的数据来进行同步,还有部分小的RIR机构,包含在了五大机构的数据中 # Comma separated list of GRS sources grs.sources=RIPE-GRS,APNIC-GRS,LACNIC-GRS,AFRINIC-GRS,ARIN-GRS
grs.sources.dummify=# Comma separated list of IP ranges from which sensitive operations are accessible #whois server完全没有身份验证,所有的安全防护都通过限制IP地址进行。这里限制的是某些敏感操作 ipranges.trusted=127.0.0.1,::1 # Comma separated list of IP ranges from which the OSI layer2 load balancer health checks are executed from #设置whois服务监听地址 ipranges.loadbalancer=127.0.0.1,::1 # Mail properties # RIR的会员组织可以通过邮件的方式来接收更新数据,不是member就不需要这项了 mail.smtp.enabled=false mail.smtp.host=
mail.from=RIPE Database Administration local <unread@ripe.net>
mail.update.threads=2 mail.dequeue.interval=1000 mail.smtp.retrySending=true # NRTM server # 不启用NTRM更新,也是RIR会员组织专项 nrtm.enabled=false nrtm.update.interval=15 # NRTM client nrtm.import.enabled=false nrtm.import.sources=# RpslExport rpsl.export.enabled=true # GRS source-specific properties to acquire dumps grs.import.enabled=true grs.import.sources=RIPE-GRS,APNIC-GRS,LACNIC-GRS,AFRINIC-GRS,ARIN-GRS# GRS RIPE-NCC grs.import.ripe.resourceDataUrl=ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-extended-latest grs.import.ripe.download=ftp://ftp.ripe.net/ripe/dbase/ripe.db.gz grs.import.ripe.source=RIPE-GRS# GRS APNIC grs.import.apnic.resourceDataUrl=ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest #grs.import.apnic.download= # APNIC没有完整的dump数据,都是分散的,所以我采用了多次导入的方式grs.import.apnic.source=APNIC-GRS # LACNIC是唯一一家不提供归档数据的,所以需要注册成为一个会员,通过其他的方式来获取数据,即使注册了会员,也啥都看不到 # GRS LACNIC grs.import.lacnic.resourceDataUrl=ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest #grs.import.lacnic.userId= #grs.import.lacnic.password= grs.import.lacnic.source=LACNIC-GRS# GRS AFRINIC grs.import.afrinic.resourceDataUrl=ftp://ftp.afrinic.net/stats/afrinic/delegated-afrinic-extended-latest grs.import.afrinic.download=ftp://ftp.afrinic.net/dbase/afrinic.db.gz grs.import.afrinic.source=AFRINIC-GRS# GRS ARIN # ARIN的数据也存在一个比较严重的问题,他提供的dump文件格式不是whois所接受的,也没有像APNIC那种分散的归档文件,所以暂时是空的 grs.import.arin.resourceDataUrl=ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest grs.import.arin.download=
grs.import.arin.source=ARIN-GRS#GRS RADB #grs.import.radb.download=ftp://ftp.radb.net/radb/dbase/radb.db.gz #grs.import.radb.source=RADB-GRS # GRS JPIRR #grs.import.jpirr.docwnload=ftp://ftp.nic.ad.jp/jpirr/jpirr.db.gz #grs.import.jpirr.source=JPIRR-GRS # SSO translation properties crowd.rest.url=http://crowd.prepdev.ripe.net:8095/crowd crowd.rest.user=db
crowd.rest.password=evarylli# Unref cleanup unrefcleanup.enabled=false unrefcleanup.deletes=false whois.countrycodes=AD,AE,AF,AG,AI,AL,AM,AO,AQ,AR,AS,AT,AU,AW,AX,AZ,BA,BB,BD,BE,BF,BG,BH,BI,BJ,BL,BM,BN,BO,BQ,BR,BS,BT,BV,BW,BY,BZ,CA,CC,CD,CF,CG,CH,CI,CK,CL,CM,CN,CO,CR,CU,CV,CW,CX,CY,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,EH,ER,ES,ET,EU,FI,FJ,FK,FM,FO,FR,GA,GB,GD,GE,GF,GG,GH,GI,GL,GM,GN,GP,GQ,GR,GS,GT,GU,GW,GY,HK,HM,HN,HR,HT,HU,ID,IE,IL,IM,IN,IO,IQ,IR,IS,IT,JE,JM,JO,JP,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,LT,LU,LV,LY,MA,MC,MD,ME,MF,MG,MH,MK,ML,MM,MN,MO,MP,MQ,MR,MS,MT,MU,MV,MW,MX,MY,MZ,NA,NC,NE,NF,NG,NI,NL,NO,NP,NR,NU,NZ,OM,PA,PE,PF,PG,PH,PK,PL,PM,PN,PR,PS,PT,PW,PY,QA,RE,RO,RS,RU,RW,SA,SB,SC,SD,SE,SG,SH,SI,SJ,SK,SL,SM,SN,SO,SR,SS,ST,SV,SX,SY,SZ,TC,TD,TF,TG,TH,TJ,TK,TL,TM,TN,TO,TR,TT,TV,TW,TZ,UA,UG,UM,US,UY,UZ,VA,VC,VE,VG,VI,VN,VU,WF,WS,YE,YT,ZA,ZM,ZW
whois.languagecodes=ab,aa,af,ak,sq,am,ar,an,hy,as,av,ae,ay,az,bm,ba,eu,be,bn,bh,bi,bs,br,bg,my,ca,ch,ce,ny,zh,cv,kw,co,cr,hr,cs,da,dv,nl,dz,en,eo,et,ee,fo,fj,fi,fr,ff,gl,ka,de,el,gn,gu,ht,ha,he,hz,hi,ho,hu,ia,id,ie,ga,ig,ik,io,is,it,iu,ja,jv,kl,kn,kr,ks,kk,km,ki,rw,ky,kv,kg,ko,ku,kj,la,lb,lg,li,ln,lo,lt,lu,lv,gv,mk,mg,ms,ml,mt,mi,mr,mh,mn,na,nv,nb,nd,ne,ng,nn,no,ii,nr,oc,oj,cu,om,or,os,pa,pi,fa,pl,ps,pt,qu,rm,rn,ro,ru,sa,sc,sd,se,sm,sg,sr,gd,sn,si,sk,sl,so,st,es,su,sw,ss,sv,ta,te,tg,th,ti,bo,tk,tl,tn,to,tr,ts,tt,tw,ty,ug,uk,ur,uz,ve,vi,vo,wa,cy,wo,fy,xh,yi,yo,zu
whois.maintainers.power=RIPE-NCC-HM-MNT
whois.maintainers.enduser=RIPE-NCC-END-MNT
whois.maintainers.legacy=RIPE-NCC-LEGACY-MNT
whois.maintainers.alloc=RIPE-NCC-HM-MNT,RIPE-NCC-HM-PI-MNT
whois.maintainers.enum=RIPE-GII-MNT,RIPE-NCC-MNT
whois.maintainers.dbm=RIPE-DBM-MNT,RIPE-NCC-LOCKED-MNT,RIPE-DBM-STARTUP-MNT,RIPE-DBM-UNREFERENCED-CLEANUP-MNT,RIPE-ERX-MNT
whois.dummy_role.nichdl = DR1-TEST# Source aware data sources # 如果你为whois指定了特定的数据库账户。需要在下面指定 whois.db.driver=org.mariadb.jdbc.Driver
whois.db.master.driver=net.ripe.db.whois.common.jdbc.driver.LoggingDriver
whois.db.master.url=jdbc:log:mariadb://localhost/LOCAL;driver=org.mariadb.jdbc.Driver whois.db.master.username=dbint
whois.db.master.password=
whois.db.slave.url=jdbc:mariadb://localhost/LOCAL whois.db.slave.username=dbint
whois.db.slave.password=
whois.db.grs.master.baseurl=jdbc:mariadb://localhost/WHOIS_MIRROR whois.db.grs.slave.baseurl=jdbc:mariadb://localhost/WHOIS_MIRROR # 这里配置的只是数据库的前缀,每添加一个GRS数据源,就要建立一个相应的数据库,命名方式是WHOIS_MIRROR_(SOURCE_NAME) # 后面这部分的设置基本上没什么用,不用改动 # Common data sources mailupdates.database.url=jdbc:mariadb://localhost/MAILUPDATES_LOCAL mailupdates.database.username=dbint
mailupdates.database.password=
dnscheck.database.url=jdbc:mariadb://localhost/DNSCHECK_LOCAL dnscheck.database.username=dbint
dnscheck.database.password=
acl.database.url=jdbc:mariadb://localhost/ACL_LOCAL acl.database.username=dbint
acl.database.password=
internals.database.url=jdbc:mariadb://localhost/INTERNALS_LOCAL internals.database.username=dbint
internals.database.password=#Feature Toggles feature.toggle.changed.attr.available=true

数据导入和更新

首先,启动whois服务:

./whois.init start

在var/console.log中可以看到whois运行的一些信息,会有很多错误,但是只要whois能够成功运行,问题就不大。

使用jmx-term来下发数据导入的任务

./whois.init jmx

>bean net.ripe.db.whois:name=GrsImport

>run grsImport "RIPE-GRS" "first"

grsImport有两个参数,第一个表示要导入的数据源,名字必须跟porperties中指定的grs.import.ripe.source对应,第二个参数只是注释,用来区分每一次操作。

数据源可以直接指定“all”,一次性下发所有数据源的导入任务。但是由于APNIC,ARIN和LACNIC的数据都存在一些问题,不建议这么干。

同理,导入APNIC的数据可以这样:

>run grsImport "APNIC-GRS" "first"

停止whois服务:

./whois.init stop

如果数据正在更新,会等待更新完毕才退出,所以退出之前请确认没有数据导入的任务正在执行。

注:数据导入会消耗非常长的时间,我在工作站上运行的,光导入初始数据就花了两天。

whois server会每天自动同步,前提是你所指定的每一个grs source都已经完成了初始化导入并且配置了更新文件的路径。(更新文件路径在我给出的配置文件中已经帮你写好了,但是ARIN和LACNIC的初始数据导入有不少问题,暂时不建议使用。)

另外,APNIC的数据没有提供完整的dump文件,而是把一个dump文件拆分成了多个部分。

最终我的办法如下:

1、在配置文件中不配置APNIC的初始化数据文件。

2、在whois程序目录创建dump文件夹

3、下载https://ftp.apnic.net/apnic/whois/中的所有.gz压缩文件到dump目录

4、使用jmx强制导入

./whois.init jmx

>bean net.ripe.db.whois:name=Bootstrap 

>run loadDumpRisky initialimport dump/压缩文件.gz

导入过程中会产生大量错误,但是最终数据还是可以用的。每有一个压缩文件,就得手工导入一次。

使用whois查询

前面提到有Linux/Mac平台下有whois工具可以使用

本地镜像导入之后,就可以使用下面的命令行来做查询了。

whois -h 127.0.0.1 -p 8187  query

同时,whois server也提供了REST API,这个我还没有研究透,暂时不讨论。官方的文档里有比较详细的介绍。

如果你需要在程序中使用whois的API,可以参考官方的说明文档 RIPE-NCC Whois RIPE API

查询单个IP的基本格式是:

http://127.0.0.1:8188/whois/search?source={source}&query-string={query}

比如,查询1.1.220.2:

http://127.0.0.1:8188/whois/search?source=apnic-grs&query-string=1.1.220.2

返回结果可以是json或xml,可以用accept-content 来指定。

另外,RIPE官方也提供了比较完整的API,如果你懒得折腾,但是又很需要这些数据,可以直接使用RIPE-NCC官方的数据:http://rest.db.ripe.net/ 

一些心得

你可能会觉得,源码是别人的,文档也是别人的,我这篇文章到底有啥意义。咳咳,你自己折腾一遍你就知道了,真的是很多很多的坑……

官方的文档根本不是提供给我们看的,而是提供给各家RIR机构的。虽然官方说明了几种不同的数据导入方式,但是每一种都100%会失败。

你也可能觉得,反正网上有别人做好的whois服务器,直接用别人的就好了,干嘛自己费这么大劲儿去折腾。

其实,很简单,当全球的网段划分信息都摆在你面前的时候,你会懂我的。

如何分析?

这个我想等各位来帮我补充,诸如从whois数据中筛选出腾讯云和阿里云的全部IP地址段,这种我觉得都没啥意思了。算是抛砖引玉吧。

对于做威胁情报的平台,whois数据中会更新IP地址的变化,一旦IP地址被重新分配,那么此前的情报用处就不大了。目前IBM就是这么做的,在情报时间线中标明了某一个时刻,某一家RIR机构宣布IP地址的归属发生了变化,这个时刻以前的数据,就只能作为一个参考,而不作为评估依据。

每天大概会有4000个IP段发生变化,还是值得关注一下的。还有就是,AS存在一个挂载的问题,注册信息里显示国家为CN的AS,有不少,但绝大部分都挂载在AS4134下面,这个可以很直观的看出来。

其他类似的AS也有不少,这些AS就是全球的互联网的承载,或者叫骨干网。设想一下,如果这些网络的骨干节点被攻击,可能影响到的就是半个地球的人了(稍微夸大了一下,应该不会那么容易被攻击的)。

从这些数据里,可以简单的识别出一些IP地址的归属和具体用途,前面也提到了。对Desc字段中包含 Co., Ltd的IP地址段做筛选,可以罗列出不少IDC的地址段。某些ISP甚至会标注IP段是不是用来做宽带地址池的,或者做静态线路的。

期待大家来发掘这份数据吧。任何关于whois服务器的问题,可以在微博上戳我@戒小贤。后续我把数据源准备完毕,可能会考虑开放我们的数据库以及我们的一些分析结果。感谢@宫一鸣cn及时点拨,我才没有走错路。^_^

* 作者:戒贤,转载自FreeBuf

Sep072017

每个人都应该知道的 25 条保护隐私的措施

作者: editor 分类: 网络安全

1. 在任何时间使用代理服务器/ VPN 隧道保证流量安全

可以使用 Shadowsocks一类的 Socket 代理或者使用 VPN 隧道来加密你的数据,保证你不会被中间人攻击,也可以保证你的数据不被运营商拿去卖钱。

2. 尽量使用支持 SSL / TLS 的网站,并拉黑一些不信任的证书

拉黑掉 C*, S*, W*家的证书会更安全一些。

拓展阅读:如何吊销 C* 根证书

3. 保证自己跟随最新的软件更新

厂商在发布新版本时,大多会修复一些已知的漏洞和 Bug,提高用户体验和安全性。

4. 下载完成的重要文件第一步应先进行文件完整性校验

通过验证文件 MD5,SHA-1可以保证你得到的文件没有被第三方「添油加醋」,见 XCodeGhost事件,包括但不限于操作系统,软件等等。

5. 使用隐私保护软件保护安全

如 Android 端的 XPrivate,OSX 上的 Hands Off! 等等,可以通过检测异常流量来发现一些事情,当然你也可以用 Wireshark一类的流量分析工具。

6. 使用开源的路由器操作系统

为你的路由器使用 OpenWRT等开源的操作系统,因为开源软件可以有更多人进行审查(包括你自己)。

7. 不在互联网上泄露真实身份

很多网站的身份证校验其实只是计算了最后一位校验码而已,通过某个公式可以通过前 17 位计算出第 18 位的得数。

8. 经常通过各种社工库搜索自己的邮箱

我拿到各种裤子首先都是找一下自己的用户名和邮箱。

拓展阅读:可以用于安全研究的公开社工库有哪些?

9. 使用强密码

这个不用多说什么,每个人有不同的做法,真记不住的话可以用一些开源的密码管理软件。

拓展阅读:1Password 使用详解

10. 使用全盘文件加密

这样别人抢走你的手机/电脑也无法获得其中的内容。

Android 上的「加密手机」,OSX 上的「FileVault」,Win 上的「Bitlocker」,iOS 的「锁屏密码」已经可以满足大部分人的需求,当然前提是你使用了强密码。

11. 使用PGP(Pretty Good Privacy) 为你的邮件,文件加密。

如果你使用了 4096 位或者更长的密钥位数,那么在不知道私钥的情况下暴力破解你的私钥可能性几乎没有。当然也能妥善保管你的私钥,最好脱机存储在某个地方。

12. 使用多个手机

不同的手机做不同的事情,切断其中的关联性。

13. 使用多张 SIM 卡

不实名制卡更好,不同的卡做不同的事,如果你没有这个条件,可以试试阿里小号。

14. 为你的 SIM 卡开启 PIN 码

这样可以保证在你的手机丢失的时候别人无法通过手机号登陆你的账号。

拓展阅读:为你的 SIM 卡开通 PIN 码保护?

15. 为你的所有账号开启二步验证

这个简直就是折麽自己,不过确实可以提高很多的安全性。(结合第12,13条)

16. 使用一个便携式系统进行敏感操作

我自己用的是一个烧录在 U 盘中的 Tails Linux (内置了很多常用软件,默认使用 To r进行流量加密等等),也推荐各位使用。在进行敏感操作时,使用 U 盘中的系统,可以保证你的数据不会被记录。数据都在内存中,断电之后不会留下痕迹。(大多是情况)

17. 注册多个邮箱,断开其中的关联;有时也可使用一次性邮箱

当你被人肉时,使用多个邮箱注册的话,若无明显关联,会大大增加难度。

18. 在互联网上伪造多个身份

这点不细谈。

19. 使用Tor网络来保护隐私

结合第 1 条一起使用效果更佳。

20. 在网上发帖时,先在本地输入完成,再复制粘贴

一些网站会记录你的输入习惯(比如知乎),可以间接判断你的身份。

21. 使用比特币等匿名支付方式

替代品还有话费充值卡。

22. 少指点几句江山,少放几句黑屁

这个可以直线降低你被人肉的几率。

23. 在日常生活中,可以使用 Telegram 等即时通讯软件

当然 Telegram 的安全性也是仁者见仁,智者见智了。

24. 在留自己的联系方式时,可以先截个图,再发出去

这个可以增大被人肉搜索的难度,毕竟图片识别不是每家搜索引擎都做的。

如无法使用图片,可以尝试中英文混输,如 「5九87??壹零」等方式。

25. 注意验证软件签名,不可信或未知软件应在虚拟机运行

开源的 VirtualBox即可满足日常需求,以及少用破解软件也可降低被攻击几率。

Mar122017

sablog和phpspy作者4ngel安全天使(谭登元)因参加黑产骗取P2P平台资金被判刑

作者: 主机迷 分类: 网络安全

网名4ngel,真名谭登元,落伍ID也是4ngel,用过sablog和phpspy的都应该知道他,在黑客圈很是有名。

原公诉机关淮安市清河区人民检察院。

上诉人(原审被告人)谭登元,无业。因涉嫌犯诈骗罪,于2014年2月24日被刑事拘留,同年4月1日转逮捕,现羁押于淮安市看守所。

辩护人樊超勇,广西思齐律师事务所律师。

原审被告人郎小龙,无业。因涉嫌犯诈骗罪,于2014年1月29日被刑事拘留,同年3月7日转逮捕,现羁押于淮安市看守所。

淮安市清河区人民法院审理淮安市清河区人民检察院指控的原审被告人谭登元、郎小龙犯诈骗罪一案,于2015年3月1日作出(2014)河刑初字第0278号刑事判决。原审被告人谭登元不服,提出上诉。本院受理后,依法组成合议庭,于2015年6月25日公开开庭审理了本案。江苏省淮安市人民检察院指派代理检察员李玥出庭履行职务,上诉人谭登元及其辩护人樊超勇、原审被告人郎小龙到庭加诉讼。现已审理终结。

原审判决认定:2013年8月至10月间,被告人郎小龙、谭登元为了非法占有经营网络投资业务的淮安市融鑫金融信息咨询有限公司等单位的资金,由被告人郎小龙将本案被害单位的互联网网址信息传送给被告人谭登元,被告人谭登元非法侵入被害单位的互联网网站,取得被害单位网站的后台管理系统权限,并将该权限发送给被告人郎小龙。被告人郎小龙用获取到的网站权限篡改网站投资客户的姓名、身份证号、资金记录、银行卡号等原始数据后登陆网站系统申请提现,骗取被害单位向被告人郎小龙控制使用的徐友娣、陈路亚、杜海升等银行账户转账,再从上述作案卡转账至其控制使用的朴某银行账户,从而非法占有被害单位钱财。其中,被告人郎小龙以此手段骗取资金9起,骗取人民币共计1572356.15元;被告人谭登元明知郎小龙非法占有他人资金而为郎小龙非法侵入计算机系统获取网站权限,参与其中5起,骗取人民币共计1023343.4元,分得赃款20000元。具体分述如下:

1.2013年8月19日、8月21日,被告人郎小龙、谭登元通过侵入他人计算机系统,骗取郑州树诚科技有限公司(网络平台名“中原贷”)的资金131055.22元。

2.2013年8月19日、8月21日,被告人郎小龙、谭登元通过侵入他人计算机系统,骗取浙江华良投资管理有限公司(网络平台名“爱贷网”)166079.18元。

3.2013年8月21日至9月5日,被告人郎小龙、谭登元通过侵入他人计算机系统,骗取南京安铎尔金融信息服务有限公司(网络平台名“紫金贷”)432144元。

4.2013年8月22日,被告人郎小龙通过侵入他人计算机系统,骗取浙江涌润投资管理有限公司(网络平台名“涌金贷”)84038.92元。

5.2013年8月23日至8月31日,被告人郎小龙通过侵入他人计算机系统,骗取深圳旺金金融信息服务有限公司(网络平台名“融信财富”)90542.83元。

6.2013年8月31日至9月20日,被告人郎小龙通过侵入他人计算机系统,骗取东莞市巨印实业投资有限公司(网络平台名“和诚德”)208976元。

7.2013年9月3日至9月9日,被告人郎小龙、谭登元通过侵入他人计算机系统,骗取南京明宝堂金融信息服务有限公司(网络平台名“保险贷”)168034元。

8.2013年9月18日至9月20日,被告人郎小龙、谭登元通过侵入他人计算机系统,骗取淮安市融鑫金融信息咨询有限公司(网络平台名“乾坤贷”)172422元。

9.2013年9月18日至9月23日,被告人郎小龙通过侵入他人计算机系统,骗取杭州浙优民间资本理财服务有限公司(网络平台名“一诚贷”)165455元。

案发后,被告人郎小龙退缴全部赃款;被告人谭登元退缴其所得全部赃款。

上述事实,有被告人郎小龙、谭登元庭前供述,证人蔡某、熊某、张某甲、赵某、魏某、石某、朱某、丁某、林某、付某、张某乙、杨某、朴某等人证言,相应被害公司营业执照等书证及相关银行转账记录,朴某等人银行转账记录及电子回单,聊天记录,护照和出入境登记,扣押决定书及清单,缴款收据,远程勘验截图,情况说明,公安机关的发破案经过等证据证实。

原审法院认为,被告人郎小龙、谭登元以非法占有为目的,虚构事实,骗取他人财物,数额特别巨大,其行为均构成诈骗罪。被告人郎小龙、谭登元共同实施故意犯罪,是共同犯罪;被告人郎小龙在共同犯罪中起主要作用,是主犯;被告人谭登元在共同犯罪中起次要作用,属从犯,依法予以减轻处罚;被告人郎小龙、谭登元归案后,如实供述自己的罪行,依法予以从轻处罚;被告人郎小龙、谭登元退缴全部赃款,酌情予以从轻处罚。依照《中华人民共和国刑法》第二百六十六条 、第二十五条 第一款 、第二十六条 第一款 、第四款 、第二十七条 第一款 、第二款 、第六十四条 、第六十七条 第三款 之规定,以诈骗罪分别判处被告人郎小龙有期徒刑十一年,并处罚金人民币五十万元;判处被告人谭登元有期徒刑五年,并处罚金人民币十万元;将被告人郎小龙、谭登元退缴的全部犯罪所得,发还相应被害单位。

上诉人谭登元及其辩护人提出的上诉理由和辩护意见是:上诉人谭登元未与郎小龙共谋,不构成诈骗罪,应当以提供侵入、非法控制计算机信息系统程序、工具罪定罪处罚。

辩护人还提供了谭登元妻子的银行账户交易明细,证明郎小龙汇款的时间均发生在诈骗犯罪之前,进而提出谭登元所得款项为劳务报酬,不是诈骗赃款的辩护意见。

二审出庭检察人员的意见是:一审认定事实清楚,证据确实充分,定罪准确,量刑适当,建议驳回上诉,维持原判。

经二审查明的事实与一审一致,认定事实的证据均经一、二审庭审举证、质证,证据合法有效,具有证明效力,本院依法予以确认。

对于辩护人所提供的谭登元妻子账户交易及其所提2万余元系劳务报酬,不是犯罪赃款的辩护意见,本院经审查认为:

首先,该交易明细只能证明有五笔来自延边的汇款,但不能证明五笔汇款确系郎小龙汇出,且该五笔汇款与犯罪并无时间上的一一对应关系,并不能得出谭登元收到的汇款均在郎小龙作案之前的结论;其次,庭审中,上诉人谭登元也承认,2013年9月23日,郎小龙曾向谭登元建行卡汇款8000元。故郎小龙汇款给谭登元的时间也有发生在郎小龙作案之后;最后,本案认定上诉人谭登元构成共同犯罪是以上诉人谭登元是否明知郎小龙实施犯罪行为而提供帮助,至于郎小龙汇款给谭登元的时间先后及以什么方式从郎小龙处取得钱款,不影响其共同犯罪的认定。综上,该辩护意见无事实及法律依据,本院不予采纳。

对于上诉人谭登元及其辩护人所提上诉人谭登元未与郎小龙共谋,不构成诈骗罪,应当以提供侵入、非法控制计算机信息系统程序、工具罪定罪处罚的上诉理由和辩护意见,经查:首先,对于共谋的事实,谭登元、郎小龙在侦查阶段均有多次供述,二人供述稳定且相互印证;其次,二人共谋的事实不仅有双方的供述,亦得到其二人QQ聊天记录的印证。二人在2013年8月14日的QQ聊天记录中,郎小龙对谭登元说“现在找合适的站各插入一个账户,测试能否到账,如果可以就批量插入,不过现在的问题就是一个账户体现只能用一次,需要隔一段时间才能再用,有点浪费资源和时间”、“一个站到账5000,不过单笔极限就是5000,冒风险提的。现在有两个站可以提,今晚继续测试下一个站”。谭登元回复“恩。微信说”。由此可见,谭登元应当知道郎小龙在利用其发送的权限,实施套取网络信贷公司财物的犯罪行为,在此情况下,谭登元仍为其提供帮助,构成共同犯罪。至于谭登元是否全面了解郎小龙如何实施犯罪行为,是否准确了解郎小龙行为的性质等,均不影响共同犯罪的认定。综上,该上诉理由和辩护意见无事实和法律依据,不能成立。

本院认为,上诉人谭登元、原审被告人郎小龙以非法占有为目的,虚构事实,骗取他人财物,数额特别巨大,其行为均构成诈骗罪。且系共同犯罪;原审被告人郎小龙在共同犯罪中起主要作用,是主犯;上诉人谭登元在共同犯罪中起次要作用,属从犯,依法予以减轻处罚;上诉人谭登元、原审被告人郎小龙归案后,如实供述自己的罪行,依法予以从轻处罚;上诉人谭登元、原审被告人郎小龙退缴全部赃款,酌情予以从轻处罚。综上,原审判决认定事实清楚,证据确实、充分,定罪准确,量刑适当,审判程序合法,应予维持。二审出庭检察员意见正确,予以采纳。据此,依照《中华人民共和国刑事诉讼法》第二百二十五条 第一款 第(一)项 之规定,裁定如下:

驳回上诉,维持原判。

本裁定为终审裁定。

审判长王海龙

审判员王琤琤

代理审判员王广田

二〇一五年七月二日

书记员邱广胜


主机迷 is powered by Typecho