網絡卡混雜模式Promiscuous與linux上混雜模式的設定
混雜模式
混雜模式就是接收所有經過網絡卡的資料包,包括不是發給本機的包,即不驗證MAC地址。普通模式下網絡卡只接收發給本機的包(包括廣播包)傳遞給上層程式,其它的包一律丟棄。
一般來說,混雜模式不會影響網絡卡的正常工作,多在網路監聽工具上使用。
乙太網是一種匯流排型的網路,從邏輯上來看是由一條匯流排和多個連線在總線上的站點所組成各個站點採用上面提到的 CSMA/CD 協議進行通道的爭用和共享。每個站點(這裡特指計算機通過的介面卡)網絡卡來實現這種功能。網絡卡主要的工作是完成對於匯流排當前狀態的探測,確定是否進行資料的傳送,判斷每個物理資料幀目的地是否為本站地址,如果不匹配,則說明不是傳送到本站的而將它丟棄。如果是的話,接收該資料幀,進行物理資料幀的 CRC 校驗,然後將資料幀提交給LLC 子層。
網絡卡具有如下的幾種工作模式:
1) 廣播模式(Broad Cast Model):它的實體地址(MAC)地址是 0Xffffff 的幀為廣播幀,工作在廣播模式的網絡卡接收廣播幀。
2)多播傳送(MultiCast Model):多播傳送地址作為目的實體地址的幀可以被組內的其它主機同時接收,而組外主機卻接收不到。但是,如果將網絡卡設定為多播傳送模式,它可以接收所有的多播傳送幀,而不論它是不是組內成員。
3)直接模式(Direct Model):工作在直接模式下的網絡卡只接收目地址是自己 Mac地址的幀。
4)混雜模式(Promiscuous Model):工作在混雜模式下的網絡卡接收所有的流過網絡卡的幀,信包捕獲程式就是在這種模式下執行的。
網絡卡的預設工作模式包含廣播模式和直接模式,即它只接收廣播幀和發給自己的幀。如果採用混雜模式,一個站點的網絡卡將接受同一網路內所有站點所傳送的資料包這樣就可以到達對於網路資訊監視捕獲的目的。
集線器與交換機環境下混雜模式
在集線器模式下,源主機“主機2”要向目標主機“主機3”傳送資料,當資料到達集線器後,集線器會向除了源主機“主機2”本身之外的所有主機發送資料,即除了源主機“主機2”之外的所有主機都可以收到“主機2”所發的資料。目標主機“主機3”判斷到該資料是給自己的,就進行處理;其餘主機判斷到所發的資料是給“主機3”的,而不是給自己的,就不進行處理。該模式下,硬體設計簡單、速度快,並且對主機的開機(新主機加入)和關機(當前線上主機的離開)都具有很好的適應性,只要傳送的時候,目標主機線上,就可以馬上進入工作狀態。但缺點是該模式對衝突的解決是非常麻煩的,例如,當“主機2”向某一臺主機發送資料的期間,“主機4”也再向另一臺主機發送資料,則二者的資料會出現衝突,這種衝突會導致二主機所發的資料全部出錯。解決辦法就是二者各“等”一會兒再重發,但再重發並不能避免產生新的衝突。這種現象在頻繁資料交換的時候,衝突的現象非常明顯,會大大減低網路頻寬,現在這種模式已被交換機模式所代替。
在交換機模式下,源主機“主機2”要向目標主機“主機3”傳送資料,當資料到達交換機後,交換機會分析目標主機“主機3”所在的埠,然後只向該埠傳送資料,這樣,其餘主機就接不到由源主機“主機2”所發出來的。這樣,使得別的主機就不需要處理不屬於自己的資料,從而減少了負荷,而且如果此前“主機5”要向“主機1”傳送資料時,就不會出現衝突。在該模式下,由於有效地減少了“衝突”的可能,所以整個頻寬的利用率大大提高,並且各個主機也減少了處理不屬於自己資料包的工作。但這樣做也有一些缺點,比如新主機的加入和當前線上主機的離開,通常都需要交換機花費一定時間來判斷新的變化。當前絕大多數乙太網所使用的都是交換機模式。
通過上面的分析,不難看出,當前以交換機作為交換裝置的網路中,即使是將某一個網絡卡設定成“混雜模式”,除非使用一些特殊技術,網絡卡本身一般是接不到不是傳送給自身的資料,所接到的只是給本身IP的資料和廣播資料,但這時RAW Socket可以監聽所有的資料了。這點與“常規模式”不同
linux下混雜模式設定
命令方式設定
ifconfig eth1 promisc 設定混雜模式 ifconfig eth1 -promisc 取消混雜模式 執行結果如下 [[email protected] tftpboot]# ifconfig eth6 Link encap:Ethernet HWaddr 08:00:27:70:1D:79 inet6 addr: fe80::a00:27ff:fe70:1d79/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:100124 errors:0 dropped:0 overruns:0 frame:0 TX packets:8795 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12986638 (12.3 MiB) TX bytes:6452270 (6.1 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1303 errors:0 dropped:0 overruns:0 frame:0 TX packets:1303 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:303973 (296.8 KiB) TX bytes:303973 (296.8 KiB) [[email protected] tftpboot]# ifconfig eth6 promisc [[email protected] tftpboot]# ifconfig eth6 Link encap:Ethernet HWaddr 08:00:27:70:1D:79 inet6 addr: fe80::a00:27ff:fe70:1d79/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:100154 errors:0 dropped:0 overruns:0 frame:0 TX packets:8795 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:13007885 (12.4 MiB) TX bytes:6452270 (6.1 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1303 errors:0 dropped:0 overruns:0 frame:0 TX packets:1303 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:303973 (296.8 KiB) TX bytes:303973 (296.8 KiB) [[email protected] tftpboot]#C語言程式設計方式設定
#include <stdio.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <linux/if_ether.h> #include <net/if.h> #include <sys/ioctl.h> #include <string.h> #define ETH_NAME "eth1" int do_promisc(void) { int f, s; struct ifreq ifr; if ( (f=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)))<0){ return -1; } strcpy(ifr.ifr_name, ETH_NAME); if ((s = ioctl(f, SIOCGIFFLAGS, &ifr))<0){ close(f); return-1; } if(ifr.ifr_flags & IFF_RUNNING){ printf("eth link up\n"); }else{ printf("eth link down\n"); } ifr.ifr_flags |= IFF_PROMISC; if ((s = ioctl(f, SIOCSIFFLAGS, &ifr)) < 0){ return -1; } printf("Setting interface ::: %s ::: to promisc\n\n", ifr.ifr_name); return 0; } int check_nic(void) { struct ifreq ifr; int skfd = socket(AF_INET, SOCK_DGRAM, 0); strcpy(ifr.ifr_name, ETH_NAME); if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) { close(skfd); return -1; } if(ifr.ifr_flags & IFF_RUNNING){ printf("link up\n"); close(skfd); return 0; // 網絡卡已插上網線 }else { printf("link down\n"); close(skfd); return -1; } } int main(void) { do_promisc(); return 0; }相關推薦
網絡卡混雜模式Promiscuous與linux上混雜模式的設定
混雜模式 混雜模式就是接收所有經過網絡卡的資料包,包括不是發給本機的包,即不驗證MAC地址。普通模式下網絡卡只接收發給本機的包(包括廣播包)傳遞給上層程式,其它的包一律丟棄。 一般來說,混雜模式不會影響網絡卡的正常工作,多在網路監聽工具上使用。 乙太網(Ethernet
Linux下網絡卡phy狀態檢測與控制
最近在一個專案中,整合一個交換機晶片的時候,遇到一些麻煩,發現交換機的效能總是上 不去,100M的交換機,實際交換能力只有10M。跟做硬體的同事一起,花了幾周時間除錯, 才找到問題。原來是接到交換機晶片上的幾個子系統,用的Micrel 8041PHY晶片,預設關閉 了硬體流控,導致交換機無法通過流控來控制網
Linux 檢視網絡卡全雙工 還是半雙工 以及設定網絡卡為半雙工
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
多網絡卡繫結:active-backup - 主備模式
網絡卡繫結模式:active-backup - 主備模式 一個網絡卡處於活躍狀態,另一個處於備份狀態,所有流量都在主鏈路上處理,當活躍網絡卡down掉時,啟用備份網絡卡。 系統:這裡以Centos7為例(Centos6配置引數和7不一樣) 這裡將em1和em2繫結到bond0上,
網絡卡多佇列技術與RSS功能介紹
多佇列網絡卡是一種技術,最初是用來解決網路IO QoS (quality of service)問題的,後來隨著網路IO的頻寬的不斷提升,單核CPU不能完全處滿足網絡卡的需求,通過多佇列網絡卡驅動的支援,將各個佇列通過中斷繫結到不同的核上,以滿足網絡卡的需求。 常見的有In
檢視Linux網絡卡UUID和MAC地址---Linux命令
場景:新增網絡卡後發現並沒有自動生成對應的檔案,以及克隆後並沒有自動生成新的檔案。檢視網絡卡UUID:nmcli con show 或 nmcli con list 檢視網絡卡mac地址:
在ubuntu 18.04下,無線網絡卡無驅動,連不上wifi,顯示wifi沒有介面卡的解決方法
近來因為做東西要用到linux環境,所以自己的筆記本在win10的系統上又安裝了ubuntu 18.04版本的雙系統,但是安裝好以後,沒有無線網絡卡的驅動,顯示wifi沒有介面卡等字樣,很糾結,前後研究了將僅一天,終於解決了,現在寫出來,希望對大家能有所幫助,也可適用於沒網的
作業系統實戰之CPU的模式切換與Linux上的實現
概述 這兒我們以x86-64為例,通常情況下我們使用的都是壓縮核心,也就是經過壓縮的核心,核心外面被添加了一段自解壓程式。對於壓縮核心,從載入程式引導後首先執行的是那段位元組壓程式,其入口為arch/
Linux網絡卡混雜模式(轉自cnblogs)
混雜模式就是接收所有經過網絡卡的資料包,包括不是發給本機的包,即不驗證MAC地址。普通模式下網絡卡只接收發給本機的包(包括廣播包)傳遞給上層程式,其它的包一律丟棄。 一般來說,混雜模式不會影響網絡卡的正常工作,多在網路監聽工具上使用。網絡卡具有如下的幾種工作模式: 1) 廣播模式(Broad Cas
linux網絡卡混雜模式
混雜模式就是接收所有經過網絡卡的資料包,包括不是發給本機的包,即不驗證MAC地址。普通模式下網絡卡只接收發給本機的包(包括廣播包)傳遞給上層程式,其它的包一律丟棄。一般來說,混雜模式不會影響網絡卡的正常工作,多在網路監聽工具上使用。 網絡卡具有如下的幾種工作模式:1) 廣播模式(Broad Cast M
linux 檢視 設定 網絡卡介面 混雜模式
http://zhidao.baidu.com/question/1923643886938022467.html 使用ifconfig命令可檢視當前網絡卡是否設定為混雜模式 [[email protected]~]$ ifconfig eth0 Linkenca
圖解幾個與Linux網路虛擬化相關的虛擬網絡卡-VETH/MACVLAN/MACVTAP/IPVLAN
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【Ubuntu14.04】網路模式與網絡卡配置
VMware虛擬機器軟體為什麼提供有三種網路模式(橋接模式、NAT模式、僅主機模式),本章節會分別介紹著三種模式的區別,如何在Ubuntu14.04環境下設定網路連線模式與配置網絡卡資訊的方法。 關於三種網路模式 橋接模式:讓虛擬機器與物
Linux下調整網絡卡的工作模式
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
目標板(linux)與PC 網絡卡 直連(TFTP)
一、 VMware中網絡卡設定 “虛擬機器”--> "設定"--> 如圖介面, 網路介面卡裡,選中 VMnet0,如圖紅框所示; 二、 在“編輯”欄中,繼續設定,如下圖: 3號 紅框內,不可以選 “自動”,因為我的網絡卡是 USB FE....所以
Linux中USB無線網絡卡實現AP模式(hostapd交叉編譯環境下)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux遠端管理命令之網絡卡與IP地址
網絡卡 網絡卡是一個專門負責網路通訊的硬體裝置 IP地址是設定在網絡卡上的地址資訊 我們可以把電腦比作電話,網絡卡相當於SIM卡,IP地址相當於電話號碼 IP地址 每天聯網的電腦上都有IP地
Linux--多網絡卡的7種Bond模式
網絡卡bond是通過把多張網絡卡繫結為一個邏輯網絡卡,實現本地網絡卡的冗餘,頻寬擴容和負載均衡。在應用部署中是一種常用的技術,我們公司基本所有的專案相關伺服器都做了bond,這裡總結整理,以便待查。 bond模式: Mode=0(balance-rr) 表示負載分擔round-ro
linux 網絡卡軟中斷的檢視與設定負載均衡
在使用 cat /proc/irq/95/smp_affinity cat /proc/irq/smp_affinity 等看出網絡卡的佇列都在使用cpu1 和cpu2 cat /proc/irq/95/smp_affinity 00000002 cat /proc/irq/96/
虛擬機器裡的Linux系統在NAT模式突然無法連線網絡卡
原因可能是本地主機服務裡面的兩個服務沒有開啟,當啟動開之後虛擬機器就可以正常上網了,參考:https://blog.csdn.net/tzs_1041218129/article/details/52611410