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轉換成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