簡介
混雜模式(Promiscuous Mode)是指一台機器能夠接收所有經過它的數據流,而不論其目的地址是否是他。是相對於通常模式(又稱“非混雜模式”)而言的。這被 網路 管理員使用來診斷網路問題,但是也被無認證的想偷聽網路通信(其可能包括 密碼和其它敏感的信息)的人利用。一個非路由選擇節點在混雜模式下一般僅能夠在相同的衝突域(對乙太網和無線 區域網路)內監控通信到和來自其它節點或環(對令牌環或FDDI),其是為什麼網路 交換被用於對抗惡意的混雜模式。
混雜模式就是接收所有經過網卡的數據包,包括不是發給本機的包。默認情況下網卡只把發給本機的包(包括廣播包)傳遞給上層程式,其它的包一律丟棄。簡單的講,混雜模式就是指網卡能接受所有通過它的數據流,不管是什麼格式,什麼地址的。事實上,計算機收到數據包後,由網路層進行判斷,確定是遞交上層(傳輸層),還是丟棄,還是遞交下層(數據鏈路層、MAC子層)轉發。
簡單的說,網卡的混雜模式是為網路分析而提供的。
抓包工具
通常在需要用到抓包工具,例如ethereal、sniffer、capsa時,需要把網卡置於混雜模式,需要用到軟體Winpcap。winpcap是windows平台下一個免費,公共的網路訪問系統。開發winpcap這個項目的目的在於為win32應用程式提供訪問網路底層的能力。
對於廣播式集線器(Hub)來說,假如PC1、PC2、PC3接在同一個Hub上,當PC1給PC3傳送包時,Hub將廣播這個包,所以PC2實際上也可以看到這個包,但一般情況下它會將這個發給PC3的包丟棄,但如果處於混雜模式,PC2的網卡驅動程式就不會丟棄這個包,而是把這個包送給上層的驅動程式,應用程式。
模式說明
在網路中,嗅探器接收所有的分組,而不傳送任何非法分組。它不會妨礙網路數據的流動,因此很難對其進行檢測。不過,處於混雜模式(promiscuous mode)網卡的狀態很顯然和處於普通模式下不同。在混雜模式下,應該被硬體過濾掉的分組文會進入到系統的核心。是否回應這種分組完全依賴於核心。
1)在網路中,混雜模式(promiscuous mode)允許一個網路裝置竊聽而且閱讀抵達的每個網路包。這個運行模式有時在網路偵聽伺服器上運行,用來捕獲及保存所有的數據包,以便分析。(比如,對於監聽網路使用情況)
2)在一個以太區域網路(LAN)中,混雜模式是指被傳輸的每個數據小包都能被一個網路轉接器接到而且閱讀的操作模式。雜亂模態必須被每個網路轉接器支持,也必須被主機作業系統的輸入/輸出驅動器支持。雜亂模態時常用來監督網路使用率。
混雜模式(promiscuous mode)是和非混雜模式相對的。當一個數據小包在非混雜模式傳輸時候,所有的區域網路裝置“聽到”數據並且判斷被包含在數據小包之中的網路位址是否是他們的。如果它不是,數據小包進入下一個區域網路裝置,直到到達具有正確網路位址的裝置。然後那個裝置接收而且讀取數據。
eth0舉例
char *eth_name = "eth0"; //對網卡eth0進行混雜設定
struct ifreq ethreq; //網路接口結構
strncpy(ethreq.ifr_name, eth_name, IFNAMSIZ); //指定網卡名稱
if(-1 == ioctl(sock_raw_fd, SIOCGIFFLAGS, ðreq)) //獲取網路接口
{
perror("ioctl");
close(sock_raw_fd);
exit(-1);
}
/*此處用 | 是因為必須在保留原來設定的情況下,在標誌位中加入“混雜”方式*/
ethreq.ifr_flags |= IFF_PROMISC;
if(-1 == ioctl(sock_raw_fd, SIOCSIFFLAGS, ðreq)) //將標誌位設定寫入
{
perror("ioctl");
close(sock_raw_fd);
exit(-1);
}