混雜模式

sgy618發表於2011-02-10

混雜模式

[@more@]

乙太網(Ethernet)具有共享介質的特徵,資訊是以明文的形式在網路上傳輸,當網路介面卡設定為監聽模式(混雜模式,Promiscuous)時,由於採用乙太網廣播通道爭用的方式,使得監聽系統與正常通訊的網路能夠並聯連線,並可以捕獲任何一個在同一衝突域上傳輸的資料包。IEEE802.3 標準的乙太網採用的是持續 CSMA 的方式,正是由於乙太網採用這種廣播通道爭用的方式,使得各個站點可以獲得其他站點傳送的資料。運用這一原理使資訊捕獲系統能夠攔截的我們所要的資訊,這是捕獲資料包的物理基礎。
乙太網是一種匯流排型的網路,從邏輯上來看是由一條匯流排和多個連線在匯流排上的站點所組成各個站點採用上面提到的 CSMA/CD 協議進行通道的爭用和共享。每個站點(這裡特指計算機透過的介面卡)網路卡來實現這種功能。網路卡主要的工作是完成對於匯流排當前狀態的探測,確定是否進行資料的傳送,判斷每個物理資料幀目的地是否為本站地址,如果不匹配,則說明不是傳送到本站的而將它丟棄。如果是的話,接收該資料幀,進行物理資料幀的 CRC 校驗,然後將資料幀提交給LLC 子層。
網路卡具有如下的幾種工作模式:
1) 廣播模式(Broad Cast Model):它的實體地址(MAC)地址是 0Xffffff 的幀為廣播幀,工作在廣播模式的網路卡接收廣播幀。
2)多播傳送(MultiCast Model):多播傳送地址作為目的實體地址的幀可以被組內的其它主機同時接收,而組外主機卻接收不到。但是,如果將網路卡設定為多播傳送模式,它可以接收所有的多播傳送幀,而不論它是不是組內成員。
3)直接模式(Direct Model):工作在直接模式下的網路卡只接收目地址是自己 Mac地址的幀。
4)混雜模式(Promiscuous Model):工作在混雜模式下的網路卡接收所有的流過網路卡的幀,信包捕獲程式就是在這種模式下執行的。
網路卡的預設工作模式包含廣播模式和直接模式,即它只接收廣播幀和發給自己的幀。如果採用混雜模式,一個站點的網路卡將接受同一網路內所有站點所傳送的資料包這樣就可以到達對於網路資訊監視捕獲的目的。

Sniffer類的軟體一般都採用將網路卡設定成混雜模式來獲取資料包,設為混雜模式之後,因為網路卡會接收所有能夠接收到的資料,所以這個時候的資料量非常大,所以在設定為混雜模式同時,一般要設定過濾條件。sniffer之類的軟體將網路卡設定為混雜模式,只是供自己監聽資料(根據使用者的要求自動設定過濾條件),在這類軟體退出之後會自動將網路卡還原為正常工作模式。

具體到程式設計實現上,這種對網路卡混雜模式的設定是透過原始套接字(raw socket)來實現的,這也有別於通常經常使用的資料流套接字和資料包套接字。在建立了原始套接字後,需要透過setsockopt()函式來設定IP頭操作選項,然後再透過bind()函式將原始套接字繫結到本地網路卡。為了讓原始套接字能接受所有的資料,還需要透過ioctlsocket()來進行設定,而且還可以指定是否親自處理IP頭。至此,實際就可以開始對網路資料包進行嗅探了,對資料包的獲取仍象流式套接字或資料包套接字那樣透過recv()函式來完成。但是與其他兩種套接字不同的是,原始套接字此時捕獲到的資料包並不僅僅是單純的資料資訊,而是包含有 IP頭、 TCP頭等資訊頭的最原始的資料資訊,這些資訊保留了它在網路傳輸時的原貌。透過對這些在低層傳輸的原始資訊的分析可以得到有關網路的一些資訊。由於這些資料經過了網路層和傳輸層的打包,因此需要根據其附加的幀頭對資料包進行分析。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23168012/viewspace-1045777/,如需轉載,請註明出處,否則將追究法律責任。

相關文章