IP whois介紹和部署實踐

sdf123456 8年前發布 | 25K 次閱讀 數據庫

背景

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轉換成WHOISMIRROR(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數據源,就要建立一個相應的數據庫,命名方式是WHOISMIRROR(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</pre>

數據導入和更新

首先,啟動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"</pre>

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及時點撥,我才沒有走錯路。^_^

來自:http://www.tuicool.com//articles/MzAvQnb

 

 本文由用戶 sdf123456 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!