複製鏈接
請複製以下鏈接發送給好友

混雜模式

鎖定
混雜模式(英語:promiscuous mode)是電腦網絡中的術語。是指一台機器的網卡能夠接收所有經過它的數據流,而不論其目的地址是否是它。
一般計算機網卡都工作在非混雜模式下,此時網卡只接受來自網絡端口的目的地址指向自己的數據。當網卡工作在混雜模式下時,網卡將來自接口的所有數據都捕獲並交給相應的驅動程序。網卡的混雜模式一般在網絡管理員分析網絡數據作為網絡故障診斷手段時用到,同時這個模式也被網絡黑客利用來作為網絡數據竊聽的入口。在Linux操作系統中設置網卡混雜模式時需要管理員權限。在Windows操作系統和Linux操作系統中都有使用混雜模式的抓包工具,比如著名的開源軟件Wireshark
中文名
混雜模式
外文名
Promiscuous Mode
相對於
通常模式
用    於
網絡管理員使用來診斷網絡問題
學    科
計算機

混雜模式簡介

混雜模式(Promiscuous Mode)是指一台機器能夠接收所有經過它的數據流,而不論其目的地址是否是他。是相對於通常模式(又稱“非混雜模式”)而言的。這被網絡管理員使用來診斷網絡問題,但是也被無認證的想偷聽網絡通信(其可能包括密碼和其它敏感的信息)的人利用。一個非路由選擇節點在混雜模式下一般僅能夠在相同的衝突域(對以太網和無線局域網)內監控通信到和來自其它節點或環(對令牌環或FDDI),其是為什麼網絡交換被用於對抗惡意的混雜模式。
混雜模式就是接收所有經過網卡的數據包,包括不是發給本機的包。默認情況下網卡只把發給本機的包(包括廣播包)傳遞給上層程序,其它的包一律丟棄。簡單的講,混雜模式就是指網卡能接受所有通過它的數據流,不管是什麼格式,什麼地址的。事實上,計算機收到數據包後,由網絡層進行判斷,確定是遞交上層(傳輸層),還是丟棄,還是遞交下層(數據鏈路層、MAC子層)轉發。 [1] 
簡單的説,網卡的混雜模式是為網絡分析而提供的。

混雜模式抓包工具

通常在需要用到抓包工具,例如etherealsniffer、capsa時,需要把網卡置於混雜模式,需要用到軟件Winpcap。winpcap是windows平台下一個免費,公共的網絡訪問系統。開發winpcap這個項目的目的在於為win32應用程序提供訪問網絡底層的能力。
對於廣播式集線器(Hub)來説,假如PC1、PC2、PC3接在同一個Hub上,當PC1給PC3發送包時,Hub將廣播這個包,所以PC2實際上也可以看到這個包,但一般情況下它會將這個發給PC3的包丟棄,但如果處於混雜模式,PC2的網卡驅動程序就不會丟棄這個包,而是把這個包送給上層的驅動程序,應用程序。 [1] 

混雜模式模式説明

在網絡中,嗅探器接收所有的分組,而不發送任何非法分組。它不會妨礙網絡數據的流動,因此很難對其進行檢測。不過,處於混雜模式(promiscuous mode)網卡的狀態很顯然和處於普通模式下不同。在混雜模式下,應該被硬件過濾掉的分組文會進入到系統的內核。是否迴應這種分組完全依賴於內核。
1)在網絡中,混雜模式(promiscuous mode)允許一個網絡裝置竊聽而且閲讀抵達的每個網絡包。這個運行模式有時在網絡偵聽服務器上運行,用來捕獲及保存所有的數據包,以便分析。(比如,對於監聽網絡使用情況)
2)在一個以太區域網絡(LAN)中,混雜模式是指被傳輸的每個數據小包都能被一個網絡轉接器接到而且閲讀的操作模式。雜亂模態必須被每個網絡轉接器支持,也必須被主機操作系統的輸入/輸出驅動器支持。雜亂模態時常用來監督網絡使用率。
混雜模式(promiscuous mode)是和非混雜模式相對的。當一個數據小包在非混雜模式傳輸時候,所有的區域網絡裝置“聽到”數據並且判斷被包含在數據小包之中的網絡位址是否是他們的。如果它不是,數據小包進入下一個區域網絡裝置,直到到達具有正確網絡位址的裝置。然後那個裝置接收而且讀取數據。 [2] 

混雜模式eth0舉例

char *eth_name = "eth0"; //對網卡eth0進行混雜設置
struct ifreq ethreq; //網絡接口結構
strncpy(ethreq.ifr_name, eth_name, IFNAMSIZ); //指定網卡名稱
  if(-1 == ioctl(sock_raw_fd, SIOCGIFFLAGS, &ethreq)) //獲取網絡接口
  {
  perror("ioctl");
  close(sock_raw_fd);
  exit(-1);
  }
/*此處用 | 是因為必須在保留原來設置的情況下,在標誌位中加入“混雜”方式*/
  ethreq.ifr_flags |= IFF_PROMISC;
  if(-1 == ioctl(sock_raw_fd, SIOCSIFFLAGS, &ethreq)) //將標誌位設置寫入
  {
  perror("ioctl");
  close(sock_raw_fd);
  exit(-1);
  }
參考資料
  • 1.    曹晟,陳崢編著. 計算機網絡安全實驗教程[M]. 2011 第154頁
  • 2.    鄒曉, 王九紅. 基於混雜模式的網絡監視系統設計[J]. 江漢大學學報(自然科學版), 2003, 31(3):49-51.