阮曉龍+路景鑫
摘要:IP地址的位置服務(wù)是當(dāng)今互聯(lián)網(wǎng)發(fā)展中常見(jiàn)的基石服務(wù)之一,該文介紹了該服務(wù)意義和應(yīng)用價(jià)值,并詳細(xì)介紹了基于IP地址的位置服務(wù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,介紹了系統(tǒng)的應(yīng)用方法。
關(guān)鍵詞:IP地址;接口服務(wù);系統(tǒng)架構(gòu)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)01-0071-05
Abstract: The IP address of the location service is one of the most common services in the development of the Internet, this paper introduces the background and significance of the service, introduces the design and implementation process of the location service system based on IP address, make readers more clearly understand the realization process of the system.
Key words: IP address; interface service; system architecture
近年來(lái),隨著互聯(lián)網(wǎng)的快速發(fā)展,越來(lái)越多的網(wǎng)絡(luò)服務(wù)需要根據(jù)用戶(hù)IP地址所在的地理位置才能更好地提供服務(wù),基于IP地址的位置服務(wù)在如今的互聯(lián)網(wǎng)服務(wù)中扮演著重要的角色。
大規(guī)模真實(shí)的IP地址所對(duì)應(yīng)的地理位置信息很難獲取,本文研究了現(xiàn)有的IP位置服務(wù)的技術(shù)和方法,對(duì)比了多個(gè)基于IP地址位置服務(wù)的互聯(lián)網(wǎng)產(chǎn)品,根據(jù)其特點(diǎn)和實(shí)現(xiàn)方法,設(shè)計(jì)并實(shí)現(xiàn)了開(kāi)放免費(fèi)的基于IP地址的位置服務(wù)系統(tǒng)——OpenIPDB。
1 背景與意義
互聯(lián)網(wǎng)是通信技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合的產(chǎn)物,隨著互聯(lián)網(wǎng)用戶(hù)的迅速增長(zhǎng),區(qū)分用戶(hù)的來(lái)源,確定用戶(hù)的地理位置成為一個(gè)非常重要和廣泛的課題。
1.1 IP地址定位的重要性
1)在商業(yè)化中的應(yīng)用
在商業(yè)化的網(wǎng)站中,可以根據(jù)用戶(hù)IP地址所在的地理位置在Web頁(yè)面中添加針對(duì)性更強(qiáng)的廣告或者與地域相關(guān)的新聞等;在網(wǎng)絡(luò)購(gòu)物中,將根據(jù)用戶(hù)的地理位置信息,提供個(gè)性化服務(wù),如本地優(yōu)惠、自動(dòng)顯示快遞費(fèi)用等等。在商業(yè)化運(yùn)營(yíng)中,獲取用戶(hù)的地理位置,將大大改善用戶(hù)體驗(yàn),同時(shí)也創(chuàng)造出更多的商機(jī)。
2)在日常生活中的應(yīng)用
基于IP地址位置服務(wù),人們可輕松獲取生活中的信息,如當(dāng)需要查看本地的天氣時(shí),不需要選擇所在地的地理位置,天氣網(wǎng)站中將直接獲得請(qǐng)求者IP地址的位置信息,并推送相關(guān)的天氣情況。
3)在網(wǎng)絡(luò)安全中的應(yīng)用
在大規(guī)模網(wǎng)絡(luò)管理和維護(hù)工作中,管理員可以通過(guò)技術(shù)手段定位到故障設(shè)備的IP地址,從而高效的排除網(wǎng)絡(luò)故障。在打擊網(wǎng)絡(luò)防欺詐和網(wǎng)絡(luò)犯罪的過(guò)程中,可以通過(guò)犯罪分子的IP地址定位到具體地理方位,從而實(shí)現(xiàn)有效的打擊。
1.2現(xiàn)有IP地址定位產(chǎn)品
隨著IP位置服務(wù)的發(fā)展,互聯(lián)網(wǎng)上出現(xiàn)了一批優(yōu)秀的IP定位產(chǎn)品,本文研究了常見(jiàn)的六個(gè)服務(wù),分別是國(guó)外的IP地址庫(kù)GeoLite2和IP2Location lite,國(guó)內(nèi)的IP地址庫(kù)淘寶IP地址庫(kù)、新浪IP地址庫(kù)、百度IP地址庫(kù)以及純真IP地址庫(kù)。
1.2.1IP地址庫(kù)概況
GeoLite2和IP2Location lite的數(shù)據(jù)分別來(lái)自于各自對(duì)應(yīng)的商用版本;純真IP數(shù)據(jù)庫(kù)的數(shù)據(jù)通過(guò)QQ軟件從網(wǎng)民中收集而來(lái);淘寶、百度和新浪的IP地址庫(kù)都未提及其數(shù)據(jù)的構(gòu)建方法。
目前各個(gè)IP地址庫(kù)的數(shù)據(jù)量如表1所示。
1.2.2IP地址庫(kù)對(duì)比
1)數(shù)據(jù)庫(kù)字段對(duì)比
上述六個(gè)IP地址數(shù)據(jù)庫(kù),雖然IP地址的數(shù)據(jù)量都很大,但是每個(gè)IP地址數(shù)據(jù)庫(kù)都有各自的側(cè)重點(diǎn),各IP地址數(shù)據(jù)庫(kù)中的字段有很大的差異性。六個(gè)IP數(shù)據(jù)庫(kù)各自對(duì)應(yīng)的IP地址信息字段如表2所示。
2)服務(wù)對(duì)比
上述六個(gè)IP地址庫(kù)數(shù)據(jù)提供的服務(wù)方式如表3所示。
1.3系統(tǒng)建設(shè)目標(biāo)
通過(guò)對(duì)IP數(shù)據(jù)庫(kù)的了解和對(duì)比,參考其他數(shù)據(jù)庫(kù)的優(yōu)勢(shì)和不足,通過(guò)多種方法融合成一個(gè)數(shù)量、性能和準(zhǔn)確度更高的IP位置數(shù)據(jù)庫(kù)是本系統(tǒng)的建設(shè)目標(biāo)。同時(shí)系統(tǒng)遵從實(shí)現(xiàn)一個(gè)開(kāi)放共享IP數(shù)據(jù)庫(kù)服務(wù)系統(tǒng)為廣大用戶(hù)提供服務(wù)的信念,將一直保持免費(fèi)、共享以及公共服務(wù)的原則。
2 系統(tǒng)設(shè)計(jì)
2.1系統(tǒng)架構(gòu)
2.1.1物理架構(gòu)
為保證內(nèi)部數(shù)據(jù)的安全性,本系統(tǒng)在部署時(shí)采用防火墻映射、主備數(shù)據(jù)庫(kù)服務(wù)、雙機(jī)Web服務(wù)等部署方式,最大程度的保證內(nèi)部數(shù)據(jù)的安全性以及系統(tǒng)的穩(wěn)定性、健壯性,系統(tǒng)物理構(gòu)架如圖1所示。
2.1.2邏輯架構(gòu)
基于IP地址的位置服務(wù)系統(tǒng)邏輯架構(gòu)主要分為四層:第一層為數(shù)據(jù)集成層,主要采用請(qǐng)求開(kāi)放、免費(fèi)的數(shù)據(jù)接口和下載免費(fèi)的IP數(shù)據(jù)庫(kù)獲得相關(guān)數(shù)據(jù);第二層為數(shù)據(jù)處理層,將獲取的IP數(shù)據(jù)信息進(jìn)行清洗、整理以及錄入數(shù)據(jù)庫(kù);第三層為業(yè)務(wù)層,實(shí)現(xiàn)系統(tǒng)的數(shù)據(jù)管理;第四層為表示層,以門(mén)戶(hù)和接口的方式提供服務(wù)。系統(tǒng)邏輯結(jié)構(gòu)如圖2所示。
2.1.3服務(wù)體系架構(gòu)
系統(tǒng)服務(wù)體系主要分為兩部分:數(shù)據(jù)庫(kù)服務(wù)和業(yè)務(wù)服務(wù)。
數(shù)據(jù)庫(kù)服務(wù)是支撐業(yè)務(wù)系統(tǒng)功能的正常運(yùn)行,提供對(duì)數(shù)據(jù)的增刪改查等功能以及提供IP數(shù)據(jù)庫(kù)下載;業(yè)務(wù)服務(wù)主要是系統(tǒng)業(yè)務(wù)模塊,幫助使用者更好地了解和使用本系統(tǒng),服務(wù)體系結(jié)構(gòu)如圖3所示。
2.2數(shù)據(jù)流程
2.2.1數(shù)據(jù)獲取
數(shù)據(jù)獲取是獲取IP位置信息的原始數(shù)據(jù),主要包括數(shù)據(jù)庫(kù)下載以及網(wǎng)絡(luò)接口獲取兩種形式。
數(shù)據(jù)庫(kù)下載是針對(duì)互聯(lián)網(wǎng)上已有的開(kāi)放免費(fèi)的IP地址庫(kù)進(jìn)行下載。本系統(tǒng)下載獲取的IP數(shù)據(jù)庫(kù)有GeoIP和IPIP.NET數(shù)據(jù)庫(kù)。
網(wǎng)絡(luò)接口獲取是針對(duì)僅提供在線查詢(xún)服務(wù)的數(shù)據(jù)來(lái)源。本系統(tǒng)通過(guò)網(wǎng)絡(luò)接口獲得數(shù)據(jù)的來(lái)源有四個(gè):淘寶IP地址庫(kù)數(shù)據(jù)接口(http://ip.taobao.com/service/getIpInfo.php?ip=),新浪IP地址庫(kù)數(shù)據(jù)接口(http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=),IPIP.NET地址庫(kù)數(shù)據(jù)接口(http://freeapi.ipip.net/),百度IP定位數(shù)據(jù)接口(http://apis.baidu.com/apistore/iplookupservice/iplookup?ip=),上述服務(wù)的數(shù)據(jù)均是JSON格式,通過(guò)請(qǐng)求接口即可獲取IP地址位置信息。
2.2.2數(shù)據(jù)處理
1)規(guī)范與標(biāo)準(zhǔn)建立
IP地址信息采用關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ),表結(jié)構(gòu)如表4所示。
2)數(shù)據(jù)清洗
通過(guò)3.2.1中兩種數(shù)據(jù)獲取方式獲得的IP地址數(shù)據(jù),可能出現(xiàn)字段信息缺失、信息重復(fù)、字段不一致等現(xiàn)象,因此需要進(jìn)行數(shù)據(jù)清洗。數(shù)據(jù)清洗的步驟如下。
①根據(jù)IP數(shù)據(jù)表結(jié)構(gòu),獲取IP地址數(shù)據(jù)中有用字段進(jìn)行保存;
②將多個(gè)數(shù)據(jù)源獲取到的IP地址數(shù)據(jù)進(jìn)行逐條數(shù)據(jù)比對(duì),比對(duì)規(guī)則如下:
a、如果該數(shù)據(jù)只存在于一個(gè)數(shù)據(jù)源中,則直接將該數(shù)據(jù)進(jìn)行保存;
b、如果該數(shù)據(jù)中字段與其他數(shù)據(jù)源中數(shù)據(jù)字段發(fā)生沖突,則選擇字段相同率高的數(shù)據(jù)進(jìn)行保存。
③從保存后的IP地址數(shù)據(jù)中獲取存疑、缺失數(shù)據(jù),通過(guò)網(wǎng)絡(luò)探測(cè)、爬蟲(chóng)等方式獲取IP地址信息,進(jìn)行數(shù)據(jù)修改或補(bǔ)充。
3)IP地址聚合計(jì)算
如果將IP地址數(shù)據(jù)逐條存入數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)將有42億多條記錄,這樣導(dǎo)致數(shù)據(jù)庫(kù)容量大且插入或查詢(xún)等操作比較慢,嚴(yán)重影響業(yè)務(wù)的性能,所以應(yīng)將相同位置信息的IP地址聚合成一個(gè)或多個(gè)不能再次聚合的IP地址塊,減少I(mǎi)P地址總條目數(shù),進(jìn)而提高系統(tǒng)的性能和響應(yīng)速度。
4)數(shù)據(jù)入庫(kù)
將經(jīng)過(guò)清洗、聚合處理后的IP地址數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)中,形成IP地址數(shù)據(jù)庫(kù)。
2.3關(guān)鍵功能與流程
2.3.1接口調(diào)用
接口調(diào)用是用于調(diào)用第三方數(shù)據(jù)接口進(jìn)行IP地址對(duì)比查詢(xún),其實(shí)現(xiàn)過(guò)程具體如下:
①用戶(hù)輸入查詢(xún)IP地址后,系統(tǒng)向多個(gè)服務(wù)接口發(fā)送HTTP請(qǐng)求,并獲取數(shù)據(jù)接口返回的IP地址信息;
②解析返回的IP地址信息,并根據(jù)IP數(shù)據(jù)表結(jié)構(gòu),獲取有用字段進(jìn)行保存;
③將保存的字段信息在Web頁(yè)面上進(jìn)行呈現(xiàn)。
2.3.2地理位置定位
當(dāng)用戶(hù)查找某一IP地址信息時(shí),除了在Web頁(yè)面上將IP地址信息詳細(xì)呈現(xiàn)外,系統(tǒng)也將查詢(xún)結(jié)果與百度地圖接口對(duì)接,從而能夠準(zhǔn)確地定位到所查IP地址的具體地理位置,幫助用戶(hù)更好地了解IP地址的位置信息,如圖4所示。
2.4數(shù)據(jù)庫(kù)設(shè)計(jì)
2.4.1模型設(shè)計(jì)
數(shù)據(jù)庫(kù)模型使用MySQL Workbench工具進(jìn)行設(shè)計(jì),其數(shù)據(jù)模型如圖5所示。
2.4.2數(shù)據(jù)表設(shè)計(jì)
根據(jù)數(shù)據(jù)模型設(shè)計(jì),建立數(shù)據(jù)表。數(shù)據(jù)表如表5所示。
3 性能與安全
3.1系統(tǒng)安全
3.1.1網(wǎng)絡(luò)安全
內(nèi)網(wǎng)和外網(wǎng)通過(guò)防火墻進(jìn)行安全管理,外網(wǎng)不能主動(dòng)向內(nèi)網(wǎng)數(shù)據(jù)庫(kù)進(jìn)行操作。內(nèi)網(wǎng)的安全級(jí)別最高,比如數(shù)據(jù)庫(kù)服務(wù)器,只允許內(nèi)網(wǎng)中的Web服務(wù)器進(jìn)行數(shù)據(jù)操作;而Web服務(wù)器對(duì)外也開(kāi)放{TCP80}端口。通過(guò)對(duì)防火墻的配置,避免外部網(wǎng)絡(luò)對(duì)服務(wù)器的網(wǎng)絡(luò)攻擊,從而保障了內(nèi)部系統(tǒng)的穩(wěn)定性和安全性。
3.1.2信息安全
內(nèi)網(wǎng)不向外網(wǎng)提供業(yè)務(wù)或服務(wù)器等重點(diǎn)配置信息,保障系統(tǒng)配置信息的安全;注冊(cè)用戶(hù)或者管理員密碼都采用郵箱驗(yàn)證,并進(jìn)行md5加密保護(hù),防止惡意用戶(hù)隨意篡改他人密碼進(jìn)行不正當(dāng)業(yè)務(wù)操作。
3.1.3數(shù)據(jù)安全
為保障系統(tǒng)數(shù)據(jù)安全,需定期將數(shù)據(jù)庫(kù)中全量數(shù)據(jù)進(jìn)行備份,可通過(guò)Linux自帶的任務(wù)計(jì)劃,建立自動(dòng)備份機(jī)制,具體操作如下:
1)每天0點(diǎn)進(jìn)行一次全量數(shù)據(jù)備份;
2)將備份數(shù)據(jù)發(fā)布到遠(yuǎn)程備份服務(wù)器上,實(shí)現(xiàn)遠(yuǎn)程備份存儲(chǔ)。
3.2性能優(yōu)化
3.2.1異步數(shù)據(jù)
針對(duì)更新頻率低的數(shù)據(jù),采用異步數(shù)據(jù)。例如IP地址統(tǒng)計(jì)數(shù)據(jù),具體做法如下:
1)每天0點(diǎn)定時(shí)查詢(xún)數(shù)據(jù)庫(kù)中IP地址數(shù)據(jù),根據(jù)所需要信息進(jìn)行統(tǒng)計(jì)查詢(xún);
2)將查詢(xún)結(jié)果生成JSON文件,進(jìn)行保存。
當(dāng)用戶(hù)訪問(wèn)IP統(tǒng)計(jì)頁(yè)面時(shí),不需要請(qǐng)求數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)操作,只需讀取保存的JSON文件即可獲取IP地址的統(tǒng)計(jì)數(shù)據(jù)。使用異步數(shù)據(jù)將極大減少數(shù)據(jù)庫(kù)的查詢(xún)次數(shù),減輕數(shù)據(jù)庫(kù)壓力,進(jìn)而提高頁(yè)面的響應(yīng)速度。
3.2.2數(shù)據(jù)庫(kù)優(yōu)化
數(shù)據(jù)庫(kù)采用一主二從部署模式并建立同步機(jī)制,主數(shù)據(jù)庫(kù)服務(wù)器主要進(jìn)行數(shù)據(jù)的寫(xiě)入、更新操作,進(jìn)行查詢(xún)操作時(shí),主要是以輪詢(xún)的方式在從數(shù)據(jù)庫(kù)服務(wù)器上進(jìn)行操作。數(shù)據(jù)庫(kù)采用該部署模式,可通過(guò)負(fù)載均衡的方式分?jǐn)倲?shù)據(jù)庫(kù)壓力,從而提高系統(tǒng)的性能。
4 系統(tǒng)實(shí)現(xiàn)
4.1在線服務(wù)平臺(tái)
4.1.1IP數(shù)據(jù)查詢(xún)
本系統(tǒng)支持本地查詢(xún)和接口調(diào)用查詢(xún)兩種查詢(xún)方式,本地查詢(xún)是指查詢(xún)本地的IP地址數(shù)據(jù)庫(kù);接口調(diào)用查詢(xún)是指調(diào)用第三方數(shù)據(jù)接口比對(duì)查詢(xún),如圖6所示。
4.1.2IP數(shù)據(jù)質(zhì)疑
通過(guò)IP地址的比對(duì)查詢(xún),可看出本地?cái)?shù)據(jù)和第三方接口數(shù)據(jù)的差異,用戶(hù)可根據(jù)實(shí)際情況判斷查詢(xún)地址信息是否錯(cuò)誤。如果系統(tǒng)中IP地址信息錯(cuò)誤,可通過(guò)質(zhì)疑的方式向管理員提供相關(guān)依據(jù),管理員可根據(jù)質(zhì)疑信息進(jìn)行IP地址信息修改,如圖7所示。
4.2系統(tǒng)管理平臺(tái)
4.2.1系統(tǒng)總覽
系統(tǒng)總覽中主要展示系統(tǒng)登錄信息以及系統(tǒng)的相關(guān)運(yùn)行信息,系統(tǒng)登錄信息可使管理員了解自己的賬號(hào)是否被異常登錄;系統(tǒng)運(yùn)行信息可使管理員了解當(dāng)前系統(tǒng)的業(yè)務(wù)信息。
4.2.2 IP數(shù)據(jù)庫(kù)管理
將數(shù)據(jù)庫(kù)中IP地址信息進(jìn)行輸出,并可根據(jù)地理位置進(jìn)行篩選、查看、修改、刪除等操作,如圖8所示。
4.2.3日志審計(jì)
系統(tǒng)中日志信息包括登錄信息、操作信息以及接口操作信息,管理員可根據(jù)所需查找不同類(lèi)型、不同時(shí)間范圍的日志信息,幫助管理員快速查找到相關(guān)操作記錄。
4.3數(shù)據(jù)接口服務(wù)平臺(tái)
JSON是常用的數(shù)據(jù)交換格式之一,所以本系統(tǒng)將IP地址信息生成JSON文件,通過(guò)Web服務(wù)器發(fā)布,使用者可以通過(guò)發(fā)布的接口地址獲取數(shù)據(jù)。
4.3.1單IP地址請(qǐng)求
單IP地址請(qǐng)求時(shí)數(shù)據(jù)格式如下所示,使用者添加單IP查詢(xún)參數(shù),即可獲取單IP地址的位置信息。
{
"Code": "0",
"Msg": "success",
"Data": [
{
"ip": "211.69.35.10",
"continent": "亞洲",
"country": "中國(guó)",
"province": "河南省",
"city": "鄭州市",
"county": "",
"areaid": "410105",
"isp": "中國(guó)教育和科研計(jì)算機(jī)網(wǎng)",
"addr": "河南中醫(yī)藥大學(xué)",
"longitude": "113.816472",
"latitude": "34.785868",
"desc": "",
}
]
}
4.3.2多IP地址請(qǐng)求
多IP地址請(qǐng)求時(shí)數(shù)據(jù)格式如下所示,使用者添加多IP查詢(xún)參數(shù),即可獲取多個(gè)IP地址的位置信息。
{
"Code": "0",
"Msg": "success",
"Data": {
"address1":[
{
"ip": "211.69.35.10",
"continent": "亞洲",
"country": "中國(guó)",
...
}
]
"address2":[
{…}
]
}
}
4.3.3網(wǎng)絡(luò)段地址請(qǐng)求
網(wǎng)絡(luò)段IP地址請(qǐng)求時(shí)數(shù)據(jù)格式如下所示,使用者添加網(wǎng)絡(luò)段IP查詢(xún)參數(shù),即可獲取網(wǎng)絡(luò)段中所有IP地址的位置信息。
{
"Code": "0",
"Msg": "success",
"Data": {
"address1":[
{
"startip": "211.69.35.0",
"endip": "211.69.35.0",
"continent": "亞洲",
"country": "中國(guó)",
...
}
]
...
}
}
4.4數(shù)據(jù)庫(kù)下載服務(wù)
本系統(tǒng)所維護(hù)的IP數(shù)據(jù)庫(kù)可提供下載,當(dāng)IP數(shù)據(jù)庫(kù)更新后,將數(shù)據(jù)庫(kù)中IP地址信息進(jìn)行導(dǎo)出,生成數(shù)據(jù)庫(kù)文件,并通過(guò)Web服務(wù)器進(jìn)行發(fā)布,用戶(hù)可根據(jù)需要下載數(shù)據(jù)庫(kù)文件。
5 結(jié)束語(yǔ)
目前本系統(tǒng)中IP數(shù)據(jù)量約35億條,覆蓋世界范圍內(nèi)的572個(gè)城市地區(qū),其中包括中國(guó)的34個(gè)省市自治區(qū),已經(jīng)在互聯(lián)網(wǎng)上正式發(fā)布使用,訪問(wèn)地址是:http://openipdb.online。
目前系統(tǒng)中還存在數(shù)據(jù)不完整、數(shù)據(jù)信息不準(zhǔn)確等問(wèn)題,因此希望能夠得到廣大用戶(hù)的幫助和支持,共同維護(hù)系統(tǒng)的IP數(shù)據(jù)庫(kù),從而為更多的使用者提供服務(wù)。
參考文獻(xiàn):
[1] 陳鵬.網(wǎng)絡(luò)實(shí)體地理定位IPMapping系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 長(zhǎng)沙: 國(guó)防科技大學(xué), 2008.
[2] 李威.基于IP地址的網(wǎng)絡(luò)實(shí)體地理位置定位技術(shù)研究與實(shí)現(xiàn)[D]. 北京: 北京交通大學(xué), 2012.
[3] 聶榮, 余建國(guó), 張洪欣, 等. IP地址地理位置映射技術(shù)[J]. 計(jì)算機(jī)工程, 2008, 34(15):102-104.