IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置:首頁系統(tǒng)集成網(wǎng)絡(luò)管理 → 詳解Sniffer工作原理

詳解Sniffer工作原理

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  大家經(jīng)常討論SNIFFER,覺得還是很多人沒有真正理解SNIFFER,所以把我的一點理解寫出來大家共享。

  先講講HUB的工作原理吧。由于以太網(wǎng)等很多網(wǎng)絡(luò)(常見共享HUB連接的內(nèi)部網(wǎng))是基于總線方式,物理上是廣播的,就是一個機器發(fā)給另一個機器的數(shù)據(jù),共享HUB先收到然后把它接收到的數(shù)據(jù)再發(fā)給別的(來的那個口不發(fā)了)每一個口,所以在共享HUB下面同一網(wǎng)段的所有機器的網(wǎng)卡都能接收到數(shù)據(jù)。交換式HUB的內(nèi)部單片程序能記住每個口的MAC地址,以后就該哪個機器接收就發(fā)往哪個口,而不是像共享HUB那樣發(fā)給所有的口,所以交換HUB下只有該接收數(shù)據(jù)的機器的網(wǎng)卡能接收到數(shù)據(jù),當然廣播包還是發(fā)往所有口。顯然共享HUB的工作模式使得兩個機器傳輸數(shù)據(jù)的時候別的口也占用了,所以共享HUB決定了同一網(wǎng)段同一時間只能有兩個機器進行數(shù)據(jù)通信,而交換HUB兩個機器傳輸數(shù)據(jù)的時候別的口沒有占用,所以別的口之間也可以同時傳輸。這就是共享HUB與交換HUB不同的兩個地方,共享HUB是同一時間只能一個機器發(fā)數(shù)據(jù)并且所有機器都可以接收,只要不是廣播數(shù)據(jù)交換HUB同一時間可以有對機器進行數(shù)據(jù)傳輸并且數(shù)據(jù)是私有的。

  再講講網(wǎng)卡的工作原理。網(wǎng)卡收到傳輸來的數(shù)據(jù),網(wǎng)卡內(nèi)的單片程序先接收數(shù)據(jù)頭的目的MAC地址,根據(jù)計算機上的網(wǎng)卡驅(qū)動程序設(shè)置的接收模式判斷該不該接收,認為該接收就接收后產(chǎn)生中斷信號通知CPU,認為不該接收就丟掉不管,所以不該接收的數(shù)據(jù)網(wǎng)卡就截斷了,計算機根本就不知道。CPU得到中斷信號產(chǎn)生中斷,操作系統(tǒng)就根據(jù)網(wǎng)卡的驅(qū)動程序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動程序接收數(shù)據(jù),驅(qū)動程序接收數(shù)據(jù)后放入信號堆棧讓操作系統(tǒng)處理。

  有了這HUB、網(wǎng)卡的工作原理就可以講SNIFFER了。首先,要知道要SNIFFER的東西必須是要物理信號你能收到的東西。顯然只要通知網(wǎng)卡接收其收到的所有包(一般叫作亂模式),在共享HUB下就能接收到這個網(wǎng)段的所有包,但是交換HUB下就只能是自己的包加上廣播包。知道了原理那就好辦。要想在交換HUB下接收別人的包,那就要讓其發(fā)往你的機器所在口。交換HUB記住一個口的MAC是通過接收到來至于那個口的數(shù)據(jù)后記住其源MAC,就像一個機器的IP與MAC對應(yīng)的ARP列表,交換HUB維護一個物理口(就是HUB上的網(wǎng)線插口,這而的所有HUB口都是指這)與MAC的表,所以可以欺騙交換HUB的。那樣你發(fā)一個包設(shè)置源MAC是你想接收的機器的MAC,那么交換HUB就把你機器的網(wǎng)線插的物理口與那個MAC對應(yīng)起來了,以后發(fā)給那個MAC的包就發(fā)往你的網(wǎng)線插口了,也就是你的網(wǎng)卡可以SNIFFER到了。注意這物理口與MAC的表與機器的ARP表一樣是動態(tài)刷新的,那機器發(fā)包后交換HUB就又記住他的口了,所以實際上是兩個在爭,這只能應(yīng)用在只要收聽少量包就可以的場合,或者干脆你弄死要冒牌的機器。還有內(nèi)部網(wǎng)嘛基于IP的通信你可以用ARP欺騙別人機器讓其發(fā)給你的機器就可以了,如果要想不影響原來兩方的通信,可以欺騙兩方,讓其都發(fā)給你的機器你的機器再轉(zhuǎn)發(fā),就是做中間人,這用ARP加上編程很容易實現(xiàn)。還有現(xiàn)在很多設(shè)備支持遠程管理,有很多交換HUB可以設(shè)置一個口監(jiān)聽別的口,不過這就要管理權(quán)限了。

  撥號用戶嘛就是撥號服務(wù)器接收到包根據(jù)IP分析是哪個撥號用戶的包,可能也是通過查找分配撥號用戶的IP與撥號電話線的一個列表,然后就發(fā)往那個撥號用戶的電話線,所以其相當于交換HUB,但這兒是用的IP,交換HUB是用的MAC,所以撥號用戶能接收到自己的包。相應(yīng)的要想接收別的包就得欺騙撥號服務(wù)器,當然這不是交換HUB那么好欺騙,因為顯然撥號服務(wù)器的IP與電話線的列表不是交換HUB那么維護的,可以看能不能破了撥號服務(wù)器改其驅(qū)動讓其所有包都發(fā)給你,顯然不太可能了。:(

  下面是3COM網(wǎng)卡驅(qū)動程序,結(jié)合此程序講講網(wǎng)卡的原理,你可以對照程序理解?赡苡械木W(wǎng)卡有些不一樣,但大致原理一樣,所以理解很多東西不能完全照搬。

  一般網(wǎng)卡有個網(wǎng)卡地址MAC,這地址網(wǎng)卡廠家得申請,每個廠家得到一段地址,不同廠家不同就像IP地址的分配一樣,然后用這段地址分配給其生產(chǎn)的每個網(wǎng)卡一個地址。一般說來網(wǎng)卡廠家保證每個網(wǎng)卡地址不同,實際上網(wǎng)卡地址一般不是放在網(wǎng)卡內(nèi)部程序里,因為網(wǎng)卡內(nèi)程序一般都是固化的,相同網(wǎng)卡所有網(wǎng)卡的程序全部一樣,還有很多網(wǎng)卡可以配置支持很多方式,所以一般網(wǎng)卡都帶一個EEPROM存儲器,網(wǎng)卡地址MAC就放這里面。其實網(wǎng)卡接收包有幾種方式,接收指定MAC地址的包、廣播包、組播包、所有的包等,可以對其編程。通常網(wǎng)卡驅(qū)動程序設(shè)置的是接收指定MAC地址的包和廣播包,如果設(shè)置了接收所有的包,就是我們常說的用于SNIFFER的亂模式。網(wǎng)卡內(nèi)單片接收指定MAC地址的包的MAC也不是內(nèi)部程序直接通過EEPROM的數(shù)據(jù)得到,而是驅(qū)動程序通過讀E2PROM得到MAC,再把這MAC告訴網(wǎng)卡的MAC寄存器,網(wǎng)卡的內(nèi)部程序通過MAC寄存器得到的,并且以此為標準。所以只要改驅(qū)動程序把你想要的MAC告訴MAC寄存器那么就得到你想要的MAC了。

  一、關(guān)于MAC:

  1。 for (i = 0; i < 3; i++)

  phys_addr[i] = htons(read_eeprom(ioaddr, i));

  讀EEPROM中的MAC,有差不多的兩個地方,可能是ISA、PCI總線網(wǎng)卡的差別,每次讀出來的是字(兩個字節(jié))。

      static ushort read_eeprom(short ioaddr, int index)
  {
  outw(EEPROM_READ + index, ioaddr + 10);
  /* Pause for at least 162 us. for the read to take place. */
  udelay (500);
  return inw(ioaddr + 12);
  }

  這是讀EEPROM的數(shù)據(jù)的函數(shù)調(diào)用,看這很可能有可以寫EEPROM數(shù)據(jù)的可能,就是E2PROM里面的MAC數(shù)據(jù)可以改寫,原來很多網(wǎng)卡有設(shè)置程序可以指定其MAC地址的,所以。。。

  2。 memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));

  EEPROM中讀出來的MAC地址拷貝到DEV_ADDR中。

  3。 for (i = 0; i < 6; i++)

  outb(dev->dev_addr[i], ioaddr + i);

  MAC寫入MAC寄存器中,網(wǎng)卡是以寫入MAC寄存器的內(nèi)容為標準,實際上與網(wǎng)卡EEPROM數(shù)據(jù)中的MAC無關(guān)。還有發(fā)包的時候與源MAC無關(guān),就和現(xiàn)在的IP包發(fā)包的時候的源IP可以隨便填一樣,只是接收包的時候網(wǎng)卡通過MAC寄存器內(nèi)容和接收模式判斷該不該接收。當然別人接收包后回復一般都是把收到的包的源MAC當目的MAC,所以你發(fā)包的源MAC是假的話可能也收不到回復包。

  還有要改MAC只要這兒的DEV_ADDR為你想要的MAC就可以,這兒可以從一個文件讀入MAC地址或者WINDOWS那樣從注冊表里面讀取MAC內(nèi)容,這就要看驅(qū)動程序額外提供的接口了。

  二、關(guān)于接收模式:

  enum RxFilter {

  RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };

  是定義的接收模式。

  SetRxFilter = 16<<11,

  是定義的設(shè)置接收模式的命令

  outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);

  是設(shè)置接收模式,加上RxMulticast還是RxProm應(yīng)該就是亂模式了。

      3COM的網(wǎng)卡驅(qū)動程序:

      /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */
  /*
  Written 1993-1997 by Donald Becker.
  Copyright 1994-1997 by Donald Becker.
  Copyright 1993 United States Government as represented by the
  Director, National Security Agency. This software may be used and
  distributed according to the terms of the GNU Public License,
  incorporated herein by reference.
  This driver is for the 3Com EtherLinkIII series.
  The author may be reached as [email protected] or
  C/O Center of excellence in Space Data and Information Sciences
  Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
  Known limitations:
  because of the way 3c509 ISA detection works it's difficult to predict

關(guān)鍵詞標簽:原理,工作,詳解,the&n

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 路由器地址大全-各品牌路由設(shè)置地址路由器地址大全-各品牌路由設(shè)置地址各品牌的ADSL與路由器出廠默認IP、帳號、密各品牌的ADSL與路由器出廠默認IP、帳號、密Nslookup命令詳解-域名DNS診斷Nslookup命令詳解-域名DNS診斷站長裝備:十大網(wǎng)站管理員服務(wù)器工具軟件站長裝備:十大網(wǎng)站管理員服務(wù)器工具軟件

相關(guān)下載

人氣排行 各品牌的ADSL與路由器出廠默認IP、帳號、密碼路由器地址大全-各品牌路由設(shè)置地址騰達路由器怎么設(shè)置?騰達路由器設(shè)置教程ADSL雙線負載均衡設(shè)置詳細圖文教程路由表說明(詳解route print)網(wǎng)管員實際工作的一天用此方法讓2M帶寬下載速度達到250K/S左右網(wǎng)管必會!了解交換機控制端口流量