隨著Internet技術的飛速發展,企業信息系統逐步轉向Intranet化,建立Web服務器作為企業信息的發布和交換平臺。但是,從企業信息安全角度出發,應該建立企業信息有限度的開放機制,保證用戶在規定的權限范圍內的獲取相應的信息。常規的安全檢查方法就是設立用戶身份驗證機制,即在Web服務器上進行口令和IP地址過濾??墒牵髽I內部網絡工作站的IPI地址是動態分配,沒有固定的地址,而且容易被假旦。口令檢查方式又增加用戶記憶上的負擔,容易被別人獲取。由于網絡工作站上的網卡地址是全世界唯一和固定不變的,可以作為安全檢查的身份標識。當用戶通過瀏覽器訪問企業的Web服務器的時候,采用的網絡通信HTTP協議是工作在TCP/IP協議上,是基于網絡層的協議,而AC地址是在鏈路層上的設備才會關心的東西,所以通常情況下兩臺機器互訪是通過廣播或ARP(Address Resolution Protocol)協議得到相互的MAC地址后進行通信,而基于TCP/IP協議編程是很難獲取對方的MAC地址的。因為路由器要準確地投遞網絡數據包,必須擁有網絡上最完整ARP地址識別表,該表存放于路由器上的SNMP MIB管理信息庫中,所以應從這些網絡設備入手獲取MAC地址。根據該思路,我們采用了根據用戶網絡MAC地址進行身份驗證的安全機制,已在我局的計算機城域網上實際運行了一年多的時間,證明是一種簡易有效的安全檢查手段。
一、技術思路
瀏覽器/服務器的模式是一種把標準輸入輸出定向到客戶端的瀏覽器上,而運算過程在服務器上的一種操作,所以當某個瀏覽器訪問相應的主頁時,它的一些基本信息就會提交給服務器,這些信息包括了瀏覽器的名稱,版本號等,同時也包括了我們所關心的客戶端的IP地址,該地址存放于環境變量REMOTE ADDR中。
當我們獲得了這引會址后,下一步工作就是去詢問該機器的MAC地址,這也是編程最重要的一步。要從路由器中取到ARP的信息,就要進行基于網絡的SNMP(簡單網絡管理協議)編程。SNMP協議目前最常用的有兩個版本,通常稱之為v1和v2。一般情況下v2向下兼容v1版,但有時也有例外。SNMP MIB管理信息庫的存儲方式是一種目錄樹的結構,而且它總是開始于:iso. Org. Dod翻譯成數字就是.1.3.6,這就是我們所說的MIB(Management Information Base,管理信息庫)的格式,而關于物理地址的MIB就是:iso. Org. Dod. Internet. Mgmt. Mib. At. AtTable. AtEnty. AtPhysAddress(1.3.6.1.2.1.3.1.1.2)。
所以基于上述思路,該程序整個處理流程就是這樣設計的,當有人訪問Web服務器的主頁,便激活MAC.EXE(用C語言編寫),而當該程序獲得了客戶機的IP地址后,自動激活一個叫sn. Class的java程序,sn. Class便通過相應的MIB值向路由器詢問此IP的MAC地址,并將結果傳遞給MAC.EXE,而AC.EXE將獲取的這個MAC地址到自身Web服務器上的已登記合法的MAC地址庫內查找,若已在MAC地址庫登記的,則通過身份驗證,把其相應的主頁信息呈現在客戶端的屏幕上;否則,驗證失敗,拒絕訪問。
二、SNMP協議的MIB管理信息庫
由于上述技術思路涉及SNMP協議及其MIB管理信息庫,這里做一下簡要說明。SNMP標準主要由三部人組成:簡單網絡管理協議(SNMP);管理信息結構(Structure ofanagement Information,簡稱SMI,RFC1155標準)和管理信息庫(MIB,RFC1156、RFC1158標準)。
管理信息結構(SMI)和管理信息庫(MIB)兩個協議是關于管理信息的標準,它們規定了被管理的網絡對象的定義格式,MIB庫中都包含哪些對象以及怎樣訪問這些對象等等。
SMI協議規定了定義和標識MIB變量的一組原則。它規定所有的MIB變量必須用ASN.1(即抽象語法表示法I,它是一種描述數據結構的通用方法,作為OSI研究的一部分,由ISSO推出)來定義。
每個MIB變量都有一個名稱用來標識。在SMI中,這個名稱以對象標識符(Object Identifier)來表示。對象標識符相互關聯,共同構成一個分層結構。在這個分層結構里,一個對象的標識符是由從根出發到對象所在節點的途中所經過的一個數字標號序列組成。如圖中,Internet的對象標識符就是1.3.6.1,對象標識符的命名有專門的機構負責。
在Internet節點下的mgmt節點,專門為管理信息庫分配了一個子樹,名為mib(1)。所有的MIB變量都在mib節點下,因此它們的名稱(對象標識符)都以iso.org.dod.internet.mgmt.mib開關,數字表示是1.3.6.1.2.1。
路由器中的路由表MIB中就有網絡中工作站IP地址與MAC地址的對應表。在CISCO路由器的路由表中,這種信息一般放在樹型結構的{1.3.6.1.2.1.3.1.1.2.0.0.1.47}位置中,比如:一個IP地址為10.142.168.1的機器,它的MAC地址就存放在MIB表中{1.3.6.1.2.1.3.1.1.2.0.0.1.47}+{10.142.168.1}的這個位置上,知道了這個表結構后,我們就可以通過編寫CGI程序來調用SNMP代理,讀取MIB管理信息表中的MAC地址。
三、獲取MAC地址的Java接口程序
我們可以通過好幾種方法來調用SNMP代理,如用C++來調用WINT下SNMP自帶的SNMP API FOR WIN32的動態鏈接庫,也可以利用SNMP PERL來編寫CGI程序完成這種功能,也可以用SNMP Java程序來編寫。SNMP Java程序類似于SNMP PERL程序,它是Java程序類擴展庫,它提供了Java語言與SNMP代理接口的類庫,使程序員通過調用這個類庫很容易地操縱SNMP代理,獲取網絡路由表中儲存的網絡設備的各種信息;包括IP地址與MAC地址映射表。下面我介紹一下SNMP Java獲取MAC信息的過程。首先在程序開頭加SNMP Jva的擴展類,import Snmp. *;
……
OIDStr[0]=new String
(“.1.3.6.1.2.1.3.1.1.2.0.0.1.47.”+args[1]);定義IP地址與CAC地址的映射的位置
……
api=new SnmpAPI(); //產生一個SNMP代理的接口api. Start();
snmpPDU pdu=new SnmpPDU(api);
pdu. Command=apiGET_REQ_MSG;
SnmpSEssion session=new SnmpSession(api);
Session. version=SnmpAPI. SNMP VERSION_1;
Session. Peername=Host[I];//把路由器地址賦給線程SnmpOID odi=new SnmpOID(OIDStr[I], api); //產生一個對象標識符
If(oid. ToValue()!=null)pdu. AddNull(oid);
Try{Session. Open();
Pdu=session. SyncSend(pdu);//發出請求單元信息}catch (SnmpException e){}
If (pdu= =null){//timeout
System. Out. Println(“Request timed out to:”+Host);
System. Exit(1):}
SnmpVarBind Varbind=(SnmpVarBind)
Pdu. Variables. FirstElement();//找到第一滿足條件的信息
PduStr=varbind. ToString();//存放找到的所需的信息
四、通過編寫CGI程序實現SNMP代理功能
我們用Java編寫一個sn.java程序,該程序的功能是根據給定的路由器地址(10.142.168.29)和主機IIP地址來獲得相應IP地址主機的MAC地址,如:java sn 10.142.168.29 10.142.169.1就會獲得10.142.169.1的MAC地址,再通過編寫一個C語言的CGI程序把Java程序執行的結果讀取過來,和原有的合法MAC地址庫中的數據進行比較來驗證用戶是否僉。首先我們可通過讀取環境變量“REMOTEADDR”,該變量存放著請求用戶工作站的IP地址,作為執行Java程序的一個參數,再通過C語言的sprint函數來執行Java程序sn: Sprint(getmac, “java % s % s”, 10.142.168.29. remote ipaddress);當C語言程序執行這個函數時,Java程序就被執行。并且getmac所指向的文件頭就是執行結果的文件頭,我們再來讀取該文件,就可獲取remote ipaddress所對應的MAC地址,然后可用這個MAC地址與原有的合法MAC地址庫中數據相比較,從而驗證用戶是否為合法用戶。
五、結束語
硬件環境要求:
l 只能在局域網中(在某些特定的情況也可將其擴充到更遠一些的專線網絡
l 網絡連接協議必須采用TCP/IP
l 網絡中至少有一臺路由器或智能HUB
l 至少有一臺Web服務器
對系統軟件需求:
l Java程序解釋器(JDK1.14以上版本)
l GNU C
以上兩個軟件均為免費軟件,可以在Internet上下載。前者可在http://www.sum.com站點取到,而GCC在http://www.gnu org/software/gcc/gcc.html下可以下載。
柳德才
13691193654
18942949207
QQ:422157370
liudecai_zan@126.com湖北-武漢-江夏-廟山